package com.kreative.paint.io;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.image.renderable.RenderableImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import com.kreative.paint.document.draw.*;
import com.kreative.paint.draw.*;
import com.kreative.paint.geom.*;
import com.kreative.paint.geom.draw.*;
import com.kreative.paint.material.shape.PowerShape;
import com.kreative.paint.material.sprite.ColorTransform;
import com.kreative.paint.material.sprite.Sprite;
import com.kreative.paint.powerbrush.BrushSettings;
import com.kreative.paint.util.Bitmap;
public class CKPObjectsSerializer extends Serializer {
private static final int TYPE_BRUSH_STROKE_DO = fcc("dBSt");
private static final int TYPE_CROP_MARK_DO = fcc("dCMk");
private static final int TYPE_GRID_DO = fcc("dGrd");
private static final int TYPE_GROUP_DO = fcc("dGrp");
private static final int TYPE_IMAGE_DO = fcc("dImg");
private static final int TYPE_PENCIL_STROKE_DO = fcc("dPSt");
private static final int TYPE_PERSPECTIVE_GRID_DO = fcc("dPGr");
private static final int TYPE_POWERBRUSH_STROKE_DO = fcc("dPBS");
private static final int TYPE_QUICKSHADOW_DO = fcc("dQSh");
private static final int TYPE_SHAPE_DO = fcc("dShp");
private static final int TYPE_TEXT_DO = fcc("dTxt");
private static final int TYPE_THREEDBOX_DO = fcc("d3DB");
private static final int TYPE_LINE_DO = fcc("dLin");
private static final int TYPE_RECTANGLE_DO = fcc("dRec");
private static final int TYPE_ROUND_RECT_DO = fcc("dRRe");
private static final int TYPE_ELLIPSE_DO = fcc("dEll");
private static final int TYPE_ARC_DO = fcc("dArc");
private static final int TYPE_QUAD_CURVE_DO = fcc("dQua");
private static final int TYPE_CUBIC_CURVE_DO = fcc("dCub");
private static final int TYPE_POLYGON_DO = fcc("dPly");
private static final int TYPE_PATH_DO = fcc("dPth");
private static final int TYPE_BITMAP_DO = fcc("dBmp");
private static final int TYPE_CYCLOID_DO = fcc("dCyc");
private static final int TYPE_FLOWER_DO = fcc("dFlw");
private static final int TYPE_POWERSHAPE_DO = fcc("dPSh");
private static final int TYPE_REG_POLY_DO = fcc("dRPl");
private static final int TYPE_RIGHT_ARC_DO = fcc("dArR");
private static final int TYPE_SPIRAL_DO = fcc("dSpi");
private static final int IDO_TYPE_IMAGE = fcc("gnrl");
private static final int IDO_TYPE_BUFFERED_IMAGE = fcc("bfrd");
private static final int IDO_TYPE_RENDERABLE_IMAGE = fcc("rdbl");
private static final int IDO_TYPE_RENDERED_IMAGE = fcc("rdrd");
protected void loadRecognizedTypesAndClasses() {
addTypeAndClass(TYPE_BRUSH_STROKE_DO, 2, BrushStrokeDrawObject.class);
addTypeAndClass(TYPE_CROP_MARK_DO, 2, CropMarkDrawObject.class);
addTypeAndClass(TYPE_GRID_DO, 2, GridDrawObject.class);
addTypeAndClass(TYPE_GROUP_DO, 2, GroupDrawObject.class);
addTypeAndClass(TYPE_IMAGE_DO, 2, ImageDrawObject.class);
addTypeAndClass(TYPE_PENCIL_STROKE_DO, 1, PencilStrokeDrawObject.class);
addTypeAndClass(TYPE_PERSPECTIVE_GRID_DO, 2, PerspectiveGridDrawObject.class);
addTypeAndClass(TYPE_POWERBRUSH_STROKE_DO, 1, PowerBrushStrokeDrawObject.class);
addTypeAndClass(TYPE_QUICKSHADOW_DO, 2, ShadowSettings.class);
addTypeAndClass(TYPE_SHAPE_DO, 2, ShapeDrawObject.class);
addTypeAndClass(TYPE_TEXT_DO, 2, TextDrawObject.class);
addTypeAndClass(TYPE_THREEDBOX_DO, 1, ThreeDBoxDrawObject.class);
addTypeAndClass(TYPE_LINE_DO, 1, ShapeDrawObject.Line.class);
addTypeAndClass(TYPE_RECTANGLE_DO, 1, ShapeDrawObject.Rectangle.class);
addTypeAndClass(TYPE_ROUND_RECT_DO, 1, ShapeDrawObject.RoundRectangle.class);
addTypeAndClass(TYPE_ELLIPSE_DO, 1, ShapeDrawObject.Ellipse.class);
addTypeAndClass(TYPE_ARC_DO, 1, ShapeDrawObject.Arc.class);
addTypeAndClass(TYPE_QUAD_CURVE_DO, 1, ShapeDrawObject.QuadCurve.class);
addTypeAndClass(TYPE_CUBIC_CURVE_DO, 1, ShapeDrawObject.CubicCurve.class);
addTypeAndClass(TYPE_POLYGON_DO, 1, ShapeDrawObject.Polygon.class);
addTypeAndClass(TYPE_PATH_DO, 1, PathDrawObject.class);
addTypeAndClass(TYPE_BITMAP_DO, 1, BitmapDrawObject.class);
addTypeAndClass(TYPE_CYCLOID_DO, 1, CycloidDrawObject.class);
addTypeAndClass(TYPE_FLOWER_DO, 1, FlowerDrawObject.class);
addTypeAndClass(TYPE_POWERSHAPE_DO, 1, PowerShapeDrawObject.class);
addTypeAndClass(TYPE_REG_POLY_DO, 1, RegularPolygonDrawObject.class);
addTypeAndClass(TYPE_RIGHT_ARC_DO, 1, RightArcDrawObject.class);
addTypeAndClass(TYPE_SPIRAL_DO, 1, SpiralDrawObject.class);
}
public void serializeObject(Object o, DataOutputStream stream) throws IOException {
if (o instanceof BrushStrokeDrawObject) {
BrushStrokeDrawObject v = (BrushStrokeDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
Sprite s = v.getBrush();
SerializationManager.writeObject(s.getRawImage(), stream);
stream.writeShort(s.getHotspotX());
stream.writeShort(s.getHotspotY());
stream.writeShort(s.getColorTransform().intValue);
SerializationManager.writeObject(v.getPath(), stream);
} else if (o instanceof CropMarkDrawObject) {
CropMarkDrawObject v = (CropMarkDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
stream.writeDouble(v.getX1());
stream.writeDouble(v.getY1());
stream.writeDouble(v.getX2());
stream.writeDouble(v.getY2());
stream.writeInt(v.getHorizDivisions());
stream.writeInt(v.getVertDivisions());
} else if (o instanceof GridDrawObject) {
GridDrawObject v = (GridDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
Rectangle2D b = v.getGridBounds();
stream.writeDouble(b.getX());
stream.writeDouble(b.getY());
stream.writeDouble(b.getWidth());
stream.writeDouble(b.getHeight());
stream.writeInt(v.getHorizGridType());
stream.writeDouble(v.getHorizGridSpacing());
stream.writeInt(v.getVertGridType());
stream.writeDouble(v.getVertGridSpacing());
} else if (o instanceof GroupDrawObject) {
GroupDrawObject v = (GroupDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
stream.writeDouble(v.getX());
stream.writeDouble(v.getY());
stream.writeDouble(v.getWidth());
stream.writeDouble(v.getHeight());
List<DrawObject> objects = v.getObjects();
stream.writeInt(objects.size());
for (DrawObject d : objects) {
SerializationManager.writeObject(d, stream);
}
} else if (o instanceof ImageDrawObject) {
ImageDrawObject v = (ImageDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
stream.writeDouble(v.getX());
stream.writeDouble(v.getY());
stream.writeDouble(v.getWidth());
stream.writeDouble(v.getHeight());
BufferedImage bi = v.getImage();
SerializationManager.writeObject(bi, stream);
} else if (o instanceof PencilStrokeDrawObject) {
PencilStrokeDrawObject v = (PencilStrokeDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getPath(), stream);
} else if (o instanceof PerspectiveGridDrawObject) {
PerspectiveGridDrawObject v = (PerspectiveGridDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
Rectangle2D b = v.getGridBounds();
stream.writeDouble(b.getX());
stream.writeDouble(b.getY());
stream.writeDouble(b.getWidth());
stream.writeDouble(b.getHeight());
stream.writeInt(v.getGridWidthTop());
stream.writeInt(v.getGridWidthBottom());
stream.writeInt(v.getGridHeight());
} else if (o instanceof PowerBrushStrokeDrawObject) {
PowerBrushStrokeDrawObject v = (PowerBrushStrokeDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getBrush(), stream);
SerializationManager.writeObject(v.getPath(), stream);
} else if (o instanceof ShadowSettings) {
ShadowSettings v = (ShadowSettings)o;
stream.writeInt(v.shadowType);
stream.writeInt(v.shadowOpacity);
stream.writeInt(v.xOffset);
stream.writeInt(v.yOffset);
} else if (o instanceof TextDrawObject) {
TextDrawObject v = (TextDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
stream.writeDouble(v.getX());
stream.writeDouble(v.getY());
stream.writeDouble(v.getWrapWidth());
stream.writeInt(v.getCursorStart());
stream.writeInt(v.getCursorEnd());
stream.writeUTF(v.getText());
} else if (o instanceof ThreeDBoxDrawObject) {
ThreeDBoxDrawObject v = (ThreeDBoxDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
stream.writeDouble(v.getX());
stream.writeDouble(v.getY());
stream.writeDouble(v.getWidth());
stream.writeDouble(v.getHeight());
stream.writeDouble(v.getDX());
stream.writeDouble(v.getDY());
} else if (o instanceof ShapeDrawObject.Line) {
ShapeDrawObject.Line v = (ShapeDrawObject.Line)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Line2D s = v.getShape();
stream.writeDouble(s.getX1());
stream.writeDouble(s.getY1());
stream.writeDouble(s.getX2());
stream.writeDouble(s.getY2());
} else if (o instanceof ShapeDrawObject.Rectangle) {
ShapeDrawObject.Rectangle v = (ShapeDrawObject.Rectangle)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Rectangle2D s = v.getShape();
stream.writeDouble(s.getX());
stream.writeDouble(s.getY());
stream.writeDouble(s.getWidth());
stream.writeDouble(s.getHeight());
} else if (o instanceof ShapeDrawObject.RoundRectangle) {
ShapeDrawObject.RoundRectangle v = (ShapeDrawObject.RoundRectangle)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
RoundRectangle2D s = v.getShape();
stream.writeDouble(s.getX());
stream.writeDouble(s.getY());
stream.writeDouble(s.getWidth());
stream.writeDouble(s.getHeight());
stream.writeDouble(s.getArcWidth());
stream.writeDouble(s.getArcHeight());
} else if (o instanceof ShapeDrawObject.Ellipse) {
ShapeDrawObject.Ellipse v = (ShapeDrawObject.Ellipse)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Ellipse2D s = v.getShape();
stream.writeDouble(s.getX());
stream.writeDouble(s.getY());
stream.writeDouble(s.getWidth());
stream.writeDouble(s.getHeight());
} else if (o instanceof ShapeDrawObject.Arc) {
ShapeDrawObject.Arc v = (ShapeDrawObject.Arc)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Arc2D s = v.getShape();
stream.writeDouble(s.getX());
stream.writeDouble(s.getY());
stream.writeDouble(s.getWidth());
stream.writeDouble(s.getHeight());
stream.writeDouble(s.getAngleStart());
stream.writeDouble(s.getAngleExtent());
stream.writeInt(s.getArcType());
} else if (o instanceof ShapeDrawObject.QuadCurve) {
ShapeDrawObject.QuadCurve v = (ShapeDrawObject.QuadCurve)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
QuadCurve2D s = v.getShape();
stream.writeDouble(s.getX1());
stream.writeDouble(s.getY1());
stream.writeDouble(s.getCtrlX());
stream.writeDouble(s.getCtrlY());
stream.writeDouble(s.getX2());
stream.writeDouble(s.getY2());
} else if (o instanceof ShapeDrawObject.CubicCurve) {
ShapeDrawObject.CubicCurve v = (ShapeDrawObject.CubicCurve)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
CubicCurve2D s = v.getShape();
stream.writeDouble(s.getX1());
stream.writeDouble(s.getY1());
stream.writeDouble(s.getCtrlX1());
stream.writeDouble(s.getCtrlY1());
stream.writeDouble(s.getCtrlX2());
stream.writeDouble(s.getCtrlY2());
stream.writeDouble(s.getX2());
stream.writeDouble(s.getY2());
} else if (o instanceof ShapeDrawObject.Polygon) {
ShapeDrawObject.Polygon v = (ShapeDrawObject.Polygon)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
int n = v.getPointCount();
stream.writeInt(n);
for (int i = 0; i < n; i++) {
stream.writeDouble(v.getPointX(i));
stream.writeDouble(v.getPointY(i));
}
stream.writeBoolean(v.isClosed());
} else if (o instanceof PathDrawObject) {
PathDrawObject v = (PathDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
SerializationManager.writeObject(v.getPath(), stream);
} else if (o instanceof BitmapDrawObject) {
BitmapDrawObject v = (BitmapDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
SerializationManager.writeObject(v.getShape(), stream);
} else if (o instanceof CycloidDrawObject) {
CycloidDrawObject v = (CycloidDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Cycloid s = v.getShape();
stream.writeDouble(s.getCenterX());
stream.writeDouble(s.getCenterY());
stream.writeDouble(s.getEndpointX());
stream.writeDouble(s.getEndpointY());
stream.writeDouble(s.getR());
stream.writeDouble(s.getr());
stream.writeDouble(s.getd());
stream.writeInt(s.getBegin());
stream.writeInt(s.getEnd());
stream.writeInt(s.getSmoothness());
stream.writeBoolean(s.isEpicycloid());
} else if (o instanceof FlowerDrawObject) {
FlowerDrawObject v = (FlowerDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Flower s = v.getShape();
stream.writeDouble(s.getCenterX());
stream.writeDouble(s.getCenterY());
stream.writeDouble(s.getEndpointX());
stream.writeDouble(s.getEndpointY());
stream.writeDouble(s.getWidth());
stream.writeInt(s.getPetals());
stream.writeInt(s.getSmoothness());
stream.writeBoolean(s.getIncludeCenter());
} else if (o instanceof PowerShapeDrawObject) {
PowerShapeDrawObject v = (PowerShapeDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
SerializationManager.writeObject(v.getPowerShape(), stream);
stream.writeDouble(v.getX());
stream.writeDouble(v.getY());
stream.writeDouble(v.getWidth());
stream.writeDouble(v.getHeight());
} else if (o instanceof RegularPolygonDrawObject) {
RegularPolygonDrawObject v = (RegularPolygonDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
RegularPolygon s = v.getShape();
SerializationManager.writeObject(s.getCenterInternal(), stream);
SerializationManager.writeObject(s.getFirstVertexInternal(), stream);
SerializationManager.writeObject(s.getSecondVertexInternal(), stream);
stream.writeInt(s.getSides());
stream.writeInt(s.getSkips());
} else if (o instanceof RightArcDrawObject) {
RightArcDrawObject v = (RightArcDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
RightArc s = v.getShape();
stream.writeDouble(s.getX());
stream.writeDouble(s.getY());
stream.writeDouble(s.getWidth());
stream.writeDouble(s.getHeight());
} else if (o instanceof SpiralDrawObject) {
SpiralDrawObject v = (SpiralDrawObject)o;
SerializationManager.writeObject(v.getPaintSettings(), stream);
SerializationManager.writeObject(v.getTransform(), stream);
stream.writeBoolean(!v.isVisible());
stream.writeBoolean(v.isLocked());
stream.writeBoolean(v.isSelected());
stream.writeByte(0);
SerializationManager.writeObject(v.getShadowSettings(), stream);
Spiral s = v.getShape();
stream.writeDouble(s.getCenterX());
stream.writeDouble(s.getCenterY());
stream.writeDouble(s.getEndpointX());
stream.writeDouble(s.getEndpointY());
stream.writeDouble(s.getSpacing());
stream.writeInt(s.getSides());
stream.writeBoolean(s.getSpokes());
}
}
public Object deserializeObject(int type, int version, DataInputStream stream) throws IOException {
if (type == TYPE_BRUSH_STROKE_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
BufferedImage raw;
int hx, hy;
ColorTransform ctx;
if (version < 2) {
Object tmp = SerializationManager.readObject(stream);
raw = (tmp instanceof BufferedImage) ? (BufferedImage)tmp : ((Bitmap)tmp).getImage();
hx = raw.getWidth() / 2;
hy = raw.getHeight() / 2;
ctx = ColorTransform.ALL;
} else {
raw = (BufferedImage)SerializationManager.readObject(stream);
hx = stream.readShort();
hy = stream.readShort();
ctx = new ColorTransform(stream.readShort());
}
Sprite br = new Sprite(raw, hx, hy, ctx);
Object path = SerializationManager.readObject(stream);
BrushStrokeDrawObject o = (path instanceof Path)
? new BrushStrokeDrawObject(ps, (Path)path, br)
: new BrushStrokeDrawObject(ps, (Shape)path, br);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_CROP_MARK_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
double x1 = (version < 2) ? stream.readFloat() : stream.readDouble();
double y1 = (version < 2) ? stream.readFloat() : stream.readDouble();
double x2 = (version < 2) ? stream.readFloat() : stream.readDouble();
double y2 = (version < 2) ? stream.readFloat() : stream.readDouble();
int hd = stream.readInt();
int vd = stream.readInt();
CropMarkDrawObject o = new CropMarkDrawObject(ps, x1, y1, x2, y2, hd, vd);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_GRID_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
double x = (version < 2) ? stream.readFloat() : stream.readDouble();
double y = (version < 2) ? stream.readFloat() : stream.readDouble();
double w = (version < 2) ? stream.readFloat() : stream.readDouble();
double h = (version < 2) ? stream.readFloat() : stream.readDouble();
int hgt = stream.readInt();
double hgs = (version < 2) ? stream.readFloat() : stream.readDouble();
int vgt = stream.readInt();
double vgs = (version < 2) ? stream.readFloat() : stream.readDouble();
GridDrawObject o = new GridDrawObject(ps, x, y, w, h, hgt, hgs, vgt, vgs);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_GROUP_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
/* PaintSettings ps = (PaintSettings) */ SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
if (version < 2) {
List<DrawObject> objects = new ArrayList<DrawObject>();
int n = stream.readInt();
for (int i = 0; i < n; i++) {
objects.add((DrawObject)SerializationManager.readObject(stream));
}
GroupDrawObject gr = new GroupDrawObject(objects);
gr.setTransform(tx);
gr.setVisible(vis);
gr.setLocked(lock);
gr.setSelected(sel);
return gr;
} else {
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
List<DrawObject> objects = new ArrayList<DrawObject>();
int n = stream.readInt();
for (int i = 0; i < n; i++) {
objects.add((DrawObject)SerializationManager.readObject(stream));
}
GroupDrawObject gr = new GroupDrawObject(objects, x, y, w, h);
gr.setTransform(tx);
gr.setVisible(vis);
gr.setLocked(lock);
gr.setSelected(sel);
return gr;
}
} else if (type == TYPE_IMAGE_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
if (version < 2) {
int bx = stream.readInt();
int by = stream.readInt();
int bw = stream.readInt();
int bh = stream.readInt();
int ix = stream.readInt();
int iy = stream.readInt();
int iw = stream.readInt();
int ih = stream.readInt();
int t = stream.readInt();
if (t == IDO_TYPE_IMAGE) {
Image img = (Image)SerializationManager.readObject(stream);
ImageDrawObject o = ImageDrawObject.forGraphicsDrawImage(
ps, img,
bx, by, bx + bw, by + bh,
ix, iy, ix + iw, iy + ih
);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (t == IDO_TYPE_BUFFERED_IMAGE) {
BufferedImage img = (BufferedImage)SerializationManager.readObject(stream);
BufferedImageOp op = (BufferedImageOp)SerializationManager.readObject(stream);
ImageDrawObject o = ImageDrawObject.forGraphicsDrawImage(ps, img, op, bx, by);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (t == IDO_TYPE_RENDERABLE_IMAGE) {
RenderableImage img = (RenderableImage)SerializationManager.readObject(stream);
ImageDrawObject o = ImageDrawObject.forGraphicsDrawRenderableImage(ps, img, null);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (t == IDO_TYPE_RENDERED_IMAGE) {
RenderedImage img = (RenderedImage)SerializationManager.readObject(stream);
ImageDrawObject o = ImageDrawObject.forGraphicsDrawRenderedImage(ps, img, null);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else {
return null;
}
} else {
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
BufferedImage image = (BufferedImage)SerializationManager.readObject(stream);
ImageDrawObject o = new ImageDrawObject(ps, image, x, y, w, h);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
}
} else if (type == TYPE_PENCIL_STROKE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
Object path = SerializationManager.readObject(stream);
PencilStrokeDrawObject o = (path instanceof Path)
? new PencilStrokeDrawObject(ps, (Path)path)
: new PencilStrokeDrawObject(ps, (Shape)path);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_PERSPECTIVE_GRID_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
double x = (version < 2) ? stream.readFloat() : stream.readDouble();
double y = (version < 2) ? stream.readFloat() : stream.readDouble();
double w = (version < 2) ? stream.readFloat() : stream.readDouble();
double h = (version < 2) ? stream.readFloat() : stream.readDouble();
int nt = stream.readInt();
int nb = stream.readInt();
int nh = stream.readInt();
PerspectiveGridDrawObject o = new PerspectiveGridDrawObject(ps,x,y,w,h,nt,nb,nh);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_POWERBRUSH_STROKE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
BrushSettings br = (BrushSettings)SerializationManager.readObject(stream);
Object path = SerializationManager.readObject(stream);
PowerBrushStrokeDrawObject o = (path instanceof Path)
? new PowerBrushStrokeDrawObject(ps, (Path)path, br)
: new PowerBrushStrokeDrawObject(ps, (Shape)path, br);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_QUICKSHADOW_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
if (version < 2) {
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
int st = stream.readInt();
int so = stream.readInt();
int xo = stream.readInt();
int yo = stream.readInt();
Shape sh = (Shape)SerializationManager.readObject(stream);
ShapeDrawObject o = drawObjectForShape(ps, sh);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(new ShadowSettings(st, so, xo, yo));
return o;
} else {
int st = stream.readInt();
int so = stream.readInt();
int xo = stream.readInt();
int yo = stream.readInt();
return new ShadowSettings(st, so, xo, yo);
}
} else if (type == TYPE_SHAPE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
Shape sh = (Shape)SerializationManager.readObject(stream);
ShapeDrawObject o = drawObjectForShape(ps, sh);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_TEXT_DO) {
if (version < 1 || version > 2) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
double x = (version < 2) ? stream.readFloat() : stream.readDouble();
double y = (version < 2) ? stream.readFloat() : stream.readDouble();
double w = (version < 2) ? stream.readFloat() : stream.readDouble();
int cs = stream.readInt();
int ce = stream.readInt();
String t = stream.readUTF();
TextDrawObject o = new TextDrawObject(ps, x, y, w, t);
o.setCursor(cs, ce);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_THREEDBOX_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
double dx = stream.readDouble();
double dy = stream.readDouble();
ThreeDBoxDrawObject o = new ThreeDBoxDrawObject(ps, x, y, w, h, dx, dy);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
return o;
} else if (type == TYPE_LINE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x1 = stream.readDouble();
double y1 = stream.readDouble();
double x2 = stream.readDouble();
double y2 = stream.readDouble();
ShapeDrawObject.Line o = new ShapeDrawObject.Line(ps, x1, y1, x2, y2);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_RECTANGLE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
ShapeDrawObject.Rectangle o = new ShapeDrawObject.Rectangle(ps, x, y, w, h);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_ROUND_RECT_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
double rx = stream.readDouble();
double ry = stream.readDouble();
ShapeDrawObject.RoundRectangle o = new ShapeDrawObject.RoundRectangle(ps, x, y, w, h, rx, ry);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_ELLIPSE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
ShapeDrawObject.Ellipse o = new ShapeDrawObject.Ellipse(ps, x, y, w, h);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_ARC_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
double as = stream.readDouble();
double ae = stream.readDouble();
int at = stream.readInt();
ShapeDrawObject.Arc o = new ShapeDrawObject.Arc(ps, x, y, w, h, as, ae, ArcType.forAWTValue(at));
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_QUAD_CURVE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x1 = stream.readDouble();
double y1 = stream.readDouble();
double cx = stream.readDouble();
double cy = stream.readDouble();
double x2 = stream.readDouble();
double y2 = stream.readDouble();
ShapeDrawObject.QuadCurve o = new ShapeDrawObject.QuadCurve(ps, x1, y1, cx, cy, x2, y2);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_CUBIC_CURVE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x1 = stream.readDouble();
double y1 = stream.readDouble();
double cx1 = stream.readDouble();
double cy1 = stream.readDouble();
double cx2 = stream.readDouble();
double cy2 = stream.readDouble();
double x2 = stream.readDouble();
double y2 = stream.readDouble();
ShapeDrawObject.CubicCurve o = new ShapeDrawObject.CubicCurve(ps, x1, y1, cx1, cy1, cx2, cy2, x2, y2);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_POLYGON_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
int n = stream.readInt();
double[] x = new double[n];
double[] y = new double[n];
for (int i = 0; i < n; i++) {
x[i] = stream.readDouble();
y[i] = stream.readDouble();
}
boolean closed = stream.readBoolean();
ShapeDrawObject.Polygon o = new ShapeDrawObject.Polygon(ps, x, y, n, closed);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_PATH_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
Path path = (Path)SerializationManager.readObject(stream);
PathDrawObject o = new PathDrawObject(ps, path);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_BITMAP_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
BitmapShape s = (BitmapShape)SerializationManager.readObject(stream);
BitmapDrawObject o = new BitmapDrawObject(ps, s.getBitmap(), s.getX(), s.getY(), s.getWidth(), s.getHeight());
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_CYCLOID_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double cx = stream.readDouble();
double cy = stream.readDouble();
double ex = stream.readDouble();
double ey = stream.readDouble();
double R = stream.readDouble();
double r = stream.readDouble();
double d = stream.readDouble();
int b = stream.readInt();
int e = stream.readInt();
int s = stream.readInt();
boolean epi = stream.readBoolean();
CycloidDrawObject o = new CycloidDrawObject(ps, epi, s, b, e, R, r, d, cx, cy, ex, ey);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_FLOWER_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double cx = stream.readDouble();
double cy = stream.readDouble();
double ex = stream.readDouble();
double ey = stream.readDouble();
double w = stream.readDouble();
int p = stream.readInt();
int s = stream.readInt();
boolean ic = stream.readBoolean();
FlowerDrawObject o = new FlowerDrawObject(ps, p, w, s, ic, cx, cy, ex, ey);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_POWERSHAPE_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
PowerShape shape = (PowerShape)SerializationManager.readObject(stream);
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
PowerShapeDrawObject o = new PowerShapeDrawObject(ps, shape, x, y, w, h);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_REG_POLY_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
Point2D c = (Point2D)SerializationManager.readObject(stream);
Point2D v1 = (Point2D)SerializationManager.readObject(stream);
Point2D v2 = (Point2D)SerializationManager.readObject(stream);
int sides = stream.readInt();
int skips = stream.readInt();
RegularPolygonDrawObject o = (c != null) ?
new RegularPolygonDrawObject(ps, sides, skips, c.getX(), c.getY(), v1.getX(), v1.getY(), true) :
new RegularPolygonDrawObject(ps, sides, skips, v1.getX(), v1.getY(), v2.getX(), v2.getY(), false);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_RIGHT_ARC_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double x = stream.readDouble();
double y = stream.readDouble();
double w = stream.readDouble();
double h = stream.readDouble();
RightArcDrawObject o = new RightArcDrawObject(ps, x, y, w, h);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else if (type == TYPE_SPIRAL_DO) {
if (version != 1) throw new IOException("Invalid version number.");
PaintSettings ps = (PaintSettings)SerializationManager.readObject(stream);
AffineTransform tx = (AffineTransform)SerializationManager.readObject(stream);
boolean vis = !stream.readBoolean();
boolean lock = stream.readBoolean();
boolean sel = stream.readBoolean();
stream.readByte();
ShadowSettings shadow = (ShadowSettings)SerializationManager.readObject(stream);
double cx = stream.readDouble();
double cy = stream.readDouble();
double ex = stream.readDouble();
double ey = stream.readDouble();
double spacing = stream.readDouble();
int sides = stream.readInt();
boolean spokes = stream.readBoolean();
SpiralDrawObject o = new SpiralDrawObject(ps, sides, spacing, spokes, cx, cy, ex, ey);
o.setTransform(tx);
o.setVisible(vis);
o.setLocked(lock);
o.setSelected(sel);
o.setShadowSettings(shadow);
return o;
} else {
return null;
}
}
private static ShapeDrawObject drawObjectForShape(PaintSettings ps, Shape s) {
if (s instanceof BitmapShape) {
BitmapShape b = (BitmapShape)s;
return new BitmapDrawObject(ps, b.getBitmap(), b.getX(), b.getY(), b.getWidth(), b.getHeight());
} else if (s instanceof Cycloid) {
Cycloid c = (Cycloid)s;
return new CycloidDrawObject(ps, c.isEpicycloid(), c.getSmoothness(), c.getBegin(), c.getEnd(), c.getR(), c.getr(), c.getd(), c.getCenterX(), c.getCenterY(), c.getEndpointX(), c.getEndpointY());
} else if (s instanceof Flower) {
Flower f = (Flower)s;
return new FlowerDrawObject(ps, f.getPetals(), f.getWidth(), f.getSmoothness(), f.getIncludeCenter(), f.getCenterX(), f.getCenterY(), f.getEndpointX(), f.getEndpointY());
} else if (s instanceof RegularPolygon) {
RegularPolygon r = (RegularPolygon)s;
Point2D c = r.getCenterInternal();
Point2D v1 = r.getFirstVertexInternal();
Point2D v2 = r.getSecondVertexInternal();
return (c != null) ?
new RegularPolygonDrawObject(ps, r.getSides(), r.getSkips(), c.getX(), c.getY(), v1.getX(), v1.getY(), true) :
new RegularPolygonDrawObject(ps, r.getSides(), r.getSkips(), v1.getX(), v1.getY(), v2.getX(), v2.getY(), false);
} else if (s instanceof RightArc) {
RightArc r = (RightArc)s;
return new RightArcDrawObject(ps, r.getX(), r.getY(), r.getWidth(), r.getHeight());
} else if (s instanceof ScaledShape) {
ScaledShape ss = (ScaledShape)s;
PowerShape shape = (PowerShape)ss.getOriginalShape();
return new PowerShapeDrawObject(ps, shape, ss.getX(), ss.getY(), ss.getWidth(), ss.getHeight());
} else if (s instanceof Spiral) {
Spiral ss = (Spiral)s;
return new SpiralDrawObject(ps, ss.getSides(), ss.getSpacing(), ss.getSpokes(), ss.getCenterX(), ss.getCenterY(), ss.getEndpointX(), ss.getEndpointY());
} else {
return ShapeDrawObject.forShape(ps, s);
}
}
}