content: package edu.cmu.hcii.whyline.ui.components;
  
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Graphics2D;
  import java.awt.Rectangle;
  import java.awt.RenderingHints;
  
  import javax.swing.JButton;
  import javax.swing.JComponent;
  import javax.swing.JScrollPane;
  import javax.swing.plaf.metal.MetalScrollBarUI;
  import javax.swing.plaf.metal.MetalScrollButton;
  
  import edu.cmu.hcii.whyline.ui.UI;
  
  /**
   * @author Andrew J. Ko
   *
   */
  public class WhylineScrollPane extends JScrollPane {
  	
  	public WhylineScrollPane(Component view) {
  
  		this(view, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
  		
  	}
  
  	public WhylineScrollPane(Component view, int vsbPolicy, int hsbPolicy) {
  		
  		super(view, vsbPolicy, hsbPolicy);
  
  		getViewport().setBackground(null);
  		getViewport().setOpaque(false);
  		setBorder(null);
  
  		setOpaque(true);
  		
  		getHorizontalScrollBar().setUI(new WhylineScrollBarUI());
  		getVerticalScrollBar().setUI(new WhylineScrollBarUI());
  
  		getHorizontalScrollBar().setBackground(UI.getControlBackColor());
  		getVerticalScrollBar().setBackground(UI.getControlBackColor());
  		
  	}
  	
  	public Color getBackground() { 
  		
  		Component view = getViewport().getView();
  		if(view ==  null || !view.isBackgroundSet())
  			return UI.getControlBackColor();
  		else
  			return view.getBackground();
  		
  	}
  
  	public static class WhylineScrollBarUI extends MetalScrollBarUI {
  		
  		public WhylineScrollBarUI() {}
  		
  	    protected void paintTrack( Graphics g, JComponent c, Rectangle trackBounds ) {
  
  			((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  			((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  
  	    	g.setColor(UI.getControlCenterColor());
  	    	g.fillRoundRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height, UI.getRoundedness(), UI.getRoundedness());
  
  	    	g.setColor(UI.getControlFrontColor());
  	    	g.drawRoundRect(trackBounds.x, trackBounds.y, trackBounds.width - 1, trackBounds.height - 1, UI.getRoundedness(), UI.getRoundedness());
  	    	
  	    }
  
  	    protected void paintThumb( Graphics g, JComponent c, Rectangle thumbBounds ) {
  	    	
  	    	((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  	    	((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  
          	g.setColor(UI.getControlFrontColor());
  	    	g.fillRoundRect(thumbBounds.x + 2, thumbBounds.y + 2, thumbBounds.width - 4, thumbBounds.height - 4, UI.getRoundedness(), UI.getRoundedness());
  	    	
  	    }
  
  	    protected JButton createDecreaseButton( int orientation ) {
  	    	
  	        decreaseButton = new WhylineScrollButton( orientation, scrollBarWidth, isFreeStanding );
  	    	return decreaseButton;
  
  	    }
  
  	    protected JButton createIncreaseButton( int orientation ) {
  
  	    	increaseButton =  new WhylineScrollButton( orientation, scrollBarWidth, isFreeStanding );
  	    	return increaseButton;
  
  	    }
  
  	}
  	
  	public static class WhylineScrollButton extends MetalScrollButton {
  
  		public WhylineScrollButton(int direction, int width, boolean freeStanding) {
  
  			super(direction, 1, freeStanding);
  
  			setVisible(false);
  			
  		}
  		
  	}
  			
  }