/* * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.swing.plaf.synth; import javax.swing.JComponent; /** * An immutable transient object containing contextual information about * a <code>Region</code>. A <code>SynthContext</code> should only be * considered valid for the duration * of the method it is passed to. In other words you should not cache * a <code>SynthContext</code> that is passed to you and expect it to * remain valid. * * @since 1.5 * @author Scott Violet */ public class SynthContext { private JComponent component; private Region region; private SynthStyle style; private int state; static SynthContext getContext(JComponent c, SynthStyle style, int state) { return getContext(c, SynthLookAndFeel.getRegion(c), style, state); } static SynthContext getContext(JComponent component, Region region, SynthStyle style, int state) { SynthContext context = new SynthContext(); context.component = component; context.region = region; context.style = style; context.state = state; return context; } private SynthContext() { } /** * Creates a SynthContext with the specified values. This is meant * for subclasses and custom UI implementors. You very rarely need to * construct a SynthContext, though some methods will take one. * * @param component JComponent * @param region Identifies the portion of the JComponent * @param style Style associated with the component * @param state State of the component as defined in SynthConstants. * @throws NullPointerException if component, region of style is null. */ public SynthContext(JComponent component, Region region, SynthStyle style, int state) { if (component == null || region == null || style == null) { throw new NullPointerException( "You must supply a non-null component, region and style"); } this.component = component; this.region = region; this.style = style; this.state = state; } /** * Returns the hosting component containing the region. * * @return Hosting Component */ public JComponent getComponent() { return component; } /** * Returns the Region identifying this state. * * @return Region of the hosting component */ public Region getRegion() { return region; } /** * A convenience method for <code>getRegion().isSubregion()</code>. */ boolean isSubregion() { return getRegion().isSubregion(); } void setStyle(SynthStyle style) { this.style = style; } /** * Returns the style associated with this Region. * * @return SynthStyle associated with the region. */ public SynthStyle getStyle() { return style; } void setComponentState(int state) { this.state = state; } /** * Returns the state of the widget, which is a bitmask of the * values defined in <code>SynthConstants</code>. A region will at least * be in one of * <code>ENABLED</code>, <code>MOUSE_OVER</code>, <code>PRESSED</code> * or <code>DISABLED</code>. * * @see SynthConstants * @return State of Component */ public int getComponentState() { return state; } /** * Convenience method to get the Painter from the current SynthStyle. * This will NEVER return null. */ SynthPainter getPainter() { SynthPainter painter = getStyle().getPainter(this); if (painter != null) { return painter; } return SynthPainter.NULL_PAINTER; } }