001 /*
002 * Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025 package javax.swing.plaf.synth;
026
027 import java.awt.*;
028 import javax.swing.*;
029 import javax.swing.plaf.UIResource;
030
031 /**
032 * JButton object that draws a scaled Arrow in one of the cardinal directions.
033 *
034 * @version 1.24, 05/05/07
035 * @author Scott Violet
036 */
037 class SynthArrowButton extends JButton implements SwingConstants,
038 UIResource {
039 private int direction;
040
041 public SynthArrowButton(int direction) {
042 super ();
043 super .setFocusable(false);
044 setDirection(direction);
045 setDefaultCapable(false);
046 }
047
048 public String getUIClassID() {
049 return "ArrowButtonUI";
050 }
051
052 public void updateUI() {
053 setUI(new SynthArrowButtonUI());
054 }
055
056 public void setDirection(int dir) {
057 direction = dir;
058 putClientProperty("__arrow_direction__", new Integer(dir));
059 repaint();
060 }
061
062 public int getDirection() {
063 return direction;
064 }
065
066 public void setFocusable(boolean focusable) {
067 }
068
069 private static class SynthArrowButtonUI extends SynthButtonUI {
070 protected void installDefaults(AbstractButton b) {
071 super .installDefaults(b);
072 updateStyle(b);
073 }
074
075 protected void paint(SynthContext context, Graphics g) {
076 SynthArrowButton button = (SynthArrowButton) context
077 .getComponent();
078 context.getPainter().paintArrowButtonForeground(context, g,
079 0, 0, button.getWidth(), button.getHeight(),
080 button.getDirection());
081 }
082
083 void paintBackground(SynthContext context, Graphics g,
084 JComponent c) {
085 context.getPainter().paintArrowButtonBackground(context, g,
086 0, 0, c.getWidth(), c.getHeight());
087 }
088
089 public void paintBorder(SynthContext context, Graphics g,
090 int x, int y, int w, int h) {
091 context.getPainter().paintArrowButtonBorder(context, g, x,
092 y, w, h);
093 }
094
095 public Dimension getMinimumSize() {
096 return new Dimension(5, 5);
097 }
098
099 public Dimension getMaximumSize() {
100 return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
101 }
102
103 public Dimension getPreferredSize(JComponent c) {
104 SynthContext context = getContext(c);
105 Dimension dim = null;
106 if (context.getComponent().getName() == "ScrollBar.button") {
107 // ScrollBar arrow buttons can be non-square when
108 // the ScrollBar.squareButtons property is set to FALSE
109 // and the ScrollBar.buttonSize property is non-null
110 dim = (Dimension) context.getStyle().get(context,
111 "ScrollBar.buttonSize");
112 }
113 if (dim == null) {
114 // For all other cases (including Spinner, ComboBox), we will
115 // fall back on the single ArrowButton.size value to create
116 // a square return value
117 int size = context.getStyle().getInt(context,
118 "ArrowButton.size", 16);
119 dim = new Dimension(size, size);
120 }
121 context.dispose();
122 return dim;
123 }
124 }
125 }
|