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.COSDictionary;
033: import de.intarsys.pdf.cos.COSName;
034: import de.intarsys.pdf.cos.COSNumber;
035: import de.intarsys.pdf.cos.COSObject;
036:
037: /**
038: * A shading fill pattern.
039: *
040: */
041: public class PDShadingPattern extends PDPattern {
042: /**
043: * The meta class implementation
044: */
045: static public class MetaClass extends PDPattern.MetaClass {
046: protected MetaClass(Class paramInstanceClass) {
047: super (paramInstanceClass);
048: }
049: }
050:
051: private static final COSName DK_Matrix = COSName.constant("Matrix"); //$NON-NLS-1$
052:
053: private static final COSName DK_Shading = COSName
054: .constant("Shading"); //$NON-NLS-1$
055:
056: /** The meta class instance */
057: static public final MetaClass META = new MetaClass(MetaClass.class
058: .getDeclaringClass());
059:
060: private float[] matrix;
061:
062: private PDShading shading;
063:
064: protected PDShadingPattern(COSObject object) {
065: super (object);
066:
067: COSObject cosMatrix;
068:
069: cosMatrix = object.asDictionary().get(DK_Matrix);
070:
071: if (cosMatrix.isNull()) {
072: matrix = new float[] { 1, 0, 0, 1, 0, 0 };
073: } else {
074: matrix = new float[6];
075: for (int index = 0; index < 6; index++) {
076: matrix[index] = ((COSNumber) cosMatrix.asArray().get(
077: index)).floatValue();
078: }
079: }
080:
081: // shading will be resolved lazily
082: }
083:
084: public float[] getMatrix() {
085: return matrix;
086: }
087:
088: public int getPatternType() {
089: return PATTERN_TYPE_SHADING;
090: }
091:
092: public PDShading getShading() {
093: if (shading == null) {
094: shading = (PDShading) PDObject.META
095: .createFromCos(((COSDictionary) cosGetObject())
096: .get(DK_Shading));
097: }
098: return shading;
099: }
100: }
|