001: /*
002: * Copyright (c) 2007, intarsys consulting GmbH
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * - Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * - Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * - Neither the name of intarsys nor the names of its contributors may be used
015: * to endorse or promote products derived from this software without specific
016: * prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
028: * POSSIBILITY OF SUCH DAMAGE.
029: */
030: package de.intarsys.pdf.pd;
031:
032: import java.util.HashSet;
033: import java.util.Iterator;
034: import java.util.Set;
035:
036: import de.intarsys.pdf.cos.COSArray;
037: import de.intarsys.pdf.cos.COSBasedObject;
038: import de.intarsys.pdf.cos.COSName;
039: import de.intarsys.pdf.cos.COSObject;
040:
041: /**
042: * The extended graphic state object. This is used in a resource dictionary to
043: * additionally define graphics context information.
044: */
045: public class PDExtGState extends PDObject {
046: public static final COSName DK_LW = COSName.constant("LW");
047:
048: public static final COSName DK_LC = COSName.constant("LC");
049:
050: public static final COSName DK_LJ = COSName.constant("LJ");
051:
052: public static final COSName DK_ML = COSName.constant("ML");
053:
054: public static final COSName DK_D = COSName.constant("D");
055:
056: public static final COSName DK_RI = COSName.constant("RI");
057:
058: public static final COSName DK_OP = COSName.constant("OP");
059:
060: public static final COSName DK_op = COSName.constant("op");
061:
062: public static final COSName DK_OPM = COSName.constant("OPM");
063:
064: public static final COSName DK_Font = COSName.constant("Font");
065:
066: public static final COSName DK_BG = COSName.constant("BG");
067:
068: public static final COSName DK_BG2 = COSName.constant("BG2");
069:
070: public static final COSName DK_UCR = COSName.constant("UCR");
071:
072: public static final COSName DK_UCR2 = COSName.constant("UCR2");
073:
074: public static final COSName DK_TR = COSName.constant("TR");
075:
076: public static final COSName DK_TR2 = COSName.constant("TR2");
077:
078: public static final COSName DK_HT = COSName.constant("HT");
079:
080: public static final COSName DK_FL = COSName.constant("FL");
081:
082: public static final COSName DK_SM = COSName.constant("SM");
083:
084: public static final COSName DK_SA = COSName.constant("SA");
085:
086: public static final COSName DK_BM = COSName.constant("BM");
087:
088: public static final COSName DK_SMask = COSName.constant("SMask");
089:
090: public static final COSName DK_CA = COSName.constant("CA");
091:
092: public static final COSName DK_ca = COSName.constant("ca");
093:
094: public static final COSName DK_AIS = COSName.constant("AIS");
095:
096: public static final COSName DK_TK = COSName.constant("TK");
097:
098: public static final COSName CN_BM_Multiply = COSName
099: .constant("Multiply");
100:
101: public static final COSName CN_BM_Normal = COSName
102: .constant("Normal");
103:
104: /** supported additional action triggers */
105: static public final Set BLEND_MODES;
106:
107: static {
108: BLEND_MODES = new HashSet(5);
109: BLEND_MODES.add(CN_BM_Normal);
110: BLEND_MODES.add(CN_BM_Multiply);
111: }
112:
113: /**
114: * The meta class implementation
115: */
116: static public class MetaClass extends PDObject.MetaClass {
117: protected MetaClass(Class instanceClass) {
118: super (instanceClass);
119: }
120:
121: protected COSBasedObject doCreateCOSBasedObject(COSObject object) {
122: return new PDExtGState(object);
123: }
124: }
125:
126: /** The meta class instance */
127: static public final MetaClass META = new MetaClass(MetaClass.class
128: .getDeclaringClass());
129:
130: /** The type name */
131: static public final COSName CN_Type_ExtGState = COSName
132: .constant("ExtGState"); //
133:
134: protected PDExtGState(COSObject object) {
135: super (object);
136: }
137:
138: /*
139: * (non-Javadoc)
140: *
141: * @see de.intarsys.pdf.pd.PDObject#cosGetExpectedType()
142: */
143: protected COSName cosGetExpectedType() {
144: return CN_Type_ExtGState;
145: }
146:
147: public void setStrokingAlphaConstant(float alpha) {
148: setFieldFixed(DK_CA, alpha);
149: }
150:
151: public void setNonStrokingAlphaConstant(float alpha) {
152: setFieldFixed(DK_ca, alpha);
153: }
154:
155: public float getStrokingAlphaConstant() {
156: return getFieldFixed(DK_CA, 1.0f);
157: }
158:
159: public float getNonStrokingAlphaConstant() {
160: return getFieldFixed(DK_ca, 1.0f);
161: }
162:
163: public COSName getBlendMode() {
164: COSObject blendMode = cosGetField(DK_BM);
165: if (blendMode.isNull()) {
166: return CN_BM_Normal;
167: }
168: if (blendMode instanceof COSName) {
169: if (BLEND_MODES.contains(blendMode)) {
170: return (COSName) blendMode;
171: }
172: } else if (blendMode instanceof COSArray) {
173: COSArray blendModes = (COSArray) blendMode;
174: for (Iterator i = blendModes.iterator(); i.hasNext();) {
175: COSName current = ((COSObject) i.next()).asName();
176: if (BLEND_MODES.contains(current)) {
177: return (COSName) current;
178: }
179: }
180: }
181: return CN_BM_Normal;
182: }
183:
184: public void setBlendMode(COSName blendMode) {
185: if (CN_BM_Normal.equals(blendMode)) {
186: blendMode = null;
187: }
188: cosSetField(DK_BM, blendMode);
189: }
190:
191: public boolean isBlendModeNormal() {
192: return CN_BM_Normal.equals(getBlendMode());
193: }
194:
195: public void setBlendModeNormal() {
196: setBlendMode(CN_BM_Normal);
197: }
198:
199: public boolean isBlendModeMultiply() {
200: return CN_BM_Multiply.equals(getBlendMode());
201: }
202:
203: public void setBlendModeMultiply() {
204: setBlendMode(CN_BM_Multiply);
205: }
206: }
|