All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.tidalwave.netbeans.lookandfeel.ui.BlueMarineScrollBarUI Maven / Gradle / Ivy

The newest version!
/***********************************************************************************************************************
 *
 * SolidBlue - open source safe data
 * Copyright (C) 2011-2011 by Tidalwave s.a.s. (http://www.tidalwave.it)
 *
 ***********************************************************************************************************************
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 *
 ***********************************************************************************************************************
 *
 * WWW: http://solidblue.java.net
 * SCM: https://bitbucket.org/tidalwave/solidblue-src
 *
 **********************************************************************************************************************/
package it.tidalwave.netbeans.lookandfeel.ui;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JScrollBar;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalScrollBarUI;

/*******************************************************************************
 *
 * @author  Fabrizio Giudici
 * @version $Id$
 *
 ******************************************************************************/
public class BlueMarineScrollBarUI extends MetalScrollBarUI 
  {
    private boolean clicked;
    private boolean rollOver;
  
    /***************************************************************************
     *
     *
     **************************************************************************/
    class TrackListener extends MetalScrollBarUI.TrackListener 
      {
        private final BlueMarineScrollBarUI parent;

        public TrackListener (final BlueMarineScrollBarUI parent) 
          {
            this.parent = parent;
          }

        @Override
        public void mouseEntered (final MouseEvent e) 
          {
            super.mouseEntered(e);
            parent.rollOver = true;
          }

        @Override
        public void mouseExited (final MouseEvent e) 
          {
            super.mouseExited(e);
            parent.rollOver = false;
          }

        @Override
        public void mousePressed (final MouseEvent e) 
          {
            super.mousePressed(e);
            parent.clicked = true;
            scrollbar.repaint();
          }

        @Override
        public void mouseReleased (final MouseEvent e)
          {
            super.mouseReleased(e);
            parent.clicked = false;
            scrollbar.repaint();
          }

        @Override
        public void mouseMoved (final MouseEvent e) 
          {
            super.mouseMoved(e);

            if (parent.rollOver && !thumbRect.contains(e.getX(), e.getY())) 
              {
                rollOver = false;
                scrollbar.repaint();
              }
            else if (!parent.rollOver && thumbRect.contains(e.getX(), e.getY())) 
              {
                parent.rollOver = true;
                scrollbar.repaint();
              } 
          }

        @Override
        public void mouseDragged (final MouseEvent e) 
          {
            super.mouseDragged(e);

            if ( parent.rollOver && !thumbRect.contains(e.getX(), e.getY())) 
              {
                rollOver = false;
                scrollbar.repaint();
              }  
            else if ( !parent.rollOver && thumbRect.contains(e.getX(), e.getY()))
              {
                parent.rollOver = true;
                scrollbar.repaint();
              }
          }
      }
    
    /***************************************************************************
     *
     *
     **************************************************************************/
    public static ComponentUI createUI (final JComponent c)    
      {
        return new BlueMarineScrollBarUI();
      } 

    /***************************************************************************
     *
     *
     **************************************************************************/
    @Override
    protected TrackListener createTrackListener()
      {
        return new TrackListener(this);
      }
  
    /***************************************************************************
     *
     *
     **************************************************************************/
    @Override
    protected JButton createDecreaseButton (final int orientation)
      {
        decreaseButton = new BlueMarineScrollButton(orientation, scrollBarWidth, isFreeStanding);
        return decreaseButton;
      }

    /***************************************************************************
     *
     *
     **************************************************************************/
    @Override
    protected JButton createIncreaseButton (final int orientation) 
      {
        increaseButton =  new BlueMarineScrollButton(orientation, scrollBarWidth, isFreeStanding);
        return increaseButton;
      }
  
    /***************************************************************************
     *
     *
     **************************************************************************/
    @Override
    protected void paintThumb (final Graphics g, final JComponent c, final Rectangle bounds) 
      {
        final Graphics2D g2 = (Graphics2D)g;
        final RenderingHints saveRenderingHints = g2.getRenderingHints();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Color thumbColor = UIManager.getColor("ScrollBar.thumb");
//        Color thumbShadow = Color.BLACK ; // UIManager.getColor("ScrollBar.thumbShadow");
      
//        g.translate(bounds.x, bounds.y);
//    
//        int w = 16; // icDecor.getIconWidth();
//        int h = 16; // icDecor.getIconHeight();
////        int x = (bounds.width - w) / 2;
////        int y = (bounds.height - h) / 2;
//        g.translate(-bounds.x, -bounds.y);
    
        final GradientPaint gradient;
        
        if (clicked)
          {
            thumbColor = variant(thumbColor, 1.4);
          }
        
        final Color color1 = variant(thumbColor, 0.8);
        final Color color2 = variant(thumbColor, 1/0.8);
    
        if (scrollbar.getOrientation() == JScrollBar.HORIZONTAL) 
          {
            gradient = new GradientPaint(bounds.x, bounds.y, color1, bounds.x, bounds.height, color2);
          }
        else 
          {
            gradient = new GradientPaint(bounds.x, bounds.y, color1, bounds.width, bounds.y, color2);
          }

        final int r = 15;
        g2.setPaint(gradient);
        g2.fillRoundRect(bounds.x, bounds.y, bounds.width - 1, bounds.height - 1, r, r);
        g2.setColor(variant(thumbColor, 0.7));
        g2.drawRoundRect(bounds.x, bounds.y, bounds.width - 1, bounds.height - 1, r, r);
        g2.setRenderingHints(saveRenderingHints);
      }

    /***************************************************************************
     *
     *
     **************************************************************************/
    @Override
    protected void paintTrack (final Graphics g, final JComponent c, final Rectangle bounds) 
      {
        final Graphics2D g2 = (Graphics2D)g;
        final GradientPaint gradient;
        final Color trackColor = UIManager.getColor("ScrollBar.track");
        final Color color1 = variant(trackColor, 0.8);
        final Color color2 = variant(trackColor, 1/0.8);
        
        if (scrollbar.getOrientation() == JScrollBar.HORIZONTAL) 
          {
            gradient = new GradientPaint(bounds.x, 
                                         bounds.y, 
                                         color1, 
                                         bounds.x,
                                         bounds.y + bounds.height, 
                                         color2);
          }
        else 
          {
            gradient = new GradientPaint(bounds.x,
                                         bounds.y, 
                                         color2, 
                                         bounds.x + bounds.width, 
                                         bounds.y, 
                                         color1);
          }
    
        g2.setPaint(gradient);
        g2.fill(bounds);
      }
  
    /***************************************************************************
     *
     *
     **************************************************************************/
    public static Color variant (final Color color, final double factor) 
      {
        return new Color(Math.min((int)(color.getRed() * factor), 255),
                         Math.min((int)(color.getGreen() * factor), 255),
                         Math.min((int)(color.getBlue() * factor), 255));
      }
  }
    




© 2015 - 2025 Weber Informatics LLC | Privacy Policy