History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/javax/swing/plaf/basic/BasicGraphicsUtils.java (1 of 18352 files). Show all

Unified · Split

java/pkg/javax/swing/plaf/basic/BasicGraphicsUtils.java+314−0
@@ -0,0 +1,314 @@
1/*
2 * Copyright (c) 1997, 2008, 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 */
25package javax.swing.plaf.basic;
26
27import javax.swing.*;
28import java.awt.Component;
29import java.awt.Color;
30import java.awt.Dimension;
31import java.awt.Font;
32import java.awt.FontMetrics;
33import java.awt.Graphics;
34import java.awt.Insets;
35import java.awt.Rectangle;
36import java.awt.Toolkit;
37import java.awt.event.KeyEvent;
38import java.awt.event.InputEvent;
39
40import sun.swing.SwingUtilities2;
41
42
43/*
44 * @author Hans Muller
45 */
46
47public class BasicGraphicsUtils
48{
49
50 private static final Insets GROOVE_INSETS = new Insets(2, 2, 2, 2);
51 private static final Insets ETCHED_INSETS = new Insets(2, 2, 2, 2);
52
53 public static void drawEtchedRect(Graphics g, int x, int y, int w, int h,
54 Color shadow, Color darkShadow,
55 Color highlight, Color lightHighlight)
56 {
57 Color oldColor = g.getColor(); // Make no net change to g
58 g.translate(x, y);
59
60 g.setColor(shadow);
61 g.drawLine(0, 0, w-1, 0); // outer border, top
62 g.drawLine(0, 1, 0, h-2); // outer border, left
63
64 g.setColor(darkShadow);
65 g.drawLine(1, 1, w-3, 1); // inner border, top
66 g.drawLine(1, 2, 1, h-3); // inner border, left
67
68 g.setColor(lightHighlight);
69 g.drawLine(w-1, 0, w-1, h-1); // outer border, bottom
70 g.drawLine(0, h-1, w-1, h-1); // outer border, right
71
72 g.setColor(highlight);
73 g.drawLine(w-2, 1, w-2, h-3); // inner border, right
74 g.drawLine(1, h-2, w-2, h-2); // inner border, bottom
75
76 g.translate(-x, -y);
77 g.setColor(oldColor);
78 }
79
80
81 /**
82 * Returns the amount of space taken up by a border drawn by
83 * <code>drawEtchedRect()</code>
84 *
85 * @return the inset of an etched rect
86 */
87 public static Insets getEtchedInsets() {
88 return ETCHED_INSETS;
89 }
90
91
92 public static void drawGroove(Graphics g, int x, int y, int w, int h,
93 Color shadow, Color highlight)
94 {
95 Color oldColor = g.getColor(); // Make no net change to g
96 g.translate(x, y);
97
98 g.setColor(shadow);
99 g.drawRect(0, 0, w-2, h-2);
100
101 g.setColor(highlight);
102 g.drawLine(1, h-3, 1, 1);
103 g.drawLine(1, 1, w-3, 1);
104
105 g.drawLine(0, h-1, w-1, h-1);
106 g.drawLine(w-1, h-1, w-1, 0);
107
108 g.translate(-x, -y);
109 g.setColor(oldColor);
110 }
111
112 /**
113 * Returns the amount of space taken up by a border drawn by
114 * <code>drawGroove()</code>
115 *
116 * @return the inset of a groove border
117 */
118 public static Insets getGrooveInsets() {
119 return GROOVE_INSETS;
120 }
121
122
123 public static void drawBezel(Graphics g, int x, int y, int w, int h,
124 boolean isPressed, boolean isDefault,
125 Color shadow, Color darkShadow,
126 Color highlight, Color lightHighlight)
127 {
128 Color oldColor = g.getColor(); // Make no net change to g
129 g.translate(x, y);
130
131 if (isPressed && isDefault) {
132 g.setColor(darkShadow);
133 g.drawRect(0, 0, w - 1, h - 1);
134 g.setColor(shadow);
135 g.drawRect(1, 1, w - 3, h - 3);
136 } else if (isPressed) {
137 drawLoweredBezel(g, x, y, w, h,
138 shadow, darkShadow, highlight, lightHighlight);
139 } else if (isDefault) {
140 g.setColor(darkShadow);
141 g.drawRect(0, 0, w-1, h-1);
142
143 g.setColor(lightHighlight);
144 g.drawLine(1, 1, 1, h-3);
145 g.drawLine(2, 1, w-3, 1);
146
147 g.setColor(highlight);
148 g.drawLine(2, 2, 2, h-4);
149 g.drawLine(3, 2, w-4, 2);
150
151 g.setColor(shadow);
152 g.drawLine(2, h-3, w-3, h-3);
153 g.drawLine(w-3, 2, w-3, h-4);
154
155 g.setColor(darkShadow);
156 g.drawLine(1, h-2, w-2, h-2);
157 g.drawLine(w-2, h-2, w-2, 1);
158 } else {
159 g.setColor(lightHighlight);
160 g.drawLine(0, 0, 0, h-1);
161 g.drawLine(1, 0, w-2, 0);
162
163 g.setColor(highlight);
164 g.drawLine(1, 1, 1, h-3);
165 g.drawLine(2, 1, w-3, 1);
166
167 g.setColor(shadow);
168 g.drawLine(1, h-2, w-2, h-2);
169 g.drawLine(w-2, 1, w-2, h-3);
170
171 g.setColor(darkShadow);
172 g.drawLine(0, h-1, w-1, h-1);
173 g.drawLine(w-1, h-1, w-1, 0);
174 }
175 g.translate(-x, -y);
176 g.setColor(oldColor);
177 }
178
179 public static void drawLoweredBezel(Graphics g, int x, int y, int w, int h,
180 Color shadow, Color darkShadow,
181 Color highlight, Color lightHighlight) {
182 g.setColor(darkShadow);
183 g.drawLine(0, 0, 0, h-1);
184 g.drawLine(1, 0, w-2, 0);
185
186 g.setColor(shadow);
187 g.drawLine(1, 1, 1, h-2);
188 g.drawLine(1, 1, w-3, 1);
189
190 g.setColor(lightHighlight);
191 g.drawLine(0, h-1, w-1, h-1);
192 g.drawLine(w-1, h-1, w-1, 0);
193
194 g.setColor(highlight);
195 g.drawLine(1, h-2, w-2, h-2);
196 g.drawLine(w-2, h-2, w-2, 1);
197 }
198
199
200 /** Draw a string with the graphics <code>g</code> at location (x,y)
201 * just like <code>g.drawString</code> would.
202 * The first occurrence of <code>underlineChar</code>
203 * in text will be underlined. The matching algorithm is
204 * not case sensitive.
205 */
206 public static void drawString(Graphics g,String text,int underlinedChar,int x,int y) {
207 int index=-1;
208
209 if (underlinedChar != '\0') {
210 char uc = Character.toUpperCase((char)underlinedChar);
211 char lc = Character.toLowerCase((char)underlinedChar);
212 int uci = text.indexOf(uc);
213 int lci = text.indexOf(lc);
214
215 if(uci == -1) {
216 index = lci;
217 }
218 else if(lci == -1) {
219 index = uci;
220 }
221 else {
222 index = (lci < uci) ? lci : uci;
223 }
224 }
225 drawStringUnderlineCharAt(g, text, index, x, y);
226 }
227
228 /**
229 * Draw a string with the graphics <code>g</code> at location
230 * (<code>x</code>, <code>y</code>)
231 * just like <code>g.drawString</code> would.
232 * The character at index <code>underlinedIndex</code>
233 * in text will be underlined. If <code>index</code> is beyond the
234 * bounds of <code>text</code> (including < 0), nothing will be
235 * underlined.
236 *
237 * @param g Graphics to draw with
238 * @param text String to draw
239 * @param underlinedIndex Index of character in text to underline
240 * @param x x coordinate to draw at
241 * @param y y coordinate to draw at
242 * @since 1.4
243 */
244 public static void drawStringUnderlineCharAt(Graphics g, String text,
245 int underlinedIndex, int x,int y) {
246 SwingUtilities2.drawStringUnderlineCharAt(null, g, text,
247 underlinedIndex, x, y);
248 }
249
250 public static void drawDashedRect(Graphics g,int x,int y,int width,int height) {
251 int vx,vy;
252
253 // draw upper and lower horizontal dashes
254 for (vx = x; vx < (x + width); vx+=2) {
255 g.fillRect(vx, y, 1, 1);
256 g.fillRect(vx, y + height-1, 1, 1);
257 }
258
259 // draw left and right vertical dashes
260 for (vy = y; vy < (y + height); vy+=2) {
261 g.fillRect(x, vy, 1, 1);
262 g.fillRect(x+width-1, vy, 1, 1);
263 }
264 }
265
266 public static Dimension getPreferredButtonSize(AbstractButton b, int textIconGap)
267 {
268 if(b.getComponentCount() > 0) {
269 return null;
270 }
271
272 Icon icon = b.getIcon();
273 String text = b.getText();
274
275 Font font = b.getFont();
276 FontMetrics fm = b.getFontMetrics(font);
277
278 Rectangle iconR = new Rectangle();
279 Rectangle textR = new Rectangle();
280 Rectangle viewR = new Rectangle(Short.MAX_VALUE, Short.MAX_VALUE);
281
282 SwingUtilities.layoutCompoundLabel(
283 b, fm, text, icon,
284 b.getVerticalAlignment(), b.getHorizontalAlignment(),
285 b.getVerticalTextPosition(), b.getHorizontalTextPosition(),
286 viewR, iconR, textR, (text == null ? 0 : textIconGap)
287 );
288
289 /* The preferred size of the button is the size of
290 * the text and icon rectangles plus the buttons insets.
291 */
292
293 Rectangle r = iconR.union(textR);
294
295 Insets insets = b.getInsets();
296 r.width += insets.left + insets.right;
297 r.height += insets.top + insets.bottom;
298
299 return r.getSize();
300 }
301
302 /*
303 * Convenience function for determining ComponentOrientation. Helps us
304 * avoid having Munge directives throughout the code.
305 */
306 static boolean isLeftToRight( Component c ) {
307 return c.getComponentOrientation().isLeftToRight();
308 }
309
310 static boolean isMenuShortcutKeyDown(InputEvent event) {
311 return (event.getModifiers() &
312 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) != 0;
313 }
314}