KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > api > shape > Gradient


1 /*
2  * $Id: Gradient.java,v 1.1 2002/02/15 23:46:26 skavish Exp $
3  *
4  * ==========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.api.shape;
52
53 import org.openlaszlo.iv.flash.util.*;
54 import org.openlaszlo.iv.flash.api.*;
55 import org.openlaszlo.iv.flash.parser.Parser;
56 import java.io.PrintStream JavaDoc;
57
58 /**
59  * Gradient
60  * <P>
61  * Here is an overview of the Macromedia Flash (SWF) gradient model:<BR>
62  * <UL>
63  * <LI>There are two styles of gradient - Linear and Radial.
64  * <LI>Each gradient has its own transformation matrix, and can be transformed independently of its parent shape.
65  * <LI>A gradient can have up to eight control points. Colors are interpolated between the control
66  * points to create the color ramp.
67  * <LI>Each control point is defined by a ratio and an RGBA color. The ratio determines the position of
68  * the control point in the gradient, the RGBA value determines its color.
69  * </UL>
70  *
71  * @author Dmitry Skavish
72  */

73 public final class Gradient extends FlashItem {
74
75     private int nGrads;
76     private int[] ratios = new int[8];
77     private Color[] colors = new Color[8];
78
79     /**
80      * Creates empty gradient
81      */

82     public Gradient() {
83         nGrads = 0;
84     }
85
86     /**
87      * Creates gradient with one transition
88      *
89      * @param ratio specified retio
90      * @param color specified color
91      */

92     public Gradient( int ratio, Color color ) {
93         nGrads = 0;
94         addTransition( ratio, color );
95     }
96
97     public Color[] getColors() {
98         return colors;
99     }
100
101     public int[] getRatios() {
102         return ratios;
103     }
104
105     public int getNumber() {
106         return nGrads;
107     }
108
109     /**
110      * Adds transition
111      *
112      * @param ratio the transition's ratio
113      * @param color the transition's color
114      */

115     public void addTransition( int ratio, Color color ) {
116         ratios[nGrads] = ratio;
117         colors[nGrads] = color;
118         nGrads++;
119     }
120
121     public static Gradient parse( Parser p, boolean withAlpha ) {
122         Gradient g = new Gradient();
123         int nGrads = p.getUByte();
124         for( int i=0; i<nGrads; i++ ) {
125             int ratio = p.getUByte();
126             Color color = Color.parse(p, withAlpha);
127             g.addTransition(ratio, color);
128         }
129         return g;
130     }
131
132     public void write( FlashOutput fob ) {
133         fob.writeByte(nGrads);
134         if( fob.getUserData() instanceof Shape ) {
135             if( ((Shape)fob.getUserData()).isWithAlpha() ) {
136                 for( int i=0; i<nGrads; i++ ) {
137                     fob.writeByte( ratios[i] );
138                     colors[i].writeRGBA(fob);
139                 }
140             } else {
141                 for( int i=0; i<nGrads; i++ ) {
142                     fob.writeByte( ratios[i] );
143                     colors[i].writeRGB(fob);
144                 }
145             }
146         } else {
147             for( int i=0; i<nGrads; i++ ) {
148                 fob.writeByte( ratios[i] );
149                 colors[i].write(fob);
150             }
151         }
152     }
153
154     public void printContent( PrintStream JavaDoc out, String JavaDoc indent ) {
155         out.println( indent+"Gradient: num="+nGrads );
156         for( int i=0; i<nGrads; i++ ) {
157             out.println( indent+" ratio["+i+"]="+ratios[i] );
158             out.print( indent+" color["+i+"]=" ); colors[i].printContent(out, "");
159         }
160     }
161
162     protected FlashItem copyInto( FlashItem item, ScriptCopier copier ) {
163         ((Gradient)item).nGrads = nGrads;
164         int[] r = new int[8];
165         System.arraycopy(ratios, 0, r, 0, 8);
166         Color[] c = new Color[8];
167         for( int i=0; i<nGrads; i++ ) {
168             c[i] = (Color) colors[i].getCopy(copier);
169         }
170         ((Gradient)item).ratios = r;
171         ((Gradient)item).colors = c;
172         return item;
173     }
174
175     public FlashItem getCopy( ScriptCopier copier ) {
176         return copyInto( new Gradient(), copier );
177     }
178 }
179
Popular Tags