Source for javax.swing.plaf.metal.MetalTheme

   1: /* MetalTheme.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: 
  40: package javax.swing.plaf.metal;
  41: 
  42: import java.awt.Color;
  43: 
  44: import javax.swing.UIDefaults;
  45: import javax.swing.plaf.ColorUIResource;
  46: import javax.swing.plaf.FontUIResource;
  47: 
  48: /**
  49:  * The base class for themes used by the {@link MetalLookAndFeel}.  A default
  50:  * theme ({@link DefaultMetalTheme}) is provided, or you can create and use
  51:  * your own.
  52:  *
  53:  * @see MetalLookAndFeel#setCurrentTheme(MetalTheme)
  54:  */
  55: public abstract class MetalTheme
  56: {
  57:   private ColorUIResource BLACK = new ColorUIResource(Color.BLACK);
  58:   private ColorUIResource WHITE = new ColorUIResource(Color.WHITE);
  59: 
  60:   /**
  61:    * Default constructor.
  62:    */
  63:   public MetalTheme()
  64:   {
  65:     // Do nothing here.
  66:   }
  67: 
  68:   /**
  69:    * Returns the name of the theme.
  70:    *
  71:    * @return The name of the theme.
  72:    */
  73:   public abstract String getName();
  74: 
  75:   /**
  76:    * Adds custom entries to the UI defaults table.  This method is empty.
  77:    *
  78:    * @param table  the table.
  79:    */
  80:   public void addCustomEntriesToTable(UIDefaults table)
  81:   {
  82:     // Do nothing here.
  83:     // This method needs to be overridden to actually do something.
  84:     // It is called from MetalLookAndFeel.getDefaults().
  85:   }
  86: 
  87:   /**
  88:    * Returns the accelerator foreground color.  The default implementation
  89:    * returns the color from {@link #getPrimary1()}.
  90:    *
  91:    * @return The accelerator foreground color.
  92:    */
  93:   public ColorUIResource getAcceleratorForeground()
  94:   {
  95:     return getPrimary1();
  96:   }
  97: 
  98:   /**
  99:    * 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: }