001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package javax.swing.plaf.synth;
019:
020: import java.awt.Color;
021: import java.awt.Font;
022: import java.awt.Insets;
023:
024: import javax.swing.Icon;
025: import javax.swing.JComponent;
026:
027: /**
028: * SynthStyle contains all the information about component drawing
029: */
030: public abstract class SynthStyle {
031:
032: /**
033: * Null style used by StyleFactory to represent styles that not found
034: */
035: static final SynthStyle NULL_STYLE = new SynthStyle() {
036:
037: @Override
038: public SynthPainter getPainter(SynthContext context) {
039: return new SynthPainter() {
040: // Empty: Null painter nothing paints
041: };
042: }
043:
044: @Override
045: protected Color getColorForState(SynthContext context,
046: ColorType type) {
047: return null;
048: }
049:
050: @Override
051: protected Font getFontForState(SynthContext context) {
052: return null;
053: }
054: };
055:
056: /**
057: * The default isOpaque value
058: */
059: private boolean isOpaque = true;
060:
061: /**
062: * The default implementation returns null
063: */
064: @SuppressWarnings("unused")
065: public Object get(SynthContext context, Object key) {
066: return null;
067: }
068:
069: /**
070: * Returns boolean value from the properties table or the default value
071: */
072: public boolean getBoolean(SynthContext context, Object key,
073: boolean defaultValue) {
074:
075: Object result = get(context, key);
076: return (result instanceof Boolean) ? ((Boolean) result)
077: .booleanValue() : defaultValue;
078: }
079:
080: public Color getColor(SynthContext context, ColorType type) {
081:
082: Color result = getColorForState(context, type);
083:
084: if (result == null) {
085:
086: JComponent c = context.getComponent();
087:
088: if (type == ColorType.BACKGROUND) {
089:
090: if (c.getBackground() != null) {
091: result = c.getBackground();
092: }
093:
094: } else if (type == ColorType.FOREGROUND) {
095:
096: if (c.getForeground() != null) {
097: result = c.getForeground();
098: }
099: }
100: }
101:
102: return result;
103: }
104:
105: public Font getFont(SynthContext context) {
106:
107: Font result = getFontForState(context);
108:
109: return (result == null) ? context.getComponent().getFont()
110: : result;
111: }
112:
113: protected abstract Font getFontForState(SynthContext context);
114:
115: /**
116: * The default implementation just casts Object returned by get(Object, key
117: * method)
118: */
119: public Icon getIcon(SynthContext context, Object key) {
120:
121: try {
122:
123: return (Icon) get(context, key);
124:
125: } catch (ClassCastException e) {
126:
127: return null;
128:
129: }
130:
131: }
132:
133: /**
134: * The default implementation returns empty insets
135: */
136: @SuppressWarnings("unused")
137: public Insets getInsets(SynthContext context, Insets modified) {
138:
139: if (modified == null) {
140: return new Insets(0, 0, 0, 0);
141: }
142:
143: modified.set(0, 0, 0, 0);
144:
145: return modified;
146: }
147:
148: public int getInt(SynthContext context, Object key, int defaultValue) {
149:
150: Object value = get(context, key);
151:
152: return (value instanceof Integer) ? ((Integer) value)
153: .intValue() : defaultValue;
154: }
155:
156: /**
157: * @return The default implementation returns null
158: */
159: @SuppressWarnings("unused")
160: public SynthPainter getPainter(SynthContext context) {
161: return null;
162: }
163:
164: public String getString(SynthContext context, Object key,
165: String defaultValue) {
166: Object value = get(context, key);
167: return (value instanceof String) ? (String) value
168: : defaultValue;
169: }
170:
171: /** The default implementation is empty */
172: @SuppressWarnings("unused")
173: public void installDefaults(SynthContext context) {
174: // Empty
175: }
176:
177: @SuppressWarnings("unused")
178: public boolean isOpaque(SynthContext context) {
179: return isOpaque;
180: }
181:
182: /** The default implementation is empty */
183: @SuppressWarnings("unused")
184: public void uninstallDefaults(SynthContext context) {
185: // Empty
186: }
187:
188: protected abstract Color getColorForState(SynthContext context,
189: ColorType type);
190:
191: /**
192: * @return GraphicsUtils used for specified context. The default
193: * implementation returns default GraphicsUtils for any context.
194: */
195: public SynthGraphicsUtils getGraphicsUtils(
196: @SuppressWarnings("unused")
197: SynthContext context) {
198: return new SynthGraphicsUtils();
199: }
200:
201: }
|