001 /* MetalLookAndFeel.java
002 Copyright (C) 2002, 2005, 2006, Free Software Foundation, Inc.
003
004 This file is part of GNU Classpath.
005
006 GNU Classpath is free software; you can redistribute it and/or modify
007 it under the terms of the GNU General Public License as published by
008 the Free Software Foundation; either version 2, or (at your option)
009 any later version.
010
011 GNU Classpath is distributed in the hope that it will be useful, but
012 WITHOUT ANY WARRANTY; without even the implied warranty of
013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 General Public License for more details.
015
016 You should have received a copy of the GNU General Public License
017 along with GNU Classpath; see the file COPYING. If not, write to the
018 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019 02110-1301 USA.
020
021 Linking this library statically or dynamically with other modules is
022 making a combined work based on this library. Thus, the terms and
023 conditions of the GNU General Public License cover the whole
024 combination.
025
026 As a special exception, the copyright holders of this library give you
027 permission to link this library with independent modules to produce an
028 executable, regardless of the license terms of these independent
029 modules, and to copy and distribute the resulting executable under
030 terms of your choice, provided that you also meet, for each linked
031 independent module, the terms and conditions of the license of that
032 module. An independent module is a module which is not derived from
033 or based on this library. If you modify this library, you may extend
034 this exception to your version of the library, but you are not
035 obligated to do so. If you do not wish to do so, delete this
036 exception statement from your version. */
037
038
039 package javax.swing.plaf.metal;
040
041 import gnu.classpath.SystemProperties;
042
043 import java.awt.Color;
044 import java.awt.Font;
045
046 import javax.swing.LookAndFeel;
047 import javax.swing.UIDefaults;
048 import javax.swing.UIManager;
049 import javax.swing.plaf.BorderUIResource;
050 import javax.swing.plaf.ColorUIResource;
051 import javax.swing.plaf.FontUIResource;
052 import javax.swing.plaf.InsetsUIResource;
053 import javax.swing.plaf.BorderUIResource.LineBorderUIResource;
054 import javax.swing.plaf.basic.BasicLookAndFeel;
055
056
057 /**
058 * A custom look and feel that is designed to look similar across different
059 * operating systems. To install this look and feel, add the following code
060 * (or something similar) near the start of your application:</p>
061 * <pre>
062 * try
063 * {
064 * UIManager.setLookAndFeel(new MetalLookAndFeel());
065 * }
066 * catch (UnsupportedLookAndFeelException e)
067 * {
068 * e.printStackTrace();
069 * }</pre>
070 */
071 public class MetalLookAndFeel extends BasicLookAndFeel
072 {
073 private static final long serialVersionUID = 6680646159193457980L;
074
075 /** The current theme. */
076 private static MetalTheme theme;
077
078 /**
079 * Creates a new instance of the Metal look and feel.
080 */
081 public MetalLookAndFeel()
082 {
083 // Nothing to do here.
084 }
085
086 /**
087 * Sets the current theme to a new instance of {@link DefaultMetalTheme}.
088 */
089 protected void createDefaultTheme()
090 {
091 getCurrentTheme();
092 }
093
094 /**
095 * Returns <code>false</code> to indicate that this look and feel does not
096 * attempt to emulate the look and feel of native applications on the host
097 * platform.
098 *
099 * @return <code>false</code>.
100 */
101 public boolean isNativeLookAndFeel()
102 {
103 return false;
104 }
105
106 /**
107 * Returns <code>true</code> to indicate that this look and feel is supported
108 * on all platforms.
109 *
110 * @return <code>true</code>.
111 */
112 public boolean isSupportedLookAndFeel()
113 {
114 return true;
115 }
116
117 /**
118 * Returns a string describing the look and feel. In this case, the method
119 * returns "Metal look and feel".
120 *
121 * @return A string describing the look and feel.
122 */
123 public String getDescription()
124 {
125 return "The Java(tm) Look and Feel";
126 }
127
128 /**
129 * Returns the look and feel identifier.
130 *
131 * @return "MetalLookAndFeel".
132 */
133 public String getID()
134 {
135 return "Metal";
136 }
137
138 /**
139 * Returns the look and feel name.
140 *
141 * @return "MetalLookAndFeel".
142 */
143 public String getName()
144 {
145 return "Metal";
146 }
147
148 public UIDefaults getDefaults()
149 {
150 createDefaultTheme();
151 UIDefaults def = super.getDefaults();
152
153 theme.addCustomEntriesToTable(def);
154 return def;
155 }
156
157 /**
158 * Returns the accelerator foreground color from the installed theme.
159 *
160 * @return The accelerator foreground color.
161 */
162 public static ColorUIResource getAcceleratorForeground()
163 {
164 if (theme != null)
165 return theme.getAcceleratorForeground();
166 return null;
167 }
168
169 /**
170 * Returns the accelerator selected foreground color from the installed
171 * theme.
172 *
173 * @return The accelerator selected foreground color.
174 */
175 public static ColorUIResource getAcceleratorSelectedForeground()
176 {
177 if (theme != null)
178 return theme.getAcceleratorSelectedForeground();
179 return null;
180 }
181
182 /**
183 * Returns the color black from the installed theme.
184 *
185 * @return The color black.
186 */
187 public static ColorUIResource getBlack()
188 {
189 if (theme != null)
190 return theme.getBlack();
191 return null;
192 }
193
194 /**
195 * Returns the control color from the installed theme.
196 *
197 * @return The control color.
198 */
199 public static ColorUIResource getControl()
200 {
201 if (theme != null)
202 return theme.getControl();
203 return null;
204 }
205
206 /**
207 * Returns the color used for dark shadows on controls, from the installed
208 * theme.
209 *
210 * @return The color used for dark shadows on controls.
211 */
212 public static ColorUIResource getControlDarkShadow()
213 {
214 if (theme != null)
215 return theme.getControlDarkShadow();
216 return null;
217 }
218
219 /**
220 * Returns the color used for disabled controls, from the installed theme.
221 *
222 * @return The color used for disabled controls.
223 */
224 public static ColorUIResource getControlDisabled()
225 {
226 if (theme != null)
227 return theme.getControlDisabled();
228 return null;
229 }
230
231 /**
232 * Returns the color used to draw highlights for controls, from the installed
233 * theme.
234 *
235 * @return The color used to draw highlights for controls.
236 */
237 public static ColorUIResource getControlHighlight()
238 {
239 if (theme != null)
240 return theme.getControlHighlight();
241 return null;
242 }
243
244 /**
245 * Returns the color used to display control info, from the installed
246 * theme.
247 *
248 * @return The color used to display control info.
249 */
250 public static ColorUIResource getControlInfo()
251 {
252 if (theme != null)
253 return theme.getControlInfo();
254 return null;
255 }
256
257 /**
258 * Returns the color used to draw shadows for controls, from the installed
259 * theme.
260 *
261 * @return The color used to draw shadows for controls.
262 */
263 public static ColorUIResource getControlShadow()
264 {
265 if (theme != null)
266 return theme.getControlShadow();
267 return null;
268 }
269
270 /**
271 * Returns the color used for text on controls, from the installed theme.
272 *
273 * @return The color used for text on controls.
274 */
275 public static ColorUIResource getControlTextColor()
276 {
277 if (theme != null)
278 return theme.getControlTextColor();
279 return null;
280 }
281
282 /**
283 * Returns the font used for text on controls, from the installed theme.
284 *
285 * @return The font used for text on controls.
286 */
287 public static FontUIResource getControlTextFont()
288 {
289 if (theme != null)
290 return theme.getControlTextFont();
291 return null;
292 }
293
294 /**
295 * Returns the color used for the desktop background, from the installed
296 * theme.
297 *
298 * @return The color used for the desktop background.
299 */
300 public static ColorUIResource getDesktopColor()
301 {
302 if (theme != null)
303 return theme.getDesktopColor();
304 return null;
305 }
306
307 /**
308 * Returns the color used to draw focus highlights, from the installed
309 * theme.
310 *
311 * @return The color used to draw focus highlights.
312 */
313 public static ColorUIResource getFocusColor()
314 {
315 if (theme != null)
316 return theme.getFocusColor();
317 return null;
318 }
319
320 /**
321 * Returns the color used to draw highlighted text, from the installed
322 * theme.
323 *
324 * @return The color used to draw highlighted text.
325 */
326 public static ColorUIResource getHighlightedTextColor()
327 {
328 if (theme != null)
329 return theme.getHighlightedTextColor();
330 return null;
331 }
332
333 /**
334 * Returns the color used to draw text on inactive controls, from the
335 * installed theme.
336 *
337 * @return The color used to draw text on inactive controls.
338 */
339 public static ColorUIResource getInactiveControlTextColor()
340 {
341 if (theme != null)
342 return theme.getInactiveControlTextColor();
343 return null;
344 }
345
346 /**
347 * Returns the color used to draw inactive system text, from the installed
348 * theme.
349 *
350 * @return The color used to draw inactive system text.
351 */
352 public static ColorUIResource getInactiveSystemTextColor()
353 {
354 if (theme != null)
355 return theme.getInactiveSystemTextColor();
356 return null;
357 }
358
359 /**
360 * Returns the background color for menu items, from the installed theme.
361 *
362 * @return The background color for menu items.
363 *
364 * @see #getMenuSelectedBackground()
365 */
366 public static ColorUIResource getMenuBackground()
367 {
368 if (theme != null)
369 return theme.getMenuBackground();
370 return null;
371 }
372
373 /**
374 * Returns the foreground color for disabled menu items, from the installed
375 * theme.
376 *
377 * @return The foreground color for disabled menu items.
378 *
379 * @see #getMenuForeground()
380 */
381 public static ColorUIResource getMenuDisabledForeground()
382 {
383 if (theme != null)
384 return theme.getMenuDisabledForeground();
385 return null;
386 }
387
388 /**
389 * Returns the foreground color for menu items, from the installed theme.
390 *
391 * @return The foreground color for menu items.
392 *
393 * @see #getMenuDisabledForeground()
394 * @see #getMenuSelectedForeground()
395 */
396 public static ColorUIResource getMenuForeground()
397 {
398 if (theme != null)
399 return theme.getMenuForeground();
400 return null;
401 }
402
403 /**
404 * Returns the background color for selected menu items, from the installed
405 * theme.
406 *
407 * @return The background color for selected menu items.
408 *
409 * @see #getMenuBackground()
410 */
411 public static ColorUIResource getMenuSelectedBackground()
412 {
413 if (theme != null)
414 return theme.getMenuSelectedBackground();
415 return null;
416 }
417
418 /**
419 * Returns the foreground color for selected menu items, from the installed
420 * theme.
421 *
422 * @return The foreground color for selected menu items.
423 *
424 * @see #getMenuForeground()
425 */
426 public static ColorUIResource getMenuSelectedForeground()
427 {
428 if (theme != null)
429 return theme.getMenuSelectedForeground();
430 return null;
431 }
432
433 /**
434 * Returns the font used for text in menus, from the installed theme.
435 *
436 * @return The font used for text in menus.
437 */
438 public static FontUIResource getMenuTextFont()
439 {
440 if (theme != null)
441 return theme.getMenuTextFont();
442 return null;
443 }
444
445 /**
446 * Returns the primary color for controls, from the installed theme.
447 *
448 * @return The primary color for controls.
449 */
450 public static ColorUIResource getPrimaryControl()
451 {
452 if (theme != null)
453 return theme.getPrimaryControl();
454 return null;
455 }
456
457 /**
458 * Returns the primary color for the dark shadow on controls, from the
459 * installed theme.
460 *
461 * @return The primary color for the dark shadow on controls.
462 */
463 public static ColorUIResource getPrimaryControlDarkShadow()
464 {
465 if (theme != null)
466 return theme.getPrimaryControlDarkShadow();
467 return null;
468 }
469
470 /**
471 * Returns the primary color for the highlight on controls, from the
472 * installed theme.
473 *
474 * @return The primary color for the highlight on controls.
475 */
476 public static ColorUIResource getPrimaryControlHighlight()
477 {
478 if (theme != null)
479 return theme.getPrimaryControlHighlight();
480 return null;
481 }
482
483 /**
484 * Returns the primary color for the information on controls, from the
485 * installed theme.
486 *
487 * @return The primary color for the information on controls.
488 */
489 public static ColorUIResource getPrimaryControlInfo()
490 {
491 if (theme != null)
492 return theme.getPrimaryControlInfo();
493 return null;
494 }
495
496 /**
497 * Returns the primary color for the shadow on controls, from the installed
498 * theme.
499 *
500 * @return The primary color for the shadow on controls.
501 */
502 public static ColorUIResource getPrimaryControlShadow()
503 {
504 if (theme != null)
505 return theme.getPrimaryControlShadow();
506 return null;
507 }
508
509 /**
510 * Returns the background color for separators, from the installed theme.
511 *
512 * @return The background color for separators.
513 */
514 public static ColorUIResource getSeparatorBackground()
515 {
516 if (theme != null)
517 return theme.getSeparatorBackground();
518 return null;
519 }
520
521 /**
522 * Returns the foreground color for separators, from the installed theme.
523 *
524 * @return The foreground color for separators.
525 */
526 public static ColorUIResource getSeparatorForeground()
527 {
528 if (theme != null)
529 return theme.getSeparatorForeground();
530 return null;
531 }
532
533 /**
534 * Returns the font used for sub text, from the installed theme.
535 *
536 * @return The font used for sub text.
537 */
538 public static FontUIResource getSubTextFont()
539 {
540 if (theme != null)
541 return theme.getSubTextFont();
542 return null;
543 }
544
545 /**
546 * Returns the color used for system text, from the installed theme.
547 *
548 * @return The color used for system text.
549 */
550 public static ColorUIResource getSystemTextColor()
551 {
552 if (theme != null)
553 return theme.getSystemTextColor();
554 return null;
555 }
556
557 /**
558 * Returns the font used for system text, from the installed theme.
559 *
560 * @return The font used for system text.
561 */
562 public static FontUIResource getSystemTextFont()
563 {
564 if (theme != null)
565 return theme.getSystemTextFont();
566 return null;
567 }
568
569 /**
570 * Returns the color used to highlight text, from the installed theme.
571 *
572 * @return The color used to highlight text.
573 */
574 public static ColorUIResource getTextHighlightColor()
575 {
576 if (theme != null)
577 return theme.getTextHighlightColor();
578 return null;
579 }
580
581 /**
582 * Returns the color used to display user text, from the installed theme.
583 *
584 * @return The color used to display user text.
585 */
586 public static ColorUIResource getUserTextColor()
587 {
588 if (theme != null)
589 return theme.getUserTextColor();
590 return null;
591 }
592
593 /**
594 * Returns the font used for user text, obtained from the current theme.
595 *
596 * @return The font used for user text.
597 */
598 public static FontUIResource getUserTextFont()
599 {
600 if (theme != null)
601 return theme.getUserTextFont();
602 return null;
603 }
604
605 /**
606 * Returns the color used for white, from the installed theme.
607 *
608 * @return The color used for white.
609 */
610 public static ColorUIResource getWhite()
611 {
612 if (theme != null)
613 return theme.getWhite();
614 return null;
615 }
616
617 /**
618 * Returns the window background color, from the installed theme.
619 *
620 * @return The window background color.
621 */
622 public static ColorUIResource getWindowBackground()
623 {
624 if (theme != null)
625 return theme.getWindowBackground();
626 return null;
627 }
628
629 /**
630 * Returns the window title background color, from the installed theme.
631 *
632 * @return The window title background color.
633 */
634 public static ColorUIResource getWindowTitleBackground()
635 {
636 if (theme != null)
637 return theme.getWindowTitleBackground();
638 return null;
639 }
640
641 /**
642 * Returns the window title font from the current theme.
643 *
644 * @return The window title font.
645 *
646 * @see MetalTheme
647 */
648 public static FontUIResource getWindowTitleFont()
649 {
650 if (theme != null)
651 return theme.getWindowTitleFont();
652 return null;
653 }
654
655 /**
656 * Returns the window title foreground color, from the installed theme.
657 *
658 * @return The window title foreground color.
659 */
660 public static ColorUIResource getWindowTitleForeground()
661 {
662 if (theme != null)
663 return theme.getWindowTitleForeground();
664 return null;
665 }
666
667 /**
668 * Returns the background color for an inactive window title, from the
669 * installed theme.
670 *
671 * @return The background color for an inactive window title.
672 */
673 public static ColorUIResource getWindowTitleInactiveBackground()
674 {
675 if (theme != null)
676 return theme.getWindowTitleInactiveBackground();
677 return null;
678 }
679
680 /**
681 * Returns the foreground color for an inactive window title, from the
682 * installed theme.
683 *
684 * @return The foreground color for an inactive window title.
685 */
686 public static ColorUIResource getWindowTitleInactiveForeground()
687 {
688 if (theme != null)
689 return theme.getWindowTitleInactiveForeground();
690 return null;
691 }
692
693 /**
694 * Sets the current theme for the look and feel. Note that the theme must be
695 * set <em>before</em> the look and feel is installed. To change the theme
696 * for an already running application that is using the
697 * {@link MetalLookAndFeel}, first set the theme with this method, then
698 * create a new instance of {@link MetalLookAndFeel} and install it in the
699 * usual way (see {@link UIManager#setLookAndFeel(LookAndFeel)}).
700 *
701 * @param theme the theme (<code>null</code> not permitted).
702 *
703 * @throws NullPointerException if <code>theme</code> is <code>null</code>.
704 *
705 * @see #getCurrentTheme()
706 */
707 public static void setCurrentTheme(MetalTheme theme)
708 {
709 if (theme == null)
710 throw new NullPointerException("Null 'theme' not permitted.");
711 MetalLookAndFeel.theme = theme;
712 }
713
714 /**
715 * Sets the ComponentUI classes for all Swing components to the Metal
716 * implementations.
717 *
718 * In particular this sets the following keys:
719 *
720 * <table>
721 * <tr>
722 * <th>Key</th><th>Value</th>
723 * </tr><tr>
724 * <td>ButtonUI</td><td>{@link MetalButtonUI}</td>
725 * </tr><tr>
726 * <td>CheckBoxUI</td><td>{@link MetalCheckBoxUI}</td>
727 * </tr><tr>
728 * <td>ComboBoxUI</td><td>{@link MetalComboBoxUI}</td>
729 * </tr><tr>
730 * <td>DesktopIconUI</td><td>{@link MetalDesktopIconUI}</td>
731 * </tr><tr>
732 * <td>InternalFrameUI</td><td>{@link MetalInternalFrameUI}</td>
733 * </tr><tr>
734 * <td>LabelUI</td><td>{@link MetalLabelUI}</td>
735 * </tr><tr>
736 * <td>PopupMenuSeparatorUI</td><td>{@link MetalPopupMenuSeparatorUI}</td>
737 * </tr><tr>
738 * <td>ProgressBarUI</td><td>{@link MetalProgressBarUI}</td>
739 * </tr><tr>
740 * <td>RadioButtonUI</td><td>{@link MetalRadioButtonUI}</td>
741 * </tr><tr>
742 * <td>RootPaneUI</td><td>{@link MetalRootPaneUI}</td>
743 * </tr><tr>
744 * <td>ScrollBarUI</td><td>{@link MetalScrollBarUI}</td>
745 * </tr><tr>
746 * <td>ScrollPaneUI</td><td>{@link MetalScrollPaneUI}</td>
747 * </tr><tr>
748 * <td>SeparatorUI</td><td>{@link MetalSeparatorUI}</td>
749 * </tr><tr>
750 * <td>SliderUI</td><td>{@link MetalSliderUI}</td>
751 * </tr><tr>
752 * <td>SplitPaneUI</td><td>{@link MetalSplitPaneUI}</td>
753 * </tr><tr>
754 * <td>TabbedPaneUI</td><td>{@link MetalTabbedPaneUI}</td>
755 * </tr><tr>
756 * <td>TextFieldUI</td><td>{@link MetalTextFieldUI}</td>
757 * </tr><tr>
758 * <td>ToggleButtonUI</td><td>{@link MetalToggleButtonUI}</td>
759 * </tr><tr>
760 * <td>ToolBarUI</td><td>{@link MetalToolBarUI}</td>
761 * </tr><tr>
762 * <td>ToolTipUI</td><td>{@link MetalToolTipUI}</td>
763 * </tr><tr>
764 * <td>TreeUI</td><td>{@link MetalTreeUI}</td>
765 * </tr><tr>
766 * </table>
767 *
768 * @param defaults the UIDefaults where the class defaults are added
769 */
770 protected void initClassDefaults(UIDefaults defaults)
771 {
772 super.initClassDefaults(defaults);
773
774 // Variables
775 Object[] uiDefaults;
776 // Initialize Class Defaults
777 uiDefaults = new Object[] {
778 "ButtonUI", "javax.swing.plaf.metal.MetalButtonUI",
779 "CheckBoxUI", "javax.swing.plaf.metal.MetalCheckBoxUI",
780 "ComboBoxUI", "javax.swing.plaf.metal.MetalComboBoxUI",
781 "DesktopIconUI", "javax.swing.plaf.metal.MetalDesktopIconUI",
782 "FileChooserUI", "javax.swing.plaf.metal.MetalFileChooserUI",
783 "InternalFrameUI", "javax.swing.plaf.metal.MetalInternalFrameUI",
784 "LabelUI", "javax.swing.plaf.metal.MetalLabelUI",
785 "MenuBarUI", "javax.swing.plaf.metal.MetalMenuBarUI",
786 "PopupMenuSeparatorUI",
787 "javax.swing.plaf.metal.MetalPopupMenuSeparatorUI",
788 "ProgressBarUI", "javax.swing.plaf.metal.MetalProgressBarUI",
789 "RadioButtonUI", "javax.swing.plaf.metal.MetalRadioButtonUI",
790 "RootPaneUI", "javax.swing.plaf.metal.MetalRootPaneUI",
791 "ScrollBarUI", "javax.swing.plaf.metal.MetalScrollBarUI",
792 "ScrollPaneUI", "javax.swing.plaf.metal.MetalScrollPaneUI",
793 "SeparatorUI", "javax.swing.plaf.metal.MetalSeparatorUI",
794 "SliderUI", "javax.swing.plaf.metal.MetalSliderUI",
795 "SplitPaneUI", "javax.swing.plaf.metal.MetalSplitPaneUI",
796 "TabbedPaneUI", "javax.swing.plaf.metal.MetalTabbedPaneUI",
797 "TextFieldUI", "javax.swing.plaf.metal.MetalTextFieldUI",
798 "ToggleButtonUI", "javax.swing.plaf.metal.MetalToggleButtonUI",
799 "ToolBarUI", "javax.swing.plaf.metal.MetalToolBarUI",
800 "ToolTipUI", "javax.swing.plaf.metal.MetalToolTipUI",
801 "TreeUI", "javax.swing.plaf.metal.MetalTreeUI",
802 };
803 // Add Class Defaults to UI Defaults table
804 defaults.putDefaults(uiDefaults);
805 }
806
807 /**
808 * Initializes the component defaults for the Metal Look & Feel.
809 *
810 * In particular this sets the following keys (the colors are given
811 * as RGB hex values):
812 *
813 * <table>
814 * <tr>
815 * <th>Key</th><th>Value</th>
816 * </tr><tr>
817 * <td>Button.background</td><td>0xcccccc</td>
818 * </tr><tr>
819 * <td>Button.border</td><td>{@link MetalBorders#getButtonBorder()}</td>
820 * </tr><tr>
821 * <td>Button.font</td><td>{@link #getControlTextFont}</td>
822 * </tr><tr>
823 * <td>Button.margin</td><td><code>new java.awt.Insets(2, 14, 2, 14)</code>
824 * </td>
825 * </tr><tr>
826 * <td>CheckBox.background</td><td>0xcccccc</td>
827 * </tr><tr>
828 * <td>CheckBoxMenuItem.background</td><td>0xcccccc</td>
829 * </tr><tr>
830 * <td>ToolBar.background</td><td>0xcccccc</td>
831 * </tr><tr>
832 * <td>Panel.background</td><td>0xcccccc</td>
833 * </tr><tr>
834 * <td>Slider.background</td><td>0xcccccc</td>
835 * </tr><tr>
836 * <td>OptionPane.background</td><td>0xcccccc</td>
837 * </tr><tr>
838 * <td>ProgressBar.background</td><td>0xcccccc</td>
839 * </tr><tr>
840 * <td>TabbedPane.background</td><td>0xcccccc</td>
841 * </tr><tr>
842 * <td>Label.background</td><td>0xcccccc</td>
843 * </tr><tr>
844 * <td>Label.font</td><td>{@link #getControlTextFont}</td>
845 * </tr><tr>
846 * <td>Menu.background</td><td>0xcccccc</td>
847 * </tr><tr>
848 * <td>MenuBar.background</td><td>0xcccccc</td>
849 * </tr><tr>
850 * <td>MenuItem.background</td><td>0xcccccc</td>
851 * </tr><tr>
852 * <td>ScrollBar.background</td><td>0xcccccc</td>
853 * </tr><tr>
854 * <td>PopupMenu.border</td>
855 * <td><code>new javax.swing.plaf.metal.MetalBorders.PopupMenuBorder()</td>
856 * </tr><tr>
857 * </table>
858 *
859 * @param defaults the UIDefaults instance to which the values are added
860 */
861 protected void initComponentDefaults(UIDefaults defaults)
862 {
863 super.initComponentDefaults(defaults);
864 Object[] myDefaults = new Object[] {
865 "Button.background", getControl(),
866 "Button.border", MetalBorders.getButtonBorder(),
867 "Button.darkShadow", getControlDarkShadow(),
868 "Button.disabledText", getInactiveControlTextColor(),
869 "Button.focus", getFocusColor(),
870 "Button.font", getControlTextFont(),
871 "Button.foreground", getControlTextColor(),
872 "Button.highlight", getControlHighlight(),
873 "Button.light", getControlHighlight(),
874 "Button.margin", new InsetsUIResource(2, 14, 2, 14),
875 "Button.select", getControlShadow(),
876 "Button.shadow", getControlShadow(),
877
878 "CheckBox.background", getControl(),
879 "CheckBox.border", MetalBorders.getButtonBorder(),
880 "CheckBox.disabledText", getInactiveControlTextColor(),
881 "CheckBox.focus", getFocusColor(),
882 "CheckBox.font", getControlTextFont(),
883 "CheckBox.foreground", getControlTextColor(),
884 "CheckBox.icon",
885 new UIDefaults.ProxyLazyValue("javax.swing.plaf.metal.MetalCheckBoxIcon"),
886 "CheckBox.checkIcon",
887 new UIDefaults.ProxyLazyValue("javax.swing.plaf.metal.MetalCheckBoxIcon"),
888 "Checkbox.select", getControlShadow(),
889
890 "CheckBoxMenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 10),
891 "CheckBoxMenuItem.acceleratorForeground", getAcceleratorForeground(),
892 "CheckBoxMenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(),
893 "CheckBoxMenuItem.background", getMenuBackground(),
894 "CheckBoxMenuItem.borderPainted", Boolean.TRUE,
895 "CheckBoxMenuItem.commandSound", "sounds/MenuItemCommand.wav",
896 "CheckBoxMenuItem.checkIcon", MetalIconFactory.getCheckBoxMenuItemIcon(),
897 "CheckBoxMenuItem.disabledForeground", getMenuDisabledForeground(),
898 "CheckBoxMenuItem.font", getMenuTextFont(),
899 "CheckBoxMenuItem.foreground", getMenuForeground(),
900 "CheckBoxMenuItem.selectionBackground", getMenuSelectedBackground(),
901 "CheckBoxMenuItem.selectionForeground", getMenuSelectedForeground(),
902
903 "ColorChooser.background", getControl(),
904 "ColorChooser.foreground", getControlTextColor(),
905 "ColorChooser.rgbBlueMnemonic", new Integer(0),
906 "ColorChooser.rgbGreenMnemonic", new Integer(0),
907 "ColorChooser.rgbRedMnemonic", new Integer(0),
908 "ColorChooser.swatchesDefaultRecentColor", getControl(),
909
910 "ComboBox.background", getControl(),
911 "ComboBox.buttonBackground", getControl(),
912 "ComboBox.buttonDarkShadow", getControlDarkShadow(),
913 "ComboBox.buttonHighlight", getControlHighlight(),
914 "ComboBox.buttonShadow", getControlShadow(),
915 "ComboBox.disabledBackground", getControl(),
916 "ComboBox.disabledForeground", getInactiveSystemTextColor(),
917 "ComboBox.font", getControlTextFont(),
918 "ComboBox.foreground", getControlTextColor(),
919 "ComboBox.selectionBackground", getPrimaryControlShadow(),
920 "ComboBox.selectionForeground", getControlTextColor(),
921
922 "Desktop.background", getDesktopColor(),
923
924 "DesktopIcon.background", getControl(),
925 "DesktopIcon.foreground", getControlTextColor(),
926 "DesktopIcon.width", new Integer(160),
927 "DesktopIcon.border", MetalBorders.getDesktopIconBorder(),
928 "DesktopIcon.font", getControlTextFont(),
929
930 "EditorPane.background", getWindowBackground(),
931 "EditorPane.caretForeground", getUserTextColor(),
932 "EditorPane.font", getControlTextFont(),
933 "EditorPane.foreground", getUserTextColor(),
934 "EditorPane.inactiveForeground", getInactiveSystemTextColor(),
935 "EditorPane.selectionBackground", getTextHighlightColor(),
936 "EditorPane.selectionForeground", getHighlightedTextColor(),
937
938 "FormattedTextField.background", getWindowBackground(),
939 "FormattedTextField.border",
940 new BorderUIResource(MetalBorders.getTextFieldBorder()),
941 "FormattedTextField.caretForeground", getUserTextColor(),
942 "FormattedTextField.font", new FontUIResource("Dialog", Font.PLAIN, 12),
943 "FormattedTextField.foreground", getUserTextColor(),
944 "FormattedTextField.inactiveBackground", getControl(),
945 "FormattedTextField.inactiveForeground", getInactiveSystemTextColor(),
946 "FormattedTextField.selectionBackground", getTextHighlightColor(),
947 "FormattedTextField.selectionForeground", getHighlightedTextColor(),
948
949 "FileChooser.upFolderIcon",
950 MetalIconFactory.getFileChooserUpFolderIcon(),
951 "FileChooser.listViewIcon",
952 MetalIconFactory.getFileChooserListViewIcon(),
953 "FileChooser.newFolderIcon",
954 MetalIconFactory.getFileChooserNewFolderIcon(),
955 "FileChooser.homeFolderIcon",
956 MetalIconFactory.getFileChooserHomeFolderIcon(),
957 "FileChooser.detailsViewIcon",
958 MetalIconFactory.getFileChooserDetailViewIcon(),
959 "FileChooser.fileNameLabelMnemonic", new Integer(78),
960 "FileChooser.filesOfTypeLabelMnemonic", new Integer(84),
961 "FileChooser.lookInLabelMnemonic", new Integer(73),
962 "FileView.computerIcon", MetalIconFactory.getTreeComputerIcon(),
963 "FileView.directoryIcon", MetalIconFactory.getTreeFolderIcon(),
964 "FileView.fileIcon", MetalIconFactory.getTreeLeafIcon(),
965 "FileView.floppyDriveIcon", MetalIconFactory.getTreeFloppyDriveIcon(),
966 "FileView.hardDriveIcon", MetalIconFactory.getTreeHardDriveIcon(),
967
968 "InternalFrame.activeTitleBackground", getWindowTitleBackground(),
969 "InternalFrame.activeTitleForeground", getWindowTitleForeground(),
970 "InternalFrame.border", new MetalBorders.InternalFrameBorder(),
971 "InternalFrame.borderColor", getControl(),
972 "InternalFrame.borderDarkShadow", getControlDarkShadow(),
973 "InternalFrame.borderHighlight", getControlHighlight(),
974 "InternalFrame.borderLight", getControlHighlight(),
975 "InternalFrame.borderShadow", getControlShadow(),
976 "InternalFrame.icon", MetalIconFactory.getInternalFrameDefaultMenuIcon(),
977 "InternalFrame.closeIcon",
978 MetalIconFactory.getInternalFrameCloseIcon(16),
979 "InternalFrame.closeSound", "sounds/FrameClose.wav",
980 "InternalFrame.inactiveTitleBackground", getWindowTitleInactiveBackground(),
981 "InternalFrame.inactiveTitleForeground", getWindowTitleInactiveForeground(),
982 "InternalFrame.maximizeIcon",
983 MetalIconFactory.getInternalFrameMaximizeIcon(16),
984 "InternalFrame.maximizeSound", "sounds/FrameMaximize.wav",
985 "InternalFrame.iconifyIcon",
986 MetalIconFactory.getInternalFrameMinimizeIcon(16),
987 "InternalFrame.minimizeSound", "sounds/FrameMinimize.wav",
988 "InternalFrame.paletteBorder", new MetalBorders.PaletteBorder(),
989 "InternalFrame.paletteCloseIcon", new MetalIconFactory.PaletteCloseIcon(),
990 "InternalFrame.paletteTitleHeight", new Integer(11),
991 "InternalFrame.restoreDownSound", "sounds/FrameRestoreDown.wav",
992 "InternalFrame.restoreUpSound", "sounds/FrameRestoreUp.wav",
993
994 "Label.background", getControl(),
995 "Label.disabledForeground", getInactiveSystemTextColor(),
996 "Label.disabledShadow", getControlShadow(),
997 "Label.font", getControlTextFont(),
998 "Label.foreground", getSystemTextColor(),
999
1000 "List.font", getControlTextFont(),
1001 "List.background", getWindowBackground(),
1002 "List.foreground", getUserTextColor(),
1003 "List.selectionBackground", getTextHighlightColor(),
1004 "List.selectionForeground", getHighlightedTextColor(),
1005 "List.focusCellHighlightBorder",
1006 new LineBorderUIResource(MetalLookAndFeel.getFocusColor()),
1007
1008 "Menu.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 10),
1009 "Menu.acceleratorForeground", getAcceleratorForeground(),
1010 "Menu.acceleratorSelectionForeground", getAcceleratorSelectedForeground(),
1011 "Menu.arrowIcon", MetalIconFactory.getMenuArrowIcon(),
1012 "Menu.background", getMenuBackground(),
1013 "Menu.border", new MetalBorders.MenuItemBorder(),
1014 "Menu.borderPainted", Boolean.TRUE,
1015 "MenuItem.commandSound", "sounds/MenuItemCommand.wav",
1016 "Menu.disabledForeground", getMenuDisabledForeground(),
1017 "Menu.font", getMenuTextFont(),
1018 "Menu.foreground", getMenuForeground(),
1019 "Menu.selectionBackground", getMenuSelectedBackground(),
1020 "Menu.selectionForeground", getMenuSelectedForeground(),
1021 "Menu.submenuPopupOffsetX", new Integer(-4),
1022 "Menu.submenuPopupOffsetY", new Integer(-3),
1023
1024 "MenuBar.background", getMenuBackground(),
1025 "MenuBar.border", new MetalBorders.MenuBarBorder(),
1026 "MenuBar.font", getMenuTextFont(),
1027 "MenuBar.foreground", getMenuForeground(),
1028 "MenuBar.highlight", getControlHighlight(),
1029 "MenuBar.shadow", getControlShadow(),
1030
1031 "MenuItem.acceleratorDelimiter", "-",
1032 "MenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 10),
1033 "MenuItem.acceleratorForeground", getAcceleratorForeground(),
1034 "MenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(),
1035 "MenuItem.arrowIcon", MetalIconFactory.getMenuItemArrowIcon(),
1036 "MenuItem.background", getMenuBackground(),
1037 "MenuItem.border", new MetalBorders.MenuItemBorder(),
1038 "MenuItem.borderPainted", Boolean.TRUE,
1039 "MenuItem.disabledForeground", getMenuDisabledForeground(),
1040 "MenuItem.font", getMenuTextFont(),
1041 "MenuItem.foreground", getMenuForeground(),
1042 "MenuItem.selectionBackground", getMenuSelectedBackground(),
1043 "MenuItem.selectionForeground", getMenuSelectedForeground(),
1044
1045 "OptionPane.background", getControl(),
1046 "OptionPane.errorSound", "sounds/OptionPaneError.wav",
1047 "OptionPane.informationSound", "sounds/OptionPaneInformation.wav",
1048 "OptionPane.questionSound", "sounds/OptionPaneQuestion.wav",
1049 "OptionPane.warningSound", "sounds/OptionPaneWarning.wav",
1050 "OptionPane.errorDialog.border.background", new ColorUIResource(153, 51, 51),
1051 "OptionPane.errorDialog.titlePane.background", new ColorUIResource(255, 153, 153),
1052 "OptionPane.errorDialog.titlePane.foreground", new ColorUIResource(51, 0, 0),
1053 "OptionPane.errorDialog.titlePane.shadow", new ColorUIResource(204, 102, 102),
1054 "OptionPane.foreground", getControlTextColor(),
1055 "OptionPane.messageForeground", getControlTextColor(),
1056 "OptionPane.questionDialog.border.background", new ColorUIResource(51, 102, 51),
1057 "OptionPane.questionDialog.titlePane.background", new ColorUIResource(153, 204, 153),
1058 "OptionPane.questionDialog.titlePane.foreground", new ColorUIResource(0, 51, 0),
1059 "OptionPane.questionDialog.titlePane.shadow", new ColorUIResource(102, 153, 102),
1060 "OptionPane.warningDialog.border.background", new ColorUIResource(153, 102, 51),
1061 "OptionPane.warningDialog.titlePane.background", new ColorUIResource(255, 204, 153),
1062 "OptionPane.warningDialog.titlePane.foreground", new ColorUIResource(102, 51, 0),
1063 "OptionPane.warningDialog.titlePane.shadow", new ColorUIResource(204, 153, 102),
1064
1065 "Panel.background", getControl(),
1066 "Panel.foreground", getUserTextColor(),
1067
1068 "PasswordField.background", getWindowBackground(),
1069 "PasswordField.border",
1070 new BorderUIResource(MetalBorders.getTextFieldBorder()),
1071 "PasswordField.caretForeground", getUserTextColor(),
1072 "PasswordField.foreground", getUserTextColor(),
1073 "PasswordField.font", new FontUIResource("Dialog", Font.PLAIN, 12),
1074 "PasswordField.inactiveBackground", getControl(),
1075 "PasswordField.inactiveForeground", getInactiveSystemTextColor(),
1076 "PasswordField.selectionBackground", getTextHighlightColor(),
1077 "PasswordField.selectionForeground", getHighlightedTextColor(),
1078
1079 "PopupMenu.background", getMenuBackground(),
1080 "PopupMenu.border", new MetalBorders.PopupMenuBorder(),
1081 "PopupMenu.font", getMenuTextFont(),
1082 "PopupMenu.foreground", getMenuForeground(),
1083 "PopupMenu.popupSound", "sounds/PopupMenuPopup.wav",
1084
1085 "ProgressBar.background", getControl(),
1086 "ProgressBar.border", new BorderUIResource.LineBorderUIResource(getControlDarkShadow(), 1),
1087 "ProgressBar.font", getControlTextFont(),
1088 "ProgressBar.foreground", getPrimaryControlShadow(),
1089 "ProgressBar.selectionBackground", getPrimaryControlDarkShadow(),
1090 "ProgressBar.selectionForeground", getControl(),
1091
1092 "RadioButton.background", getControl(),
1093 "RadioButton.darkShadow", getControlDarkShadow(),
1094 "RadioButton.disabledText", getInactiveControlTextColor(),
1095 "RadioButton.icon",
1096 new UIDefaults.LazyValue()
1097 {
1098 public Object createValue(UIDefaults def)
1099 {
1100 return MetalIconFactory.getRadioButtonIcon();
1101 }
1102 },
1103 "RadioButton.focus", MetalLookAndFeel.getFocusColor(),
1104 "RadioButton.font", MetalLookAndFeel.getControlTextFont(),
1105 "RadioButton.foreground", getControlTextColor(),
1106 "RadioButton.highlight", getControlHighlight(),
1107 "RadioButton.light", getControlHighlight(),
1108 "RadioButton.select", getControlShadow(),
1109 "RadioButton.shadow", getControlShadow(),
1110
1111 "RadioButtonMenuItem.acceleratorFont", new Font("Dialog", Font.PLAIN, 10),
1112 "RadioButtonMenuItem.acceleratorForeground", getAcceleratorForeground(),
1113 "RadioButtonMenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(),
1114 "RadioButtonMenuItem.background", getMenuBackground(),
1115 "RadioButtonMenuItem.border", new MetalBorders.MenuItemBorder(),
1116 "RadioButtonMenuItem.borderPainted", Boolean.TRUE,
1117 "RadioButtonMenuItem.checkIcon",
1118 MetalIconFactory.getRadioButtonMenuItemIcon(),
1119 "RadioButtonMenuItem.commandSound", "sounds/MenuItemCommand.wav",
1120 "RadioButtonMenuItem.disabledForeground", getMenuDisabledForeground(),
1121 "RadioButtonMenuItem.font", getMenuTextFont(),
1122 "RadioButtonMenuItem.foreground", getMenuForeground(),
1123 "RadioButtonMenuItem.margin", new InsetsUIResource(2, 2, 2, 2),
1124 "RadioButtonMenuItem.selectionBackground",
1125 MetalLookAndFeel.getMenuSelectedBackground(),
1126 "RadioButtonMenuItem.selectionForeground",
1127 MetalLookAndFeel.getMenuSelectedForeground(),
1128
1129 "ScrollBar.allowsAbsolutePositioning", Boolean.TRUE,
1130 "ScrollBar.background", getControl(),
1131 "ScrollBar.darkShadow", getControlDarkShadow(),
1132 "ScrollBar.foreground", getControl(),
1133 "ScrollBar.highlight", getControlHighlight(),
1134 "ScrollBar.shadow", getControlShadow(),
1135 "ScrollBar.thumb", getPrimaryControlShadow(),
1136 "ScrollBar.thumbDarkShadow", getControlDarkShadow(),
1137 "ScrollBar.thumbHighlight", getPrimaryControl(),
1138 "ScrollBar.thumbShadow", getPrimaryControlDarkShadow(),
1139 "ScrollBar.track", getControl(),
1140 "ScrollBar.trackHighlight", getControlDarkShadow(),
1141 "ScrollBar.width", new Integer(17),
1142
1143 "ScrollPane.background", getControl(),
1144 "ScrollPane.border", new MetalBorders.ScrollPaneBorder(),
1145 "ScrollPane.foreground", getControlTextColor(),
1146
1147 "Separator.background", getSeparatorBackground(),
1148 "Separator.foreground", getSeparatorForeground(),
1149 "Separator.highlight", getControlHighlight(),
1150 "Separator.shadow", getControlShadow(),
1151
1152 "Slider.background", getControl(),
1153 "Slider.focus", getFocusColor(),
1154 "Slider.focusInsets", new InsetsUIResource(0, 0, 0, 0),
1155 "Slider.foreground", getPrimaryControlShadow(),
1156 "Slider.highlight", getControlHighlight(),
1157 "Slider.horizontalThumbIcon",
1158 MetalIconFactory.getHorizontalSliderThumbIcon(),
1159 "Slider.majorTickLength", new Integer(6),
1160 "Slider.shadow", getControlShadow(),
1161 "Slider.trackWidth", new Integer(7),
1162 "Slider.verticalThumbIcon",
1163 MetalIconFactory.getVerticalSliderThumbIcon(),
1164
1165 "Spinner.arrowButtonInsets", new InsetsUIResource(0, 0, 0, 0),
1166 "Spinner.background", getControl(),
1167 "Spinner.border", MetalBorders.getTextFieldBorder(),
1168 "Spinner.font", getControlTextFont(),
1169 "Spinner.foreground", getControl(),
1170
1171 "SplitPane.background", getControl(),
1172 "SplitPane.darkShadow", getControlDarkShadow(),
1173 "SplitPane.dividerFocusColor", getPrimaryControl(),
1174 "SplitPane.dividerSize", new Integer(10),
1175 "SplitPane.highlight", getControlHighlight(),
1176 "SplitPane.shadow", getControlShadow(),
1177
1178 "SplitPaneDivider.draggingColor", Color.DARK_GRAY,
1179
1180 "TabbedPane.background", getControlShadow(),
1181 "TabbedPane.contentBorderInsets", new InsetsUIResource(2, 2, 3, 3),
1182 "TabbedPane.contentOpaque", Boolean.TRUE,
1183 "TabbedPane.darkShadow", getControlDarkShadow(),
1184 "TabbedPane.focus", getPrimaryControlDarkShadow(),
1185 "TabbedPane.font", getControlTextFont(),
1186 "TabbedPane.foreground", getControlTextColor(),
1187 "TabbedPane.highlight", getControlHighlight(),
1188 "TabbedPane.light", getControl(),
1189 "TabbedPane.selected", getControl(), // overridden in OceanTheme
1190 "TabbedPane.selectHighlight", getControlHighlight(),
1191 "TabbedPane.selectedTabPadInsets", new InsetsUIResource(2, 2, 2, 1),
1192 "TabbedPane.shadow", getControlShadow(),
1193 "TabbedPane.tabAreaBackground", getControl(), // overridden in OceanTheme
1194 "TabbedPane.tabAreaInsets", new InsetsUIResource(4, 2, 0, 6), // dito
1195 "TabbedPane.tabInsets", new InsetsUIResource(0, 9, 1, 9),
1196
1197 // new properties in OceanTheme:
1198 // TabbedPane.contentAreaColor
1199 // TabbedPane.unselectedBackground
1200
1201 "Table.background", getWindowBackground(),
1202 "Table.focusCellBackground", getWindowBackground(),
1203 "Table.focusCellForeground", getControlTextColor(),
1204 "Table.foreground", getControlTextColor(),
1205 "Table.focusCellHighlightBorder",
1206 new BorderUIResource.LineBorderUIResource(getFocusColor()),
1207 "Table.focusCellBackground", getWindowBackground(),
1208 "Table.gridColor", getControlDarkShadow(),
1209 "Table.selectionBackground", new ColorUIResource(204, 204, 255),
1210 "Table.selectionForeground", new ColorUIResource(0, 0, 0),
1211
1212 "TableHeader.background", getControl(),
1213 "TableHeader.cellBorder", new MetalBorders.TableHeaderBorder(),
1214 "TableHeader.foreground", getControlTextColor(),
1215
1216 "TextArea.background", getWindowBackground(),
1217 "TextArea.caretForeground", getUserTextColor(),
1218 "TextArea.font", new FontUIResource("Dialog", Font.PLAIN, 12),
1219 "TextArea.foreground", getUserTextColor(),
1220 "TextArea.inactiveForeground", getInactiveSystemTextColor(),
1221 "TextArea.selectionBackground", getTextHighlightColor(),
1222 "TextArea.selectionForeground", getHighlightedTextColor(),
1223
1224 "TextField.background", getWindowBackground(),
1225 "TextField.border",
1226 new BorderUIResource(MetalBorders.getTextFieldBorder()),
1227 "TextField.caretForeground", getUserTextColor(),
1228 "TextField.darkShadow", getControlDarkShadow(),
1229 "TextField.font", new FontUIResource("Dialog", Font.PLAIN, 12),
1230 "TextField.foreground", getUserTextColor(),
1231 "TextField.highlight", getControlHighlight(),
1232 "TextField.inactiveBackground", getControl(),
1233 "TextField.inactiveForeground", getInactiveSystemTextColor(),
1234 "TextField.light", getControlHighlight(),
1235 "TextField.selectionBackground", getTextHighlightColor(),
1236 "TextField.selectionForeground", getHighlightedTextColor(),
1237 "TextField.shadow", getControlShadow(),
1238
1239 "TextPane.background", getWindowBackground(),
1240 "TextPane.caretForeground", getUserTextColor(),
1241 "TextPane.font", new FontUIResource("Dialog", Font.PLAIN, 12),
1242 "TextPane.foreground", getUserTextColor(),
1243 "TextPane.inactiveForeground", getInactiveSystemTextColor(),
1244 "TextPane.selectionBackground", getTextHighlightColor(),
1245 "TextPane.selectionForeground", getHighlightedTextColor(),
1246
1247 "TitledBorder.border", new LineBorderUIResource(getPrimaryControl(), 1),
1248 "TitledBorder.font", getControlTextFont(),
1249 "TitledBorder.titleColor", getSystemTextColor(),
1250
1251 "ToggleButton.background", getControl(),
1252 "ToggleButton.border", MetalBorders.getToggleButtonBorder(),
1253 "ToggleButton.darkShadow", getControlDarkShadow(),
1254 "ToggleButton.disabledText", getInactiveControlTextColor(),
1255 "ToggleButton.focus", getFocusColor(),
1256 "ToggleButton.font", getControlTextFont(),
1257 "ToggleButton.foreground", getControlTextColor(),
1258 "ToggleButton.highlight", getControlHighlight(),
1259 "ToggleButton.light", getControlHighlight(),
1260 "ToggleButton.margin", new InsetsUIResource(2, 14, 2, 14),
1261 "ToggleButton.select", getControlShadow(),
1262 "ToggleButton.shadow", getControlShadow(),
1263
1264 "ToolBar.background", getMenuBackground(),
1265 "ToolBar.darkShadow", getControlDarkShadow(),
1266 "ToolBar.dockingBackground", getMenuBackground(),
1267 "ToolBar.dockingForeground", getPrimaryControlDarkShadow(),
1268 "ToolBar.floatingBackground", getMenuBackground(),
1269 "ToolBar.floatingForeground", getPrimaryControl(),
1270 "ToolBar.font", getMenuTextFont(),
1271 "ToolBar.foreground", getMenuForeground(),
1272 "ToolBar.highlight", getControlHighlight(),
1273 "ToolBar.light", getControlHighlight(),
1274 "ToolBar.shadow", getControlShadow(),
1275 "ToolBar.border", new MetalBorders.ToolBarBorder(),
1276 "ToolBar.rolloverBorder", MetalBorders.getToolbarButtonBorder(),
1277 "ToolBar.nonrolloverBorder", MetalBorders.getToolbarButtonBorder(),
1278
1279 "ToolTip.background", getPrimaryControl(),
1280 "ToolTip.backgroundInactive", getControl(),
1281 "ToolTip.border", new BorderUIResource.LineBorderUIResource(getPrimaryControlDarkShadow(), 1),
1282 "ToolTip.borderInactive", new BorderUIResource.LineBorderUIResource(getControlDarkShadow(), 1),
1283 "ToolTip.font", new FontUIResource("Dialog", Font.PLAIN, 12),
1284 "ToolTip.foreground", getPrimaryControlInfo(),
1285 "ToolTip.foregroundInactive", getControlDarkShadow(),
1286 "ToolTip.hideAccelerator", Boolean.FALSE,
1287
1288 "Tree.background", getWindowBackground(),
1289 "Tree.closedIcon", MetalIconFactory.getTreeFolderIcon(),
1290 "Tree.collapsedIcon", MetalIconFactory.getTreeControlIcon(true),
1291 "Tree.expandedIcon", MetalIconFactory.getTreeControlIcon(false),
1292 "Tree.font", new FontUIResource("Dialog", Font.PLAIN, 12),
1293 "Tree.foreground", getUserTextColor(),
1294 "Tree.hash", getPrimaryControl(),
1295 "Tree.leafIcon", MetalIconFactory.getTreeLeafIcon(),
1296 "Tree.leftChildIndent", new Integer(7),
1297 "Tree.line", getPrimaryControl(),
1298 "Tree.openIcon", MetalIconFactory.getTreeFolderIcon(),
1299 "Tree.rightChildIndent", new Integer(13),
1300 "Tree.rowHeight", new Integer(0),
1301 "Tree.scrollsOnExpand", Boolean.TRUE,
1302 "Tree.selectionBackground", getTextHighlightColor(),
1303 "Tree.selectionBorder", new BorderUIResource.LineBorderUIResource(new Color(102, 102, 153)),
1304 "Tree.selectionBorderColor", getFocusColor(),
1305 "Tree.selectionForeground", getHighlightedTextColor(),
1306 "Tree.textBackground", getWindowBackground(),
1307 "Tree.textForeground", getUserTextColor(),
1308
1309 "Viewport.background", getControl(),
1310 "Viewport.foreground", getUserTextColor()
1311 };
1312 defaults.putDefaults(myDefaults);
1313 }
1314
1315 /**
1316 * Initializes the system color defaults.
1317 *
1318 * In particular this sets the following keys:
1319 *
1320 * <table>
1321 * <tr>
1322 * <th>Key</th><th>Value</th><th>Description</th>
1323 * </tr><tr>
1324 * <td>control</td><td>0xcccccc</td><td>The default color for components</td>
1325 * </tr>
1326 * </table>
1327 */
1328 protected void initSystemColorDefaults(UIDefaults defaults)
1329 {
1330 super.initSystemColorDefaults(defaults);
1331 Object[] uiDefaults;
1332 uiDefaults = new Object[] {
1333 "control", new ColorUIResource(getControl()),
1334 "desktop", new ColorUIResource(getDesktopColor())
1335 };
1336 defaults.putDefaults(uiDefaults);
1337 }
1338
1339 /**
1340 * Returns the current theme for the Metal look and feel. The default is
1341 * an instance of {@link OceanTheme}.
1342 *
1343 * @return The current theme (never <code>null</code>).
1344 *
1345 * @see #setCurrentTheme(MetalTheme)
1346 */
1347 public static MetalTheme getCurrentTheme()
1348 {
1349 if (theme == null)
1350 {
1351 // swing.metalTheme property documented here:
1352 // http://java.sun.com/j2se/1.5.0/docs/guide/swing/1.5/index.html
1353 if ("steel".equals(SystemProperties.getProperty("swing.metalTheme")))
1354 theme = new DefaultMetalTheme();
1355 else
1356 theme = new OceanTheme();
1357 }
1358 return theme;
1359 }
1360
1361 /**
1362 * Returns <code>true</code> because the Metal look
1363 * and feel supports window decorations for toplevel
1364 * containers.
1365 *
1366 * @return <code>true</code>
1367 */
1368 public boolean getSupportsWindowDecorations()
1369 {
1370 return true;
1371 }
1372 }