001/* MetalTheme.java --
002   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
003
004This file is part of GNU Classpath.
005
006GNU Classpath is free software; you can redistribute it and/or modify
007it under the terms of the GNU General Public License as published by
008the Free Software Foundation; either version 2, or (at your option)
009any later version.
010
011GNU Classpath is distributed in the hope that it will be useful, but
012WITHOUT ANY WARRANTY; without even the implied warranty of
013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014General Public License for more details.
015
016You should have received a copy of the GNU General Public License
017along with GNU Classpath; see the file COPYING.  If not, write to the
018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
01902110-1301 USA.
020
021Linking this library statically or dynamically with other modules is
022making a combined work based on this library.  Thus, the terms and
023conditions of the GNU General Public License cover the whole
024combination.
025
026As a special exception, the copyright holders of this library give you
027permission to link this library with independent modules to produce an
028executable, regardless of the license terms of these independent
029modules, and to copy and distribute the resulting executable under
030terms of your choice, provided that you also meet, for each linked
031independent module, the terms and conditions of the license of that
032module.  An independent module is a module which is not derived from
033or based on this library.  If you modify this library, you may extend
034this exception to your version of the library, but you are not
035obligated to do so.  If you do not wish to do so, delete this
036exception statement from your version. */
037
038
039
040package javax.swing.plaf.metal;
041
042import java.awt.Color;
043
044import javax.swing.UIDefaults;
045import javax.swing.plaf.ColorUIResource;
046import javax.swing.plaf.FontUIResource;
047
048/**
049 * The base class for themes used by the {@link MetalLookAndFeel}.  A default
050 * theme ({@link DefaultMetalTheme}) is provided, or you can create and use
051 * your own.
052 *
053 * @see MetalLookAndFeel#setCurrentTheme(MetalTheme)
054 */
055public abstract class MetalTheme
056{
057  private ColorUIResource BLACK = new ColorUIResource(Color.BLACK);
058  private ColorUIResource WHITE = new ColorUIResource(Color.WHITE);
059
060  /**
061   * Default constructor.
062   */
063  public MetalTheme()
064  {
065    // Do nothing here.
066  }
067
068  /**
069   * Returns the name of the theme.
070   *
071   * @return The name of the theme.
072   */
073  public abstract String getName();
074
075  /**
076   * Adds custom entries to the UI defaults table.  This method is empty.
077   *
078   * @param table  the table.
079   */
080  public void addCustomEntriesToTable(UIDefaults table)
081  {
082    // Do nothing here.
083    // This method needs to be overridden to actually do something.
084    // It is called from MetalLookAndFeel.getDefaults().
085  }
086
087  /**
088   * Returns the accelerator foreground color.  The default implementation
089   * returns the color from {@link #getPrimary1()}.
090   *
091   * @return The accelerator foreground color.
092   */
093  public ColorUIResource getAcceleratorForeground()
094  {
095    return getPrimary1();
096  }
097
098  /**
099   * Returns the accelerator selected foreground color.  The default
100   * implementation returns the color from {@link #getBlack()}.
101   *
102   * @return The accelerator selected foreground color.
103   */
104  public ColorUIResource getAcceleratorSelectedForeground()
105  {
106    return getBlack();
107  }
108
109  /**
110   * Returns the control color.  The default implementation returns the color
111   * from {@link #getSecondary3()}.
112   *
113   * @return The control color.
114   */
115  public ColorUIResource getControl()
116  {
117    return getSecondary3();
118  }
119
120  /**
121   * Returns the color used for dark shadows on controls.  The default
122   * implementation returns the color from  {@link #getSecondary1()}.
123   *
124   * @return The color used for dark shadows on controls.
125   */
126  public ColorUIResource getControlDarkShadow()
127  {
128    return getSecondary1();
129  }
130
131  /**
132   * Returns the color used for disabled controls.  The default implementation
133   * returns the color from {@link #getSecondary1()}.
134   *
135   * @return The color used for disabled controls.
136   */
137  public ColorUIResource getControlDisabled()
138  {
139    return getSecondary2();
140  }
141
142  /**
143   * Returns the color used to draw highlights for controls.  The default
144   * implementation returns the color from {@link #getWhite()}.
145   *
146   * @return The color used to draw highlights for controls.
147   */
148  public ColorUIResource getControlHighlight()
149  {
150    return getWhite();
151  }
152
153  /**
154   * Returns the color used to display control info.  The default
155   * implementation returns the color from {@link #getBlack()}.
156   *
157   * @return The color used to display control info.
158   */
159  public ColorUIResource getControlInfo()
160  {
161    return getBlack();
162  }
163
164  /**
165   * Returns the color used to draw shadows for controls.  The default
166   * implementation returns the color from {@link #getSecondary2()}.
167   *
168   * @return The color used to draw shadows for controls.
169   */
170  public ColorUIResource getControlShadow()
171  {
172    return getSecondary2();
173  }
174
175  /**
176   * Returns the color used for text on controls.  The default implementation
177   * returns the color from {@link #getControlInfo()}.
178   *
179   * @return The color used for text on controls.
180   */
181  public ColorUIResource getControlTextColor()
182  {
183    return getControlInfo();
184  }
185
186  /**
187   * Returns the color used for the desktop background.  The default
188   * implementation returns the color from {@link #getPrimary2()}.
189   *
190   * @return The color used for the desktop background.
191   */
192  public ColorUIResource getDesktopColor()
193  {
194    return getPrimary2();
195  }
196
197  /**
198   * Returns the color used to draw focus highlights.  The default
199   * implementation returns the color from {@link #getPrimary2()}.
200   *
201   * @return The color used to draw focus highlights.
202   */
203  public ColorUIResource getFocusColor()
204  {
205    return getPrimary2();
206  }
207
208  /**
209   * Returns the color used to draw highlighted text.  The default
210   * implementation returns the color from {@link #getHighlightedTextColor()}.
211   *
212   * @return The color used to draw highlighted text.
213   */
214  public ColorUIResource getHighlightedTextColor()
215  {
216    return getControlTextColor();
217  }
218
219  /**
220   * Returns the color used to draw text on inactive controls.  The default
221   * implementation returns the color from {@link #getControlDisabled()}.
222   *
223   * @return The color used to draw text on inactive controls.
224   */
225  public ColorUIResource getInactiveControlTextColor()
226  {
227    return getControlDisabled();
228  }
229
230  /**
231   * Returns the color used to draw inactive system text.  The default
232   * implementation returns the color from {@link #getSecondary2()}.
233   *
234   * @return The color used to draw inactive system text.
235   */
236  public ColorUIResource getInactiveSystemTextColor()
237  {
238    return getSecondary2();
239  }
240
241  /**
242   * Returns the background color for menu items.  The default implementation
243   * returns the color from {@link #getSecondary3()}.
244   *
245   * @return The background color for menu items.
246   *
247   * @see #getMenuSelectedBackground()
248   */
249  public ColorUIResource getMenuBackground()
250  {
251    return getSecondary3();
252  }
253
254  /**
255   * Returns the foreground color for disabled menu items.  The default
256   * implementation returns the color from {@link #getSecondary2()}.
257   *
258   * @return The foreground color for disabled menu items.
259   *
260   * @see #getMenuForeground()
261   */
262  public ColorUIResource getMenuDisabledForeground()
263  {
264    return getSecondary2();
265  }
266
267  /**
268   * Returns the foreground color for menu items.  The default implementation
269   * returns the color from {@link #getBlack()}.
270   *
271   * @return The foreground color for menu items.
272   *
273   * @see #getMenuDisabledForeground()
274   * @see #getMenuSelectedForeground()
275   */
276  public ColorUIResource getMenuForeground()
277  {
278    return getBlack();
279  }
280
281  /**
282   * Returns the background color for selected menu items.  The default
283   * implementation returns the color from {@link #getPrimary2()}.
284   *
285   * @return The background color for selected menu items.
286   *
287   * @see #getMenuBackground()
288   */
289  public ColorUIResource getMenuSelectedBackground()
290  {
291    return getPrimary2();
292  }
293
294  /**
295   * Returns the foreground color for selected menu items.  The default
296   * implementation returns the value from {@link #getBlack()}.
297   *
298   * @return The foreground color for selected menu items.
299   *
300   * @see #getMenuForeground()
301   */
302  public ColorUIResource getMenuSelectedForeground()
303  {
304    return getBlack();
305  }
306
307  /**
308   * Returns the primary color for controls.  The default implementation
309   * returns the color from {@link #getPrimary3()}.
310   *
311   * @return The primary color for controls.
312   */
313  public ColorUIResource getPrimaryControl()
314  {
315    return getPrimary3();
316  }
317
318  /**
319   * Returns the primary color for the dark shadow on controls.  The default
320   * implementation returns the color from {@link #getPrimary1()}.
321   *
322   * @return The primary color for the dark shadow on controls.
323   */
324  public ColorUIResource getPrimaryControlDarkShadow()
325  {
326    return getPrimary1();
327  }
328
329  /**
330   * Returns the primary color for the highlight on controls.  The default
331   * implementation returns the color from {@link #getWhite()}.
332   *
333   * @return The primary color for the highlight on controls.
334   */
335  public ColorUIResource getPrimaryControlHighlight()
336  {
337    return getWhite();
338  }
339
340  /**
341   * Returns the primary color for the information on controls.  The default
342   * implementation returns the color from {@link #getBlack()}.
343   *
344   * @return The primary color for the information on controls.
345   */
346  public ColorUIResource getPrimaryControlInfo()
347  {
348    return getBlack();
349  }
350
351  /**
352   * Returns the primary color for the shadow on controls.  The default
353   * implementation returns the color from {@link #getPrimary2()}.
354   *
355   * @return The primary color for the shadow on controls.
356   */
357  public ColorUIResource getPrimaryControlShadow()
358  {
359    return getPrimary2();
360  }
361
362  /**
363   * Returns the background color for separators.  The default implementation
364   * returns the color from {@link #getWhite()}.
365   *
366   * @return The background color for separators.
367   */
368  public ColorUIResource getSeparatorBackground()
369  {
370    return getWhite();
371  }
372
373  /**
374   * Returns the foreground color for separators.  The default implementation
375   * returns the value from {@link #getPrimary1()}.
376   *
377   * @return The foreground color for separators.
378   */
379  public ColorUIResource getSeparatorForeground()
380  {
381    return getPrimary1();
382  }
383
384  /**
385   * Returns the color used for system text.  The default implementation
386   * returns the color from {@link #getBlack()}.
387   *
388   * @return The color used for system text.
389   */
390  public ColorUIResource getSystemTextColor()
391  {
392    return getBlack();
393  }
394
395  /**
396   * Returns the color used to highlight text.  The default implementation
397   * returns the color from {@link #getPrimary3()}.
398   *
399   * @return The color used to highlight text.
400   */
401  public ColorUIResource getTextHighlightColor()
402  {
403    return getPrimary3();
404  }
405
406  /**
407   * Returns the color used to display user text.  The default implementation
408   * returns the color from {@link #getBlack()}.
409   *
410   * @return The color used to display user text.
411   */
412  public ColorUIResource getUserTextColor()
413  {
414    return getBlack();
415  }
416
417  /**
418   * Returns the window background color.  The default implementation returns
419   * the color from {@link #getWhite()}.
420   *
421   * @return The window background color.
422   */
423  public ColorUIResource getWindowBackground()
424  {
425    return getWhite();
426  }
427
428  /**
429   * Returns the window title background color.  The default implementation
430   * returns the color from {@link #getPrimary3()}.
431   *
432   * @return The window title background color.
433   */
434  public ColorUIResource getWindowTitleBackground()
435  {
436    return getPrimary3();
437  }
438
439  /**
440   * Returns the window title foreground color.  The default implementation
441   * returns the color from {@link #getBlack()}.
442   *
443   * @return The window title foreground color.
444   */
445  public ColorUIResource getWindowTitleForeground()
446  {
447    return getBlack();
448  }
449
450  /**
451   * Returns the background color for an inactive window title.  The default
452   * implementation returns the color from {@link #getSecondary3()}.
453   *
454   * @return The background color for an inactive window title.
455   */
456  public ColorUIResource getWindowTitleInactiveBackground()
457  {
458    return getSecondary3();
459  }
460
461  /**
462   * Returns the foreground color for an inactive window title.  The default
463   * implementation returns the color from {@link #getBlack()}.
464   *
465   * @return The foreground color for an inactive window title.
466   */
467  public ColorUIResource getWindowTitleInactiveForeground()
468  {
469    return getBlack();
470  }
471
472  /**
473   * Returns the color used for black.
474   *
475   * @return The color used for black.
476   */
477  protected ColorUIResource getBlack()
478  {
479    return BLACK;
480  }
481
482  /**
483   * Returns the color used for white.
484   *
485   * @return The color used for white.
486   */
487  protected ColorUIResource getWhite()
488  {
489    return WHITE;
490  }
491
492  /**
493   * Returns the first primary color for this theme.
494   *
495   * @return The first primary color.
496   */
497  protected abstract ColorUIResource getPrimary1();
498
499  /**
500   * Returns the second primary color for this theme.
501   *
502   * @return The second primary color.
503   */
504  protected abstract ColorUIResource getPrimary2();
505
506  /**
507   * Returns the third primary color for this theme.
508   *
509   * @return The third primary color.
510   */
511  protected abstract ColorUIResource getPrimary3();
512
513  /**
514   * Returns the first secondary color for this theme.
515   *
516   * @return The first secondary color.
517   */
518  protected abstract ColorUIResource getSecondary1();
519
520  /**
521   * Returns the second secondary color for this theme.
522   *
523   * @return The second secondary color.
524   */
525  protected abstract ColorUIResource getSecondary2();
526
527  /**
528   * Returns the third secondary color for this theme.
529   *
530   * @return The third secondary color.
531   */
532  protected abstract ColorUIResource getSecondary3();
533
534  /**
535   * Returns the font used for text on controls.
536   *
537   * @return The font used for text on controls.
538   */
539  public abstract FontUIResource getControlTextFont();
540
541  /**
542   * Returns the font used for text in menus.
543   *
544   * @return The font used for text in menus.
545   */
546  public abstract FontUIResource getMenuTextFont();
547
548  /**
549   * Returns the font used for sub text.
550   *
551   * @return The font used for sub text.
552   */
553  public abstract FontUIResource getSubTextFont();
554
555  /**
556   * Returns the font used for system text.
557   *
558   * @return The font used for system text.
559   */
560  public abstract FontUIResource getSystemTextFont();
561
562  /**
563   * Returns the font used for user text.
564   *
565   * @return The font used for user text.
566   */
567  public abstract FontUIResource getUserTextFont();
568
569  /**
570   * Returns the font used for window titles.
571   *
572   * @return The font used for window titles.
573   */
574  public abstract FontUIResource getWindowTitleFont();
575
576}