001 /* DefaultMetalTheme.java --
002 Copyright (C) 2004, 2005 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.Font;
044
045 import javax.swing.UIManager;
046 import javax.swing.plaf.ColorUIResource;
047 import javax.swing.plaf.FontUIResource;
048
049 /**
050 * The default theme for the {@link MetalLookAndFeel}.
051 *
052 * @see MetalLookAndFeel#setCurrentTheme(MetalTheme)
053 */
054 public class DefaultMetalTheme extends MetalTheme
055 {
056 private static final ColorUIResource PRIMARY1 =
057 new ColorUIResource(102, 102, 153);
058 private static final ColorUIResource PRIMARY2 =
059 new ColorUIResource(153, 153, 204);
060 private static final ColorUIResource PRIMARY3 =
061 new ColorUIResource(204, 204, 255);
062 private static final ColorUIResource SECONDARY1 =
063 new ColorUIResource(102, 102, 102);
064 private static final ColorUIResource SECONDARY2 =
065 new ColorUIResource(153, 153, 153);
066 private static final ColorUIResource SECONDARY3 =
067 new ColorUIResource(204, 204, 204);
068
069 private static final FontUIResource SUB_TEXT_FONT =
070 new FontUIResource("Dialog", Font.PLAIN, 10);
071 private static final FontUIResource SYSTEM_TEXT_FONT =
072 new FontUIResource("Dialog", Font.PLAIN, 12);
073 private static final FontUIResource USER_TEXT_FONT =
074 new FontUIResource("Dialog", Font.PLAIN, 12);
075 private static final FontUIResource WINDOW_TITLE_FONT =
076 new FontUIResource("Dialog", Font.BOLD, 12);
077
078 /**
079 * The control text font for swing.boldMetal=false.
080 */
081 private static final FontUIResource PLAIN_CONTROL_TEXT_FONT =
082 new FontUIResource("Dialog", Font.PLAIN, 12);
083
084 /**
085 * The standard control text font.
086 */
087 private static final FontUIResource BOLD_CONTROL_TEXT_FONT =
088 new FontUIResource("Dialog", Font.BOLD, 12);
089
090 /**
091 * The menu text font for swing.boldMetal=false.
092 */
093 private static final FontUIResource PLAIN_MENU_TEXT_FONT =
094 new FontUIResource("Dialog", Font.PLAIN, 12);
095
096 /**
097 * The menu control text font.
098 */
099 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 }