1 /*
   2  * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package com.sun.java.swing.plaf.motif;
  26 
  27 import javax.swing.*;
  28 import javax.swing.event.*;
  29 import javax.swing.plaf.*;
  30 import javax.swing.border.*;
  31 import javax.swing.plaf.basic.BasicScrollBarUI;
  32 
  33 import java.awt.Dimension;
  34 import java.awt.Insets;
  35 import java.awt.Rectangle;
  36 import java.awt.Graphics;
  37 import java.awt.Color;
  38 
  39 
  40 /**
  41  * Implementation of ScrollBarUI for the Motif Look and Feel
  42  * <p>
  43  * <strong>Warning:</strong>
  44  * Serialized objects of this class will not be compatible with
  45  * future Swing releases.  The current serialization support is appropriate
  46  * for short term storage or RMI between applications running the same
  47  * version of Swing.  A future release of Swing will provide support for
  48  * long term persistence.
  49  *
  50  * @author Rich Schiavi
  51  * @author Hans Muller
  52  */
  53 public class MotifScrollBarUI extends BasicScrollBarUI
  54 {
  55 
  56     public static ComponentUI createUI(JComponent c) {
  57         return new MotifScrollBarUI();
  58     }
  59 
  60     public Dimension getPreferredSize(JComponent c) {
  61         Insets insets = c.getInsets();
  62         int dx = insets.left + insets.right;
  63         int dy = insets.top + insets.bottom;
  64         return (scrollbar.getOrientation() == JScrollBar.VERTICAL)
  65             ? new Dimension(dx + 11, dy + 33)
  66             : new Dimension(dx + 33, dy + 11);
  67     }
  68 
  69     protected JButton createDecreaseButton(int orientation) {
  70         return new MotifScrollBarButton(orientation);
  71     }
  72 
  73     protected JButton createIncreaseButton(int orientation) {
  74         return new MotifScrollBarButton(orientation);
  75     }
  76 
  77 
  78     public void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)  {
  79         g.setColor(trackColor);
  80         g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height);
  81     }
  82 
  83 
  84     public void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds)
  85     {
  86 
  87         if(thumbBounds.isEmpty() || !scrollbar.isEnabled())     {
  88             return;
  89         }
  90 
  91         int w = thumbBounds.width;
  92         int h = thumbBounds.height;
  93 
  94         g.translate(thumbBounds.x, thumbBounds.y);
  95         g.setColor(thumbColor);
  96         g.fillRect(0, 0, w-1, h-1);
  97 
  98         g.setColor(thumbHighlightColor);
  99         g.drawLine(0, 0, 0, h-1);
 100         g.drawLine(1, 0, w-1, 0);
 101 
 102         g.setColor(thumbLightShadowColor);
 103         g.drawLine(1, h-1, w-1, h-1);
 104         g.drawLine(w-1, 1, w-1, h-2);
 105 
 106         g.translate(-thumbBounds.x, -thumbBounds.y);
 107     }
 108 }