• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 /**
18  * @author Igor V. Stolyarov
19  * @version $Revision$
20  */
21 
22 package java.awt.image.renderable;
23 
24 import java.awt.RenderingHints;
25 import java.awt.geom.AffineTransform;
26 import java.awt.geom.Rectangle2D;
27 import java.awt.image.RenderedImage;
28 import java.util.Vector;
29 
30 import org.apache.harmony.awt.internal.nls.Messages;
31 
32 /**
33  * The Class RenderableImageOp is a basic implementation of RenderableImage,
34  * with methods to access the parameter data and perform rendering operations.
35  *
36  * @since Android 1.0
37  */
38 public class RenderableImageOp implements RenderableImage {
39 
40     /**
41      * The CRIF.
42      */
43     ContextualRenderedImageFactory CRIF;
44 
45     /**
46      * The param block.
47      */
48     ParameterBlock paramBlock;
49 
50     /**
51      * The height.
52      */
53     float minX, minY, width, height;
54 
55     /**
56      * Instantiates a new renderable image op.
57      *
58      * @param CRIF
59      *            the cRIF.
60      * @param paramBlock
61      *            the param block.
62      */
RenderableImageOp(ContextualRenderedImageFactory CRIF, ParameterBlock paramBlock)63     public RenderableImageOp(ContextualRenderedImageFactory CRIF, ParameterBlock paramBlock) {
64         this.CRIF = CRIF;
65         this.paramBlock = (ParameterBlock)paramBlock.clone();
66         Rectangle2D r = CRIF.getBounds2D(paramBlock);
67         minX = (float)r.getMinX();
68         minY = (float)r.getMinY();
69         width = (float)r.getWidth();
70         height = (float)r.getHeight();
71     }
72 
getProperty(String name)73     public Object getProperty(String name) {
74         return CRIF.getProperty(paramBlock, name);
75     }
76 
77     /**
78      * Sets the parameter block.
79      *
80      * @param paramBlock
81      *            the param block.
82      * @return the parameter block.
83      */
setParameterBlock(ParameterBlock paramBlock)84     public ParameterBlock setParameterBlock(ParameterBlock paramBlock) {
85         ParameterBlock oldParam = this.paramBlock;
86         this.paramBlock = (ParameterBlock)paramBlock.clone();
87         return oldParam;
88     }
89 
createRendering(RenderContext renderContext)90     public RenderedImage createRendering(RenderContext renderContext) {
91 
92         Vector<RenderableImage> sources = getSources();
93         ParameterBlock rdParam = (ParameterBlock)paramBlock.clone();
94 
95         if (sources != null) {
96             Vector<Object> rdSources = new Vector<Object>();
97             int i = 0;
98             while (i < sources.size()) {
99                 RenderContext newContext = CRIF
100                         .mapRenderContext(i, renderContext, paramBlock, this);
101                 RenderedImage rdim = sources.elementAt(i).createRendering(newContext);
102 
103                 if (rdim != null) {
104                     rdSources.addElement(rdim);
105                 }
106                 i++;
107             }
108             if (rdSources.size() > 0) {
109                 rdParam.setSources(rdSources);
110             }
111         }
112         return CRIF.create(renderContext, rdParam);
113     }
114 
createScaledRendering(int w, int h, RenderingHints hints)115     public RenderedImage createScaledRendering(int w, int h, RenderingHints hints) {
116         if (w == 0 && h == 0) {
117             // awt.60=Width and Height mustn't be equal zero both
118             throw new IllegalArgumentException(Messages.getString("awt.60")); //$NON-NLS-1$
119         }
120         if (w == 0) {
121             w = Math.round(h * (getWidth() / getHeight()));
122         }
123 
124         if (h == 0) {
125             h = Math.round(w * (getHeight() / getWidth()));
126         }
127 
128         double sx = (double)w / getWidth();
129         double sy = (double)h / getHeight();
130 
131         AffineTransform at = AffineTransform.getScaleInstance(sx, sy);
132         RenderContext context = new RenderContext(at, hints);
133         return createRendering(context);
134     }
135 
getSources()136     public Vector<RenderableImage> getSources() {
137         if (paramBlock.getNumSources() == 0) {
138             return null;
139         }
140         Vector<RenderableImage> v = new Vector<RenderableImage>();
141         int i = 0;
142         while (i < paramBlock.getNumSources()) {
143             Object o = paramBlock.getSource(i);
144             if (o instanceof RenderableImage) {
145                 v.addElement((RenderableImage)o);
146             }
147             i++;
148         }
149         return v;
150     }
151 
getPropertyNames()152     public String[] getPropertyNames() {
153         return CRIF.getPropertyNames();
154     }
155 
156     /**
157      * Gets the parameter block.
158      *
159      * @return the parameter block
160      */
getParameterBlock()161     public ParameterBlock getParameterBlock() {
162         return paramBlock;
163     }
164 
createDefaultRendering()165     public RenderedImage createDefaultRendering() {
166         AffineTransform at = new AffineTransform();
167         RenderContext context = new RenderContext(at);
168         return createRendering(context);
169     }
170 
isDynamic()171     public boolean isDynamic() {
172         return CRIF.isDynamic();
173     }
174 
getWidth()175     public float getWidth() {
176         return width;
177     }
178 
getMinY()179     public float getMinY() {
180         return minY;
181     }
182 
getMinX()183     public float getMinX() {
184         return minX;
185     }
186 
getHeight()187     public float getHeight() {
188         return height;
189     }
190 
191 }
192