001: /*
002: * $Id: PatternSpace.java,v 1.2 2007/12/20 18:33:34 rbair Exp $
003: *
004: * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005: * Santa Clara, California 95054, U.S.A. All rights reserved.
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020: */
021:
022: package com.sun.pdfview.colorspace;
023:
024: import java.io.IOException;
025: import java.util.Map;
026:
027: import com.sun.pdfview.PDFObject;
028: import com.sun.pdfview.PDFPaint;
029: import com.sun.pdfview.pattern.PDFPattern;
030:
031: /**
032: * A PatternSpace fills with a pattern, the name of which is
033: * specified in the call to getPaint(). This pattern is
034: * read from the resources of the current page. The pattern space
035: * may also have a base color space which the pattern is defined in.
036: */
037: public class PatternSpace extends PDFColorSpace {
038: private PDFColorSpace base;
039:
040: public PatternSpace() {
041: super (null);
042: }
043:
044: /**
045: * Create a pattern space with the given color space as a base
046: */
047: public PatternSpace(PDFColorSpace base) {
048: super (null);
049:
050: this .base = base;
051: }
052:
053: /**
054: * Get the base color space
055: */
056: public PDFColorSpace getBase() {
057: return base;
058: }
059:
060: /**
061: * Get the number of components we want
062: */
063: @Override
064: public int getNumComponents() {
065: if (base == null) {
066: return 0;
067: } else {
068: return base.getNumComponents();
069: }
070: }
071:
072: /**
073: * get the PDFPaint representing the color described by the
074: * given color components
075: * @param components the color components corresponding to the given
076: * colorspace
077: * @return a PDFPaint object representing the closest Color to the
078: * given components.
079: */
080: @Override
081: public PDFPaint getPaint(float[] components) {
082: throw new IllegalArgumentException(
083: "Pattern spaces require a pattern " + "name!");
084: }
085:
086: /**
087: * Get the paint representing a pattern, optionally with the given
088: * base paint.
089: *
090: * @param patternObj the pattern to render
091: * @param components the components of the base paint
092: */
093: public PDFPaint getPaint(PDFObject patternObj, float[] components,
094: Map resources) throws IOException {
095: PDFPaint basePaint = null;
096:
097: if (getBase() != null) {
098: basePaint = getBase().getPaint(components);
099: }
100:
101: PDFPattern pattern = (PDFPattern) patternObj.getCache();
102: if (pattern == null) {
103: pattern = PDFPattern.getPattern(patternObj, resources);
104: patternObj.setCache(pattern);
105: }
106:
107: return pattern.getPaint(basePaint);
108: }
109: }
|