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 */ MetalTheme()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 */ getName()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 */ addCustomEntriesToTable(UIDefaults table)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 */ getAcceleratorForeground()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 */ getAcceleratorSelectedForeground()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 */ getControl()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 */ getControlDarkShadow()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 */ getControlDisabled()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 */ getControlHighlight()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 */ getControlInfo()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 */ getControlShadow()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 */ getControlTextColor()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 */ getDesktopColor()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 */ getFocusColor()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 */ getHighlightedTextColor()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 */ getInactiveControlTextColor()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 */ getInactiveSystemTextColor()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 */ getMenuBackground()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 */ getMenuDisabledForeground()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 */ getMenuForeground()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 */ getMenuSelectedBackground()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 */ getMenuSelectedForeground()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 */ getPrimaryControl()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 */ getPrimaryControlDarkShadow()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 */ getPrimaryControlHighlight()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 */ getPrimaryControlInfo()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 */ getPrimaryControlShadow()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 */ getSeparatorBackground()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 */ getSeparatorForeground()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 */ getSystemTextColor()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 */ getTextHighlightColor()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 */ getUserTextColor()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 */ getWindowBackground()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 */ getWindowTitleBackground()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 */ getWindowTitleForeground()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 */ getWindowTitleInactiveBackground()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 */ getWindowTitleInactiveForeground()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 */ getBlack()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 */ getWhite()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 */ getPrimary1()497 protected abstract ColorUIResource getPrimary1(); 498 499 /** 500 * Returns the second primary color for this theme. 501 * 502 * @return The second primary color. 503 */ getPrimary2()504 protected abstract ColorUIResource getPrimary2(); 505 506 /** 507 * Returns the third primary color for this theme. 508 * 509 * @return The third primary color. 510 */ getPrimary3()511 protected abstract ColorUIResource getPrimary3(); 512 513 /** 514 * Returns the first secondary color for this theme. 515 * 516 * @return The first secondary color. 517 */ getSecondary1()518 protected abstract ColorUIResource getSecondary1(); 519 520 /** 521 * Returns the second secondary color for this theme. 522 * 523 * @return The second secondary color. 524 */ getSecondary2()525 protected abstract ColorUIResource getSecondary2(); 526 527 /** 528 * Returns the third secondary color for this theme. 529 * 530 * @return The third secondary color. 531 */ getSecondary3()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 */ getControlTextFont()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 */ getMenuTextFont()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 */ getSubTextFont()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 */ getSystemTextFont()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 */ getUserTextFont()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 */ getWindowTitleFont()574 public abstract FontUIResource getWindowTitleFont(); 575 576 } 577