001: /*
002: * $Id: LineStyle.java,v 1.2 2002/02/15 23:44:28 skavish Exp $
003: *
004: * ==========================================================================
005: *
006: * The JGenerator Software License, Version 1.0
007: *
008: * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
009: *
010: * Redistribution and use in source and binary forms, with or without
011: * modification, are permitted provided that the following conditions are met:
012: *
013: * 1. Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * 2. Redistributions in binary form must reproduce the above copyright
017: * notice, this list of conditions and the following disclaimer in
018: * the documentation and/or other materials provided with the
019: * distribution.
020: *
021: * 3. The end-user documentation included with the redistribution, if
022: * any, must include the following acknowlegement:
023: * "This product includes software developed by Dmitry Skavish
024: * (skavish@usa.net, http://www.flashgap.com/)."
025: * Alternately, this acknowlegement may appear in the software itself,
026: * if and wherever such third-party acknowlegements normally appear.
027: *
028: * 4. The name "The JGenerator" must not be used to endorse or promote
029: * products derived from this software without prior written permission.
030: * For written permission, please contact skavish@usa.net.
031: *
032: * 5. Products derived from this software may not be called "The JGenerator"
033: * nor may "The JGenerator" appear in their names without prior written
034: * permission of Dmitry Skavish.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
040: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: *
049: */
050:
051: package org.openlaszlo.iv.flash.api.shape;
052:
053: import org.openlaszlo.iv.flash.util.*;
054: import org.openlaszlo.iv.flash.api.*;
055: import org.openlaszlo.iv.flash.parser.*;
056: import java.io.PrintStream;
057:
058: /**
059: * A line style represents a width and color of a line.
060: * <P>
061: * Notes:
062: * <OL>
063: * <LI>All lines in SWF have rounded joins and end-caps.
064: * Different join styles and end styles can be simulated with
065: * a very narrow shape that looks identical to the desired stroke.
066: * <LI>SWF has no native support for dashed or dotted line styles.
067: * A dashed line can be simulated by breaking up the path into a series of short lines.
068: * </OL>
069: *
070: * @author Dmitry Skavish
071: */
072: public final class LineStyle extends FlashItem {
073:
074: private int width; // width of this line style
075: private Color color; // color of this line style
076:
077: public LineStyle() {
078: }
079:
080: /**
081: * Creates line style of specified color and width
082: *
083: * @param width width in twixels
084: * @param color line color
085: */
086: public LineStyle(int width, Color color) {
087: setWidth(width);
088: setColor(color);
089: }
090:
091: /**
092: * Returns width of this linestyle.
093: *
094: * @return width of this linestyle in twixels.
095: */
096: public int getWidth() {
097: return width;
098: }
099:
100: /**
101: * Sets width of this linestyle
102: *
103: * @param width width of this linestyle in twixels
104: */
105: public void setWidth(int width) {
106: this .width = width;
107: }
108:
109: /**
110: * Returns color of this linestyle
111: *
112: * @return color of this linestyle
113: */
114: public Color getColor() {
115: return color;
116: }
117:
118: /**
119: * Sets color of this linestyle
120: *
121: * @param color specified color
122: */
123: public void setColor(Color color) {
124: this .color = color;
125: }
126:
127: public static LineStyle parse(Parser p, boolean withAlpha) {
128: int width = p.getUWord();
129: Color color = Color.parse(p, withAlpha);
130: return new LineStyle(width, color);
131: }
132:
133: public void write(FlashOutput fob) {
134: fob.writeWord(width);
135: Shape shape = (Shape) fob.getUserData();
136: if (shape.isWithAlpha()) {
137: color.writeRGBA(fob);
138: } else {
139: color.writeRGB(fob);
140: }
141: }
142:
143: public void printContent(PrintStream out, String indent) {
144: out.print(indent + "LineStyle: width=" + width + " color=");
145: color.printContent(out, "");
146: }
147:
148: protected FlashItem copyInto(FlashItem item, ScriptCopier copier) {
149: ((LineStyle) item).width = width;
150: ((LineStyle) item).color = (Color) color.getCopy(copier);
151: return item;
152: }
153:
154: public FlashItem getCopy(ScriptCopier copier) {
155: return copyInto(new LineStyle(), copier);
156: }
157: }
|