Frames | No Frames |
1: /* DefaultMetalTheme.java -- 2: Copyright (C) 2004, 2005 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: 39: package javax.swing.plaf.metal; 40: 41: import gnu.classpath.SystemProperties; 42: 43: import java.awt.Font; 44: 45: import javax.swing.UIManager; 46: import javax.swing.plaf.ColorUIResource; 47: import javax.swing.plaf.FontUIResource; 48: 49: /** 50: * The default theme for the {@link MetalLookAndFeel}. 51: * 52: * @see MetalLookAndFeel#setCurrentTheme(MetalTheme) 53: */ 54: public class DefaultMetalTheme extends MetalTheme 55: { 56: private static final ColorUIResource PRIMARY1 = 57: new ColorUIResource(102, 102, 153); 58: private static final ColorUIResource PRIMARY2 = 59: new ColorUIResource(153, 153, 204); 60: private static final ColorUIResource PRIMARY3 = 61: new ColorUIResource(204, 204, 255); 62: private static final ColorUIResource SECONDARY1 = 63: new ColorUIResource(102, 102, 102); 64: private static final ColorUIResource SECONDARY2 = 65: new ColorUIResource(153, 153, 153); 66: private static final ColorUIResource SECONDARY3 = 67: new ColorUIResource(204, 204, 204); 68: 69: private static final FontUIResource SUB_TEXT_FONT = 70: new FontUIResource("Dialog", Font.PLAIN, 10); 71: private static final FontUIResource SYSTEM_TEXT_FONT = 72: new FontUIResource("Dialog", Font.PLAIN, 12); 73: private static final FontUIResource USER_TEXT_FONT = 74: new FontUIResource("Dialog", Font.PLAIN, 12); 75: private static final FontUIResource WINDOW_TITLE_FONT = 76: new FontUIResource("Dialog", Font.BOLD, 12); 77: 78: /** 79: * The control text font for swing.boldMetal=false. 80: */ 81: private static final FontUIResource PLAIN_CONTROL_TEXT_FONT = 82: new FontUIResource("Dialog", Font.PLAIN, 12); 83: 84: /** 85: * The standard control text font. 86: */ 87: private static final FontUIResource BOLD_CONTROL_TEXT_FONT = 88: new FontUIResource("Dialog", Font.BOLD, 12); 89: 90: /** 91: * The menu text font for swing.boldMetal=false. 92: */ 93: private static final FontUIResource PLAIN_MENU_TEXT_FONT = 94: new FontUIResource("Dialog", Font.PLAIN, 12); 95: 96: /** 97: * The menu control text font. 98: */ 99: private static final FontUIResource BOLD_MENU_TEXT_FONT = 100: new FontUIResource("Dialog", Font.BOLD, 12); 101: 102: /** 103: * Indicates the control text font. 104: */ 105: static final int CONTROL_TEXT_FONT = 1; 106: 107: /** 108: * Indicates the menu text font. 109: */ 110: static final int MENU_TEXT_FONT = 2; 111: 112: /** 113: * Creates a new instance of this theme. 114: */ 115: public DefaultMetalTheme() 116: { 117: // Do nothing here. 118: } 119: 120: /** 121: * Returns the name of the theme. 122: * 123: * @return <code>"Steel"</code>. 124: */ 125: public String getName() 126: { 127: return "Steel"; 128: } 129: 130: /** 131: * Returns the first primary color for this theme. 132: * 133: * @return The first primary color. 134: */ 135: protected ColorUIResource getPrimary1() 136: { 137: return PRIMARY1; 138: } 139: 140: /** 141: * Returns the second primary color for this theme. 142: * 143: * @return The second primary color. 144: */ 145: protected ColorUIResource getPrimary2() 146: { 147: return PRIMARY2; 148: } 149: 150: /** 151: * Returns the third primary color for this theme. 152: * 153: * @return The third primary color. 154: */ 155: protected ColorUIResource getPrimary3() 156: { 157: return PRIMARY3; 158: } 159: 160: /** 161: * Returns the first secondary color for this theme. 162: * 163: * @return The first secondary color. 164: */ 165: protected ColorUIResource getSecondary1() 166: { 167: return SECONDARY1; 168: } 169: 170: /** 171: * Returns the second secondary color for this theme. 172: * 173: * @return The second secondary color. 174: */ 175: protected ColorUIResource getSecondary2() 176: { 177: return SECONDARY2; 178: } 179: 180: /** 181: * Returns the third secondary color for this theme. 182: * 183: * @return The third secondary color. 184: */ 185: protected ColorUIResource getSecondary3() 186: { 187: return SECONDARY3; 188: } 189: 190: /** 191: * Returns the font used for text on controls. In this case, the font is 192: * <code>FontUIResource("Dialog", Font.BOLD, 12)</code>, unless the 193: * <code>swing.boldMetal</code> UI default is set to {@link Boolean#FALSE} 194: * in which case it is <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. 195: * 196: * @return The font. 197: */ 198: public FontUIResource getControlTextFont() 199: { 200: return getFont(CONTROL_TEXT_FONT); 201: } 202: 203: /** 204: * Returns the font used for text in menus. In this case, the font is 205: * <code>FontUIResource("Dialog", Font.BOLD, 12)</code>, unless the 206: * <code>swing.boldMetal</code> UI default is set to {@link Boolean#FALSE} 207: * in which case it is <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. 208: * 209: * @return The font used for text in menus. 210: */ 211: public FontUIResource getMenuTextFont() 212: { 213: return getFont(MENU_TEXT_FONT); 214: } 215: 216: /** 217: * Returns the font used for sub text. In this case, the font is 218: * <code>FontUIResource("Dialog", Font.PLAIN, 10)</code>. 219: * 220: * @return The font used for sub text. 221: */ 222: public FontUIResource getSubTextFont() 223: { 224: return SUB_TEXT_FONT; 225: } 226: 227: /** 228: * Returns the font used for system text. In this case, the font is 229: * <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. 230: * 231: * @return The font used for system text. 232: */ 233: public FontUIResource getSystemTextFont() 234: { 235: return SYSTEM_TEXT_FONT; 236: } 237: 238: /** 239: * Returns the font used for user text. In this case, the font is 240: * <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. 241: * 242: * @return The font used for user text. 243: */ 244: public FontUIResource getUserTextFont() 245: { 246: return USER_TEXT_FONT; 247: } 248: 249: /** 250: * Returns the font used for window titles. In this case, the font is 251: * <code>FontUIResource("Dialog", Font.BOLD, 12)</code>. 252: * 253: * @return The font used for window titles. 254: */ 255: public FontUIResource getWindowTitleFont() 256: { 257: return WINDOW_TITLE_FONT; 258: } 259: 260: /** 261: * Returns the appropriate font. The font type to return is identified 262: * by the specified id. 263: * 264: * @param id the font type to return 265: * 266: * @return the correct font 267: */ 268: private FontUIResource getFont(int id) 269: { 270: FontUIResource font = null; 271: switch (id) 272: { 273: case CONTROL_TEXT_FONT: 274: if (isBoldMetal()) 275: font = BOLD_CONTROL_TEXT_FONT; 276: else 277: font = PLAIN_CONTROL_TEXT_FONT; 278: break; 279: case MENU_TEXT_FONT: 280: if (isBoldMetal()) 281: font = BOLD_MENU_TEXT_FONT; 282: else 283: font = PLAIN_MENU_TEXT_FONT; 284: break; 285: // TODO: Add other font types and their mapping here. 286: } 287: return font; 288: } 289: 290: /** 291: * Determines if the theme should be bold or not. The theme is bold by 292: * default, this can be turned off by setting the system property 293: * swing.boldMetal to true, or by putting the property with the same name 294: * into the current UIManager's defaults. 295: * 296: * @return <code>true</code>, when the theme is bold, <code>false</code> 297: * otherwise 298: */ 299: private boolean isBoldMetal() 300: { 301: Object boldMetal = UIManager.get("swing.boldMetal"); 302: return (boldMetal == null || ! Boolean.FALSE.equals(boldMetal)) 303: && ! ("false".equals(SystemProperties.getProperty("swing.boldMetal"))); 304: } 305: }