package com.opticalcobra.storybear.menu; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.plaf.metal.MetalScrollBarUI; import com.opticalcobra.storybear.res.Imagelib; import com.opticalcobra.storybear.res.Ressources; public class Scrollbar extends JScrollPane { /** * */ private static final long serialVersionUID = -6473015188076754224L; public Scrollbar(Color bg){ super(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JScrollBar sb = this.getVerticalScrollBar(); sb.setUI(new ScrollbarUI(bg)); } static class ScrollbarUI extends MetalScrollBarUI { private JButton up,down; private ImageIcon iup,idown; private Imagelib il= Imagelib.getInstance(); private Color background; private boolean scaled = false; public ScrollbarUI(Color bg) { this.background=bg; iup = new ImageIcon(il.menuImage(Imagelib.MENU_SCROLL_UP)); up = new JButton(); up.setIcon(iup); up.setRolloverIcon(iup); up.setPressedIcon(iup); // up.setPreferredSize(new Dimension((int)(30/Ressources.SCALE),(int)(20/Ressources.SCALE))); up.setBorder(null); up.setOpaque(true); up.setBorderPainted(false); up.setBackground(background); idown = new ImageIcon(il.menuImage(Imagelib.MENU_SCROLL_DOWN)); down = new JButton(); down.setIcon(idown); down.setRolloverIcon(idown); down.setPressedIcon(idown); // down.setPreferredSize(new Dimension((int)(30/Ressources.SCALE),(int)(20/Ressources.SCALE))); down.setBorder(null); down.setBorderPainted(false); down.setBackground(background); } @Override protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { double scale = ((double)thumbBounds.width/30)*Ressources.SCALE; int thumb = (int) (thumbBounds.height - (2*(int)(10*scale))); Image imageThumb; if(!scaled){ scaled = true; Image img = iup.getImage() ; Image newimg = img.getScaledInstance( thumbBounds.width, (int) (15*scale), java.awt.Image.SCALE_SMOOTH ) ; iup= new ImageIcon( newimg ); up.setIcon(iup); up.setRolloverIcon(iup); up.setPressedIcon(iup); Image img2 = idown.getImage() ; Image newimg2 = img2.getScaledInstance( thumbBounds.width, (int) (15*scale), java.awt.Image.SCALE_SMOOTH ) ; idown= new ImageIcon( newimg2 ); down.setIcon(idown); down.setRolloverIcon(idown); down.setPressedIcon(idown); } if(thumb<0){ imageThumb = new BufferedImage(thumbBounds.width, (int)(30/Ressources.SCALE), BufferedImage.TYPE_INT_ARGB); Graphics g2 = imageThumb.getGraphics(); g2.drawImage(il.menuImage(Imagelib.MENU_SCROLL_THUMB_TOP),0,0, null); g2.drawImage(il.menuImage(Imagelib.MENU_SCROLL_THUMB_BOTTOM),0,(int)(15/Ressources.SCALE),null); g.drawImage(imageThumb, thumbBounds.x,thumbBounds.y + (int)((thumbBounds.height-(30/Ressources.SCALE))/2), null); } else{ imageThumb = new BufferedImage(thumbBounds.width, thumbBounds.height, BufferedImage.TYPE_INT_ARGB); Graphics g2 = imageThumb.getGraphics(); g2.setColor(new Color(128,128,128)); g2.drawImage(il.menuImage(Imagelib.MENU_SCROLL_THUMB_TOP),0,0,thumbBounds.width,(int) (10*scale), null); g2.drawImage(il.menuImage(Imagelib.MENU_SCROLL_THUMB_BOTTOM),0,(thumbBounds.height-(int)(10*scale)),thumbBounds.width,(int) (10*scale),null); g2.drawImage(il.menuImage(Imagelib.MENU_SCROLL_THUMB_MIDDLE), 0, (int)(10*scale), thumbBounds.width, thumb, null); g.drawImage(imageThumb, thumbBounds.x,thumbBounds.y, null); } } @Override protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { g.setColor(background); // g.setColor(Color.BLUE); g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height); } @Override protected JButton createDecreaseButton(int orientation) { return up; } @Override protected JButton createIncreaseButton(int orientation) { return down; } } }