/* * @(#)SynthTextAreaUI.java 1.8 04/06/24 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.swing.plaf.synth; import javax.swing.*; import javax.swing.text.*; import javax.swing.event.*; import javax.swing.plaf.*; import javax.swing.plaf.basic.BasicTextAreaUI; import java.awt.*; import java.beans.PropertyChangeEvent; import sun.swing.plaf.synth.SynthUI; /** * Provides the look and feel for a plain text editor in the * Synth look and feel. In this implementation the default UI * is extended to act as a simple view factory. *

* Warning: * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeansTM * has been added to the java.beans package. * Please see {@link java.beans.XMLEncoder}. * * @author Shannon Hickey * @version 1.8 06/24/04 */ class SynthTextAreaUI extends BasicTextAreaUI implements SynthUI { private SynthStyle style; /** * Creates a UI for a JTextArea. * * @param ta a text area * @return the UI */ public static ComponentUI createUI(JComponent ta) { return new SynthTextAreaUI(); } protected void installDefaults() { updateStyle((JTextComponent)getComponent()); } protected void uninstallDefaults() { SynthContext context = getContext(getComponent(), ENABLED); getComponent().putClientProperty("caretAspectRatio", null); style.uninstallDefaults(context); context.dispose(); style = null; super.uninstallDefaults(); } public void installUI(JComponent c) { super.installUI(c); } private void updateStyle(JTextComponent comp) { SynthContext context = getContext(comp, ENABLED); SynthStyle oldStyle = style; style = SynthLookAndFeel.updateStyle(context, this); if (style != oldStyle) { SynthTextFieldUI.updateStyle(comp, context, getPropertyPrefix()); if (oldStyle != null) { uninstallKeyboardActions(); installKeyboardActions(); } } context.dispose(); } public SynthContext getContext(JComponent c) { return getContext(c, getComponentState(c)); } private SynthContext getContext(JComponent c, int state) { return SynthContext.getContext(SynthContext.class, c, SynthLookAndFeel.getRegion(c), style, state); } private int getComponentState(JComponent c) { return SynthLookAndFeel.getComponentState(c); } public void update(Graphics g, JComponent c) { SynthContext context = getContext(c); SynthLookAndFeel.update(context, g); context.getPainter().paintTextAreaBackground(context, g, 0, 0, c.getWidth(), c.getHeight()); paint(context, g); context.dispose(); } protected void paint(SynthContext context, Graphics g) { super.paint(g, getComponent()); } protected void paintBackground(Graphics g) { // Overriden to do nothing, all our painting is done from update/paint. } public void paintBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { context.getPainter().paintTextAreaBorder(context, g, x, y, w, h); } /** * This method gets called when a bound property is changed * on the associated JTextComponent. This is a hook * which UI implementations may change to reflect how the * UI displays bound properties of JTextComponent subclasses. * This is implemented to rebuild the View when the * WrapLine or the WrapStyleWord property changes. * * @param evt the property change event */ protected void propertyChange(PropertyChangeEvent evt) { if (SynthLookAndFeel.shouldUpdateStyle(evt)) { updateStyle((JTextComponent)evt.getSource()); } super.propertyChange(evt); } }