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 de.intarsys.pdf.cos.COSArray;
033: import de.intarsys.pdf.cos.COSDictionary;
034: import de.intarsys.pdf.cos.COSName;
035: import de.intarsys.pdf.cos.COSNumber;
036: import de.intarsys.pdf.cos.COSObject;
037:
038: /**
039: * Use axial shading for filling the shape.
040: *
041: */
042: public class PDAxialShading extends PDShading {
043: /**
044: * The meta class implementation
045: */
046: static public class MetaClass extends PDShading.MetaClass {
047: protected MetaClass(Class paramInstanceClass) {
048: super (paramInstanceClass);
049: }
050: }
051:
052: private static final COSName DK_Coords = COSName.constant("Coords"); //$NON-NLS-1$
053:
054: private static final COSName DK_Domain = COSName.constant("Domain"); //$NON-NLS-1$
055:
056: private static final COSName DK_Extend = COSName.constant("Extend"); //$NON-NLS-1$
057:
058: private static final COSName DK_Function = COSName
059: .constant("Function"); //$NON-NLS-1$
060:
061: /** The meta class instance */
062: static public final MetaClass META = new MetaClass(MetaClass.class
063: .getDeclaringClass());
064:
065: private float[] coords;
066:
067: private float[] domain;
068:
069: private boolean[] extend;
070:
071: private PDFunction function;
072:
073: protected PDAxialShading(COSObject object) {
074: super (object);
075:
076: COSArray cosCoords;
077: COSObject cosDomain;
078: COSObject cosExtend;
079:
080: cosCoords = object.asDictionary().get(DK_Coords).asArray();
081: coords = new float[4];
082: for (int index = 0; index < 4; index++) {
083: coords[index] = ((COSNumber) cosCoords.get(index))
084: .floatValue();
085: }
086:
087: cosDomain = object.asDictionary().get(DK_Domain);
088: if (cosDomain.isNull()) {
089: domain = new float[] { 0, 1 };
090: } else {
091: domain = new float[2];
092: for (int index = 0; index < 2; index++) {
093: domain[index] = ((COSNumber) cosDomain.asArray().get(
094: index)).floatValue();
095: }
096: }
097:
098: cosExtend = object.asDictionary().get(DK_Extend);
099: if (cosExtend.isNull()) {
100: extend = new boolean[] { false, false };
101: } else {
102: extend = new boolean[2];
103: for (int index = 0; index < 2; index++) {
104: extend[index] = cosExtend.asArray().get(index)
105: .asBoolean().booleanValue();
106: }
107: }
108:
109: // function will be resolved lazily
110: }
111:
112: public float[] getCoords() {
113: return coords;
114: }
115:
116: public float[] getDomain() {
117: return domain;
118: }
119:
120: public PDFunction getFunction() {
121: if (function == null) {
122: function = (PDFunction) PDFunction.META
123: .createFromCos(((COSDictionary) cosGetObject())
124: .get(DK_Function));
125: }
126: return function;
127: }
128:
129: public int getShadingType() {
130: return SHADING_TYPE_AXIAL;
131: }
132: }
|