/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Distributable under LGPL license. * See terms of license at gnu.org. */ package net.java.sip.communicator.impl.gui.lookandfeel; import java.awt.*; import java.awt.image.*; import javax.swing.*; import javax.swing.plaf.*; import javax.swing.plaf.metal.*; import net.java.sip.communicator.util.skin.*; /** * The SIPCommScrollBarUI implementation. * * @author Yana Stamcheva * @author Adam Netocny */ public class SIPCommScrollBarUI extends MetalScrollBarUI implements Skinnable { /** * The horizontal thumb image. */ private BufferedImage horizontalThumb; /** * The vertical thumb image. */ private BufferedImage verticalThumb; /** * The horizontal thumb handle image. */ private BufferedImage horizontalThumbHandle; /** * The vertical thumb handle image. */ private BufferedImage verticalThumbHandle; /** * Creates an instance of SIPCommScrollBarUI. */ public SIPCommScrollBarUI() { loadSkin(); } /** * Creates the UI for the given JComponent. * * @param c the JComponent, for which to create an UI * @return the component UI */ public static ComponentUI createUI(JComponent c) { return new SIPCommScrollBarUI(); } /** * Paints the track of the scroll bar. * * @param g the Graphics object used for painting * @param c the component to paint a track for * @param trackBounds the bounds of the track to paint */ @Override protected void paintTrack( Graphics g, JComponent c, Rectangle trackBounds) { g.translate( trackBounds.x, trackBounds.y ); boolean leftToRight = c.getComponentOrientation().isLeftToRight(); if ( scrollbar.getOrientation() == JScrollBar.VERTICAL ) { if ( !isFreeStanding ) { trackBounds.width += 2; if ( !leftToRight ) g.translate( -1, 0 ); } g.setColor(this.trackColor); g.fillRect(0, 0, trackBounds.width-2, trackBounds.height); g.setColor(this.trackHighlightColor); g.drawRect(0, 0, trackBounds.width-2, trackBounds.height); if ( !isFreeStanding ) { trackBounds.width -= 2; if ( !leftToRight ) g.translate( 1, 0 ); } } else // HORIZONTAL { if ( !isFreeStanding ) { trackBounds.height += 2; } g.setColor(this.trackColor); g.fillRect(0, 0, trackBounds.width, trackBounds.height-2); g.setColor(this.trackHighlightColor); g.drawRect(0, 0, trackBounds.width, trackBounds.height-2); if ( !isFreeStanding ) { trackBounds.height -= 2; } } g.translate( -trackBounds.x, -trackBounds.y ); } /** * Paints the thumb of the scroll bar. * * @param g the Graphics object used for painting * @param c the component to paint a thumb for * @param thumbBounds the bounds of the thumb to paint */ @Override protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { if (!c.isEnabled()) { return; } boolean leftToRight = c.getComponentOrientation().isLeftToRight(); g.translate( thumbBounds.x, thumbBounds.y ); int imgWidth; int imgHeight; int indentWidth = 10; if(scrollbar.getOrientation() == JScrollBar.VERTICAL) { if(!isFreeStanding) { thumbBounds.width += 2; if ( !leftToRight ) { g.translate( -1, 0 ); } } imgWidth = verticalThumb.getWidth(); imgHeight = verticalThumb.getHeight(); Image topImage = verticalThumb.getSubimage(0, 0, imgWidth, indentWidth); Image middleImage = verticalThumb.getSubimage(0, indentWidth, imgWidth, imgHeight-2*indentWidth); Image bottomImage = verticalThumb.getSubimage(0, imgHeight-indentWidth, imgWidth, indentWidth); g.drawImage(topImage, 0, 0, thumbBounds.width-2, indentWidth , null); g.drawImage(middleImage, thumbBounds.x, indentWidth, thumbBounds.width-2, thumbBounds.height-indentWidth , null); g.drawImage(bottomImage, thumbBounds.x, thumbBounds.height-indentWidth, thumbBounds.width-2, indentWidth, null); g.drawImage(verticalThumbHandle, thumbBounds.width/2-verticalThumbHandle.getWidth()/2, thumbBounds.height/2-verticalThumbHandle.getHeight()/2, verticalThumbHandle.getWidth(), verticalThumbHandle.getHeight(), null); if (!isFreeStanding) { thumbBounds.width -= 2; if(!leftToRight) { g.translate( 1, 0 ); } } } else // HORIZONTAL { if (!isFreeStanding) thumbBounds.height += 2; imgWidth = horizontalThumb.getWidth(); imgHeight = horizontalThumb.getHeight(); Image leftImage = horizontalThumb.getSubimage(0, 0, indentWidth, imgHeight); Image middleImage = horizontalThumb.getSubimage(indentWidth, 0, imgWidth-2*indentWidth, imgHeight); Image rightImage = horizontalThumb.getSubimage(imgWidth-indentWidth, 0, indentWidth, imgHeight); g.drawImage(leftImage, 0, 0, indentWidth, thumbBounds.height-2, null); g.drawImage(middleImage, indentWidth, thumbBounds.y, thumbBounds.width-indentWidth, thumbBounds.height-2 , null); g.drawImage(rightImage, thumbBounds.width-indentWidth, thumbBounds.y, indentWidth, thumbBounds.height-2, null); g.drawImage(horizontalThumbHandle, thumbBounds.width/2-horizontalThumbHandle.getWidth()/2, thumbBounds.height/2-horizontalThumbHandle.getHeight()/2, horizontalThumbHandle.getWidth(), horizontalThumbHandle.getHeight(), null); if (!isFreeStanding) thumbBounds.height -= 2; } g.translate(-thumbBounds.x, -thumbBounds.y); } /** * Returns the minimum scroll thumb size. * * @return the minimum scroll thumb size */ @Override protected Dimension getMinimumThumbSize() { if(scrollbar.getOrientation() == JScrollBar.VERTICAL) return new Dimension( scrollBarWidth, verticalThumbHandle.getHeight()+4); else return new Dimension( horizontalThumbHandle.getWidth()+4, scrollBarWidth); } /** * Loads UI resources. */ public void loadSkin() { horizontalThumb = (BufferedImage)UIManager .get("ScrollBar.horizontalThumbIcon"); verticalThumb = (BufferedImage)UIManager .get("ScrollBar.verticalThumbIcon"); horizontalThumbHandle = (BufferedImage)UIManager .get("ScrollBar.horizontalThumbHandleIcon"); verticalThumbHandle = (BufferedImage)UIManager .get("ScrollBar.verticalThumbHandleIcon"); } }