1. /*
  2. * @(#)SynthLabelUI.java 1.18 03/12/19
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing.plaf.synth;
  8. import javax.swing.*;
  9. import javax.swing.plaf.*;
  10. import javax.swing.plaf.basic.*;
  11. import javax.swing.text.View;
  12. import java.awt.event.ActionEvent;
  13. import java.awt.event.ActionListener;
  14. import java.awt.Component;
  15. import java.awt.Container;
  16. import java.awt.Dimension;
  17. import java.awt.Rectangle;
  18. import java.awt.Insets;
  19. import java.awt.Color;
  20. import java.awt.Graphics;
  21. import java.awt.Font;
  22. import java.awt.FontMetrics;
  23. import java.beans.PropertyChangeEvent;
  24. import java.beans.PropertyChangeListener;
  25. import sun.swing.plaf.synth.SynthUI;
  26. /**
  27. * Synth's LabelUI.
  28. *
  29. * @version 1.18, 12/19/03
  30. * @author Scott Violet
  31. */
  32. class SynthLabelUI extends BasicLabelUI implements SynthUI {
  33. private SynthStyle style;
  34. /**
  35. * Returns the LabelUI implementation used for the skins look and feel.
  36. */
  37. public static ComponentUI createUI(JComponent c){
  38. return new SynthLabelUI();
  39. }
  40. protected void installDefaults(JLabel c) {
  41. updateStyle(c);
  42. }
  43. void updateStyle(JLabel c) {
  44. SynthContext context = getContext(c, ENABLED);
  45. style = SynthLookAndFeel.updateStyle(context, this);
  46. context.dispose();
  47. }
  48. protected void uninstallDefaults(JLabel c){
  49. SynthContext context = getContext(c, ENABLED);
  50. style.uninstallDefaults(context);
  51. context.dispose();
  52. style = null;
  53. }
  54. public SynthContext getContext(JComponent c) {
  55. return getContext(c, getComponentState(c));
  56. }
  57. private SynthContext getContext(JComponent c, int state) {
  58. return SynthContext.getContext(SynthContext.class, c,
  59. SynthLookAndFeel.getRegion(c), style, state);
  60. }
  61. private Region getRegion(JComponent c) {
  62. return SynthLookAndFeel.getRegion(c);
  63. }
  64. private int getComponentState(JComponent c) {
  65. int state = SynthLookAndFeel.getComponentState(c);
  66. if (SynthLookAndFeel.selectedUI == this &&
  67. state == SynthConstants.ENABLED) {
  68. state = SynthLookAndFeel.selectedUIState | SynthConstants.ENABLED;
  69. }
  70. return state;
  71. }
  72. /**
  73. * Notifies this UI delegate that it's time to paint the specified
  74. * component. This method is invoked by <code>JComponent</code>
  75. * when the specified component is being painted.
  76. */
  77. public void update(Graphics g, JComponent c) {
  78. SynthContext context = getContext(c);
  79. SynthLookAndFeel.update(context, g);
  80. context.getPainter().paintLabelBackground(context,
  81. g, 0, 0, c.getWidth(), c.getHeight());
  82. paint(context, g);
  83. context.dispose();
  84. }
  85. public void paint(Graphics g, JComponent c) {
  86. SynthContext context = getContext(c);
  87. paint(context, g);
  88. context.dispose();
  89. }
  90. protected void paint(SynthContext context, Graphics g) {
  91. JLabel label = (JLabel)context.getComponent();
  92. Icon icon = (label.isEnabled()) ? label.getIcon() :
  93. label.getDisabledIcon();
  94. g.setColor(context.getStyle().getColor(context,
  95. ColorType.TEXT_FOREGROUND));
  96. g.setFont(style.getFont(context));
  97. context.getStyle().getGraphicsUtils(context).paintText(
  98. context, g, label.getText(), icon,
  99. label.getHorizontalAlignment(), label.getVerticalAlignment(),
  100. label.getHorizontalTextPosition(), label.getVerticalTextPosition(),
  101. label.getIconTextGap(), label.getDisplayedMnemonicIndex(), 0);
  102. }
  103. public void paintBorder(SynthContext context, Graphics g, int x,
  104. int y, int w, int h) {
  105. context.getPainter().paintLabelBorder(context, g, x, y, w, h);
  106. }
  107. public Dimension getPreferredSize(JComponent c) {
  108. JLabel label = (JLabel)c;
  109. Icon icon = (label.isEnabled()) ? label.getIcon() :
  110. label.getDisabledIcon();
  111. SynthContext context = getContext(c);
  112. Dimension size = context.getStyle().getGraphicsUtils(context).
  113. getPreferredSize(
  114. context, context.getStyle().getFont(context), label.getText(),
  115. icon, label.getHorizontalAlignment(),
  116. label.getVerticalAlignment(), label.getHorizontalTextPosition(),
  117. label.getVerticalTextPosition(), label.getIconTextGap(),
  118. label.getDisplayedMnemonicIndex());
  119. context.dispose();
  120. return size;
  121. }
  122. public Dimension getMinimumSize(JComponent c) {
  123. JLabel label = (JLabel)c;
  124. Icon icon = (label.isEnabled()) ? label.getIcon() :
  125. label.getDisabledIcon();
  126. SynthContext context = getContext(c);
  127. Dimension size = context.getStyle().getGraphicsUtils(context).
  128. getMinimumSize(
  129. context, context.getStyle().getFont(context), label.getText(),
  130. icon, label.getHorizontalAlignment(),
  131. label.getVerticalAlignment(), label.getHorizontalTextPosition(),
  132. label.getVerticalTextPosition(), label.getIconTextGap(),
  133. label.getDisplayedMnemonicIndex());
  134. context.dispose();
  135. return size;
  136. }
  137. public Dimension getMaximumSize(JComponent c) {
  138. JLabel label = (JLabel)c;
  139. Icon icon = (label.isEnabled()) ? label.getIcon() :
  140. label.getDisabledIcon();
  141. SynthContext context = getContext(c);
  142. Dimension size = context.getStyle().getGraphicsUtils(context).
  143. getMaximumSize(
  144. context, context.getStyle().getFont(context), label.getText(),
  145. icon, label.getHorizontalAlignment(),
  146. label.getVerticalAlignment(), label.getHorizontalTextPosition(),
  147. label.getVerticalTextPosition(), label.getIconTextGap(),
  148. label.getDisplayedMnemonicIndex());
  149. context.dispose();
  150. return size;
  151. }
  152. public void propertyChange(PropertyChangeEvent e) {
  153. super.propertyChange(e);
  154. if (SynthLookAndFeel.shouldUpdateStyle(e)) {
  155. updateStyle((JLabel)e.getSource());
  156. }
  157. }
  158. }