blob: db9127b3ae67dd1a4afa7e85d3dbdd98c7f46c68 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2003-2007 Sun Microsystems, Inc. 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. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package sun.awt.X11;
27
28import java.awt.Color;
29import java.awt.Font;
30import java.awt.SystemColor;
31
32import javax.swing.*;
33import javax.swing.plaf.*;
34import javax.swing.border.*;
35import javax.swing.text.DefaultEditorKit;
36
37import javax.swing.plaf.basic.BasicBorders;
38import com.sun.java.swing.plaf.motif.*;
39import sun.awt.X11.XComponentPeer;
40
41class XAWTLookAndFeel extends MotifLookAndFeel {
42
43 /**
44 * Load the SystemColors into the defaults table. The keys
45 * for SystemColor defaults are the same as the names of
46 * the public fields in SystemColor. If the table is being
47 * created on a native Motif platform we use the SystemColor
48 * values, otherwise we create color objects whose values match
49 * the default CDE/Motif colors.
50 */
51 protected void initSystemColorDefaults(UIDefaults table) {
52 String[] defaultSystemColors = {
53 "desktop", "#005C5C", /* Color of the desktop background */
54 "activeCaption", "#000080", /* Color for captions (title bars) when they are active. */
55 "activeCaptionText", "#FFFFFF", /* Text color for text in captions (title bars). */
56 "activeCaptionBorder", "#B24D7A", /* Border color for caption (title bar) window borders. */
57 "inactiveCaption", "#AEB2C3", /* Color for captions (title bars) when not active. */
58 "inactiveCaptionText", "#000000", /* Text color for text in inactive captions (title bars). */
59 "inactiveCaptionBorder", "#AEB2C3", /* Border color for inactive caption (title bar) window borders. */
60 "window", "#AEB2C3", /* Default color for the interior of windows */
61 "windowBorder", "#AEB2C3", /* ??? */
62 "windowText", "#000000", /* ??? */
63 "menu", "#AEB2C3", /* ??? */
64 "menuText", "#000000", /* ??? */
65 "text", "#FFF7E9", /* Text background color */
66 "textText", "#000000", /* Text foreground color */
67 "textHighlight", "#000000", /* Text background color when selected */
68 "textHighlightText", "#FFF7E9", /* Text color when selected */
69 "textInactiveText", "#808080", /* Text color when disabled */
70 "control", "#AEB2C3", /* Default color for controls (buttons, sliders, etc) */
71 "controlText", "#000000", /* Default color for text in controls */
72 "controlHighlight", "#DCDEE5", /* Highlight color for controls */
73 "controlLtHighlight", "#DCDEE5", /* Light highlight color for controls */
74 "controlShadow", "#63656F", /* Shadow color for controls */
75 "controlLightShadow", "#9397A5", /* Shadow color for controls */
76 "controlDkShadow", "#000000", /* Dark shadow color for controls */
77 "scrollbar", "#AEB2C3", /* Scrollbar ??? color. PENDING(jeff) foreground? background? ?*/
78 "info", "#FFF7E9", /* ??? */
79 "infoText", "#000000" /* ??? */
80 };
81
82 loadSystemColors(table, defaultSystemColors, true);
83 }
84
85 protected void initComponentDefaults(UIDefaults table) {
86 super.initComponentDefaults(table);
87
88 FontUIResource dialogPlain12 = new FontUIResource(Font.DIALOG,
89 Font.PLAIN, 12);
90 FontUIResource sansSerifPlain12 = new FontUIResource(Font.SANS_SERIF,
91 Font.PLAIN, 12);
92 FontUIResource monospacedPlain12 = new FontUIResource(Font.MONOSPACED,
93 Font.PLAIN, 12);
94 ColorUIResource red = new ColorUIResource(Color.red);
95 ColorUIResource black = new ColorUIResource(Color.black);
96 ColorUIResource white = new ColorUIResource(Color.white);
97 ColorUIResource lightGray = new ColorUIResource(Color.lightGray);
98 ColorUIResource controlDarker = new ColorUIResource(SystemColor.controlDkShadow);
99
100 Color back = table.getColor("control");
101 Color colors [] = XComponentPeer.getSystemColors();
102 Color scrollBarBackground = colors[XComponentPeer.BACKGROUND_COLOR];
103 Color trackColor = new Color(MotifColorUtilities.calculateSelectFromBackground(scrollBarBackground.getRed(), scrollBarBackground.getGreen(), scrollBarBackground.getBlue()));
104 Border loweredBevelBorder = new MotifBorders.BevelBorder(false,
105 table.getColor("controlShadow"),
106 table.getColor("controlLtHighlight"));
107
108 Border raisedBevelBorder = new MotifBorders.BevelBorder(true,
109 table.getColor("controlShadow"),
110 table.getColor("controlLtHighlight"));
111
112 Border marginBorder = new BasicBorders.MarginBorder();
113
114 Border focusBorder = new MotifBorders.FocusBorder(
115 table.getColor("control"),
116 table.getColor("activeCaptionBorder"));
117
118
119 Border focusBevelBorder = new BorderUIResource.CompoundBorderUIResource(
120 focusBorder,
121 loweredBevelBorder);
122
123 Border textFieldBorder = new BorderUIResource.CompoundBorderUIResource(
124 focusBevelBorder,
125 marginBorder);
126
127 // *** Text
128
129 Object fieldInputMap = new UIDefaults.LazyInputMap(new Object[] {
130 "COPY", DefaultEditorKit.copyAction,
131 "PASTE", DefaultEditorKit.pasteAction,
132 "CUT", DefaultEditorKit.cutAction,
133 "control C", DefaultEditorKit.copyAction,
134 "control V", DefaultEditorKit.pasteAction,
135 "control X", DefaultEditorKit.cutAction,
136 "control INSERT", DefaultEditorKit.copyAction,
137 "shift INSERT", DefaultEditorKit.pasteAction,
138 "shift DELETE", DefaultEditorKit.cutAction,
139 "control F", DefaultEditorKit.forwardAction,
140 "control B", DefaultEditorKit.backwardAction,
141 "control D", DefaultEditorKit.deleteNextCharAction,
142 "typed \010", DefaultEditorKit.deletePrevCharAction,
143 "DELETE", DefaultEditorKit.deleteNextCharAction,
144 "RIGHT", DefaultEditorKit.forwardAction,
145 "LEFT", DefaultEditorKit.backwardAction,
146 "KP_RIGHT", DefaultEditorKit.forwardAction,
147 "KP_LEFT", DefaultEditorKit.backwardAction,
148 "shift LEFT", DefaultEditorKit.selectionBackwardAction,
149 "shift RIGHT", DefaultEditorKit.selectionForwardAction,
150 "control LEFT", DefaultEditorKit.previousWordAction,
151 "control RIGHT", DefaultEditorKit.nextWordAction,
152 "control shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
153 "control shift RIGHT", DefaultEditorKit.selectionNextWordAction,
154 "control SLASH", DefaultEditorKit.selectAllAction,
155 "HOME", DefaultEditorKit.beginLineAction,
156 "END", DefaultEditorKit.endLineAction,
157 "shift HOME", DefaultEditorKit.selectionBeginLineAction,
158 "shift END", DefaultEditorKit.selectionEndLineAction,
159 "control BACK_SLASH", "unselect",
160 "ENTER", JTextField.notifyAction,
161 "control shift O", "toggle-componentOrientation"
162 });
163
164 Object passwordInputMap = new UIDefaults.LazyInputMap(new Object[] {
165 "COPY", DefaultEditorKit.copyAction,
166 "PASTE", DefaultEditorKit.pasteAction,
167 "CUT", DefaultEditorKit.cutAction,
168 "control C", DefaultEditorKit.copyAction,
169 "control V", DefaultEditorKit.pasteAction,
170 "control X", DefaultEditorKit.cutAction,
171 "control INSERT", DefaultEditorKit.copyAction,
172 "shift INSERT", DefaultEditorKit.pasteAction,
173 "shift DELETE", DefaultEditorKit.cutAction,
174 "control F", DefaultEditorKit.forwardAction,
175 "control B", DefaultEditorKit.backwardAction,
176 "control D", DefaultEditorKit.deleteNextCharAction,
177 "typed \010", DefaultEditorKit.deletePrevCharAction,
178 "DELETE", DefaultEditorKit.deleteNextCharAction,
179 "RIGHT", DefaultEditorKit.forwardAction,
180 "LEFT", DefaultEditorKit.backwardAction,
181 "KP_RIGHT", DefaultEditorKit.forwardAction,
182 "KP_LEFT", DefaultEditorKit.backwardAction,
183 "shift LEFT", DefaultEditorKit.selectionBackwardAction,
184 "shift RIGHT", DefaultEditorKit.selectionForwardAction,
185 "control LEFT", DefaultEditorKit.beginLineAction,
186 "control RIGHT", DefaultEditorKit.endLineAction,
187 "control shift LEFT", DefaultEditorKit.selectionBeginLineAction,
188 "control shift RIGHT", DefaultEditorKit.selectionEndLineAction,
189 "control SLASH", DefaultEditorKit.selectAllAction,
190 "HOME", DefaultEditorKit.beginLineAction,
191 "END", DefaultEditorKit.endLineAction,
192 "shift HOME", DefaultEditorKit.selectionBeginLineAction,
193 "shift END", DefaultEditorKit.selectionEndLineAction,
194 "control BACK_SLASH", "unselect",
195 "ENTER", JTextField.notifyAction,
196 "control shift O", "toggle-componentOrientation"
197 });
198
199 Object multilineInputMap = new UIDefaults.LazyInputMap(new Object[] {
200 "COPY", DefaultEditorKit.copyAction,
201 "PASTE", DefaultEditorKit.pasteAction,
202 "CUT", DefaultEditorKit.cutAction,
203 "control C", DefaultEditorKit.copyAction,
204 "control V", DefaultEditorKit.pasteAction,
205 "control X", DefaultEditorKit.cutAction,
206 "control INSERT", DefaultEditorKit.copyAction,
207 "shift INSERT", DefaultEditorKit.pasteAction,
208 "shift DELETE", DefaultEditorKit.cutAction,
209 "control F", DefaultEditorKit.forwardAction,
210 "control B", DefaultEditorKit.backwardAction,
211 "control D", DefaultEditorKit.deleteNextCharAction,
212 "typed \010", DefaultEditorKit.deletePrevCharAction,
213 "DELETE", DefaultEditorKit.deleteNextCharAction,
214 "RIGHT", DefaultEditorKit.forwardAction,
215 "LEFT", DefaultEditorKit.backwardAction,
216 "KP_RIGHT", DefaultEditorKit.forwardAction,
217 "KP_LEFT", DefaultEditorKit.backwardAction,
218 "shift LEFT", DefaultEditorKit.selectionBackwardAction,
219 "shift RIGHT", DefaultEditorKit.selectionForwardAction,
220 "control LEFT", DefaultEditorKit.previousWordAction,
221 "control RIGHT", DefaultEditorKit.nextWordAction,
222 "control shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
223 "control shift RIGHT", DefaultEditorKit.selectionNextWordAction,
224 "control SLASH", DefaultEditorKit.selectAllAction,
225 "HOME", DefaultEditorKit.beginLineAction,
226 "END", DefaultEditorKit.endLineAction,
227 "shift HOME", DefaultEditorKit.selectionBeginLineAction,
228 "shift END", DefaultEditorKit.selectionEndLineAction,
229
230 "control N", DefaultEditorKit.downAction,
231 "control P", DefaultEditorKit.upAction,
232 "UP", DefaultEditorKit.upAction,
233 "DOWN", DefaultEditorKit.downAction,
234 "KP_UP", DefaultEditorKit.upAction,
235 "KP_DOWN", DefaultEditorKit.downAction,
236 "PAGE_UP", DefaultEditorKit.pageUpAction,
237 "PAGE_DOWN", DefaultEditorKit.pageDownAction,
238 "shift PAGE_UP", "selection-page-up",
239 "shift PAGE_DOWN", "selection-page-down",
240 "ctrl shift PAGE_UP", "selection-page-left",
241 "ctrl shift PAGE_DOWN", "selection-page-right",
242 "shift UP", DefaultEditorKit.selectionUpAction,
243 "shift DOWN", DefaultEditorKit.selectionDownAction,
244 "shift KP_UP", DefaultEditorKit.selectionUpAction,
245 "shift KP_DOWN", DefaultEditorKit.selectionDownAction,
246 "ENTER", DefaultEditorKit.insertBreakAction,
247 "TAB", DefaultEditorKit.insertTabAction,
248 "control BACK_SLASH", "unselect",
249 "control HOME", DefaultEditorKit.beginAction,
250 "control END", DefaultEditorKit.endAction,
251 "control shift HOME", DefaultEditorKit.selectionBeginAction,
252 "control shift END", DefaultEditorKit.selectionEndAction,
253 "control T", "next-link-action",
254 "control shift T", "previous-link-action",
255 "control SPACE", "activate-link-action",
256 "control shift O", "toggle-componentOrientation"
257 });
258
259 Object sliderFocusInsets = new InsetsUIResource( 0, 0, 0, 0 );
260
261 Object[] defaults = {
262
263 "ScrollBar.background", scrollBarBackground,
264 "ScrollBar.foreground", table.get("control"),
265 "ScrollBar.track", trackColor,
266 "ScrollBar.trackHighlight", trackColor,
267 "ScrollBar.thumb", scrollBarBackground,
268 "ScrollBar.thumbHighlight", table.get("controlHighlight") ,
269 "ScrollBar.thumbDarkShadow", table.get("controlDkShadow"),
270 "ScrollBar.thumbShadow", table.get("controlShadow"),
271 "ScrollBar.border", loweredBevelBorder,
272 "ScrollBar.allowsAbsolutePositioning", Boolean.TRUE,
273 "ScrollBar.defaultWidth", Integer.valueOf(17),
274 "ScrollBar.focusInputMap",
275 new UIDefaults.LazyInputMap(new Object[] {
276 "RIGHT", "positiveUnitIncrement",
277 "KP_RIGHT", "positiveUnitIncrement",
278 "DOWN", "positiveUnitIncrement",
279 "KP_DOWN", "positiveUnitIncrement",
280 "PAGE_DOWN", "positiveBlockIncrement",
281 "ctrl PAGE_DOWN", "positiveBlockIncrement",
282 "LEFT", "negativeUnitIncrement",
283 "KP_LEFT", "negativeUnitIncrement",
284 "UP", "negativeUnitIncrement",
285 "KP_UP", "negativeUnitIncrement",
286 "PAGE_UP", "negativeBlockIncrement",
287 "ctrl PAGE_UP", "negativeBlockIncrement",
288 "HOME", "minScroll",
289 "END", "maxScroll"
290 }),
291
292 "ScrollPane.font", dialogPlain12,
293 "ScrollPane.background", scrollBarBackground,
294 "ScrollPane.foreground", table.get("controlText"),
295 "ScrollPane.border", null,
296 "ScrollPane.viewportBorder", loweredBevelBorder,
297 "ScrollPane.ancestorInputMap",
298 new UIDefaults.LazyInputMap(new Object[] {
299 "RIGHT", "unitScrollRight",
300 "KP_RIGHT", "unitScrollRight",
301 "DOWN", "unitScrollDown",
302 "KP_DOWN", "unitScrollDown",
303 "LEFT", "unitScrollLeft",
304 "KP_LEFT", "unitScrollLeft",
305 "UP", "unitScrollUp",
306 "KP_UP", "unitScrollUp",
307 "PAGE_UP", "scrollUp",
308 "PAGE_DOWN", "scrollDown",
309 "ctrl PAGE_UP", "scrollLeft",
310 "ctrl PAGE_DOWN", "scrollRight",
311 "ctrl HOME", "scrollHome",
312 "ctrl END", "scrollEnd"
313 }),
314
315 "FormattedTextField.focusInputMap",
316 new UIDefaults.LazyInputMap(new Object[] {
317 "ctrl C", DefaultEditorKit.copyAction,
318 "ctrl V", DefaultEditorKit.pasteAction,
319 "ctrl X", DefaultEditorKit.cutAction,
320 "COPY", DefaultEditorKit.copyAction,
321 "PASTE", DefaultEditorKit.pasteAction,
322 "CUT", DefaultEditorKit.cutAction,
323 "shift LEFT", DefaultEditorKit.selectionBackwardAction,
324 "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
325 "shift RIGHT", DefaultEditorKit.selectionForwardAction,
326 "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
327 "ctrl LEFT", DefaultEditorKit.previousWordAction,
328 "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
329 "ctrl RIGHT", DefaultEditorKit.nextWordAction,
330 "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
331 "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
332 "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
333 "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
334 "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
335 "ctrl A", DefaultEditorKit.selectAllAction,
336 "HOME", DefaultEditorKit.beginLineAction,
337 "END", DefaultEditorKit.endLineAction,
338 "shift HOME", DefaultEditorKit.selectionBeginLineAction,
339 "shift END", DefaultEditorKit.selectionEndLineAction,
340 "typed \010", DefaultEditorKit.deletePrevCharAction,
341 "DELETE", DefaultEditorKit.deleteNextCharAction,
342 "RIGHT", DefaultEditorKit.forwardAction,
343 "LEFT", DefaultEditorKit.backwardAction,
344 "KP_RIGHT", DefaultEditorKit.forwardAction,
345 "KP_LEFT", DefaultEditorKit.backwardAction,
346 "ENTER", JTextField.notifyAction,
347 "ctrl BACK_SLASH", "unselect",
348 "control shift O", "toggle-componentOrientation",
349 "ESCAPE", "reset-field-edit",
350 "UP", "increment",
351 "KP_UP", "increment",
352 "DOWN", "decrement",
353 "KP_DOWN", "decrement",
354 }),
355
356 "TextField.caretForeground", black,
357 "TextField.caretBlinkRate", Integer.valueOf(500),
358 "TextField.inactiveForeground", table.get("textInactiveText"),
359 "TextField.selectionBackground", table.get("textHighlight"),
360 "TextField.selectionForeground", table.get("textHighlightText"),
361 "TextField.background", table.get("window"),
362 "TextField.foreground", table.get("textText"),
363 "TextField.font", sansSerifPlain12,
364 "TextField.border", textFieldBorder,
365 "TextField.focusInputMap", fieldInputMap,
366
367 "PasswordField.caretForeground", black,
368 "PasswordField.caretBlinkRate", Integer.valueOf(500),
369 "PasswordField.inactiveForeground", table.get("textInactiveText"),
370 "PasswordField.selectionBackground", table.get("textHighlight"),
371 "PasswordField.selectionForeground", table.get("textHighlightText"),
372 "PasswordField.background", table.get("window"),
373 "PasswordField.foreground", table.get("textText"),
374 "PasswordField.font", sansSerifPlain12,
375 "PasswordField.border", textFieldBorder,
376 "PasswordField.focusInputMap", passwordInputMap,
377
378 "TextArea.caretForeground", black,
379 "TextArea.caretBlinkRate", Integer.valueOf(500),
380 "TextArea.inactiveForeground", table.get("textInactiveText"),
381 "TextArea.selectionBackground", table.get("textHighlight"),
382 "TextArea.selectionForeground", table.get("textHighlightText"),
383 "TextArea.background", table.get("window"),
384 "TextArea.foreground", table.get("textText"),
385 "TextArea.font", monospacedPlain12,
386 "TextArea.border", marginBorder,
387 "TextArea.focusInputMap", multilineInputMap
388 };
389
390 table.putDefaults(defaults);
391 }
392}