1 /* 2 * Copyright (c) 1997, 2014, 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 26 package com.sun.java.swing.plaf.motif; 27 28 import java.awt.Dimension; 29 import java.awt.Graphics; 30 import java.awt.Rectangle; 31 32 import javax.swing.JComponent; 33 import javax.swing.JSlider; 34 import javax.swing.plaf.ComponentUI; 35 import javax.swing.plaf.basic.BasicSliderUI; 36 37 import static sun.swing.SwingUtilities2.drawHLine; 38 import static sun.swing.SwingUtilities2.drawVLine; 39 40 /** 41 * Motif Slider 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 Jeff Dinkins 51 */ 52 public class MotifSliderUI extends BasicSliderUI { 53 54 static final Dimension PREFERRED_HORIZONTAL_SIZE = new Dimension(164, 15); 55 static final Dimension PREFERRED_VERTICAL_SIZE = new Dimension(15, 164); 56 57 static final Dimension MINIMUM_HORIZONTAL_SIZE = new Dimension(43, 15); 58 static final Dimension MINIMUM_VERTICAL_SIZE = new Dimension(15, 43); 59 60 /** 61 * MotifSliderUI Constructor 62 */ 63 public MotifSliderUI(JSlider b) { 64 super(b); 65 } 66 67 /** 68 * create a MotifSliderUI object 69 */ 70 public static ComponentUI createUI(JComponent b) { 71 return new MotifSliderUI((JSlider)b); 72 } 73 74 public Dimension getPreferredHorizontalSize() { 75 return PREFERRED_HORIZONTAL_SIZE; 76 } 77 78 public Dimension getPreferredVerticalSize() { 79 return PREFERRED_VERTICAL_SIZE; 80 } 81 82 public Dimension getMinimumHorizontalSize() { 83 return MINIMUM_HORIZONTAL_SIZE; 84 } 85 86 public Dimension getMinimumVerticalSize() { 87 return MINIMUM_VERTICAL_SIZE; 88 } 89 90 protected Dimension getThumbSize() { 91 if ( slider.getOrientation() == JSlider.HORIZONTAL ) { 92 return new Dimension( 30, 15 ); 93 } 94 else { 95 return new Dimension( 15, 30 ); 96 } 97 } 98 99 public void paintFocus(Graphics g) { 100 } 101 102 public void paintTrack(Graphics g) { 103 } 104 105 public void paintThumb(Graphics g) { 106 Rectangle knobBounds = thumbRect; 107 108 int x = knobBounds.x; 109 int y = knobBounds.y; 110 int w = knobBounds.width; 111 int h = knobBounds.height; 112 113 if ( slider.isEnabled() ) { 114 g.setColor(slider.getForeground()); 115 } 116 else { 117 // PENDING(jeff) - the thumb should be dithered when disabled 118 g.setColor(slider.getForeground().darker()); 119 } 120 121 if ( slider.getOrientation() == JSlider.HORIZONTAL ) { 122 g.translate(x, knobBounds.y-1); 123 124 // fill 125 g.fillRect(0, 1, w, h - 1); 126 127 // highlight 128 g.setColor(getHighlightColor()); 129 drawHLine(g, 0, w - 1, 1); // top 130 drawVLine(g, 0, 1, h); // left 131 drawVLine(g, w / 2, 2, h - 1); // center 132 133 // shadow 134 g.setColor(getShadowColor()); 135 drawHLine(g, 0, w - 1, h); // bottom 136 drawVLine(g, w - 1, 1, h); // right 137 drawVLine(g, w / 2 - 1, 2, h); // center 138 139 g.translate(-x, -(knobBounds.y-1)); 140 } 141 else { 142 g.translate(knobBounds.x-1, 0); 143 144 // fill 145 g.fillRect(1, y, w - 1, h); 146 147 // highlight 148 g.setColor(getHighlightColor()); 149 drawHLine(g, 1, w, y); // top 150 drawVLine(g, 1, y + 1, y + h - 1); // left 151 drawHLine(g, 2, w - 1, y + h / 2); // center 152 153 // shadow 154 g.setColor(getShadowColor()); 155 drawHLine(g, 2, w, y + h - 1); // bottom 156 drawVLine(g, w, y + h - 1, y); // right 157 drawHLine(g, 2, w - 1, y + h / 2 - 1);// center 158 159 g.translate(-(knobBounds.x-1), 0); 160 } 161 } 162 }