// Copyright 2001, FreeHEP.
package org.freehep.graphicsio.emf.gdi;
import java.awt.Rectangle;
import java.io.IOException;
import org.freehep.graphicsio.emf.EMFConstants;
import org.freehep.graphicsio.emf.EMFInputStream;
import org.freehep.graphicsio.emf.EMFOutputStream;
import org.freehep.graphicsio.emf.EMFTag;
/**
* GradientFill TAG.
*
* @author Mark Donszelmann
* @version $Id: GradientFill.java,v 1.4 2009-08-17 21:44:44 murkle Exp $
*/
public class GradientFill extends EMFTag implements EMFConstants {
private Rectangle bounds;
private int mode;
private TriVertex[] vertices;
private Gradient[] gradients;
public GradientFill() {
super(118, 1);
}
public GradientFill(Rectangle bounds, int mode, TriVertex[] vertices,
Gradient[] gradients) {
this();
this.bounds = bounds;
this.mode = mode;
this.vertices = vertices;
this.gradients = gradients;
}
@Override
public EMFTag read(int tagID, EMFInputStream emf, int len)
throws IOException {
Rectangle bounds = emf.readRECTL();
TriVertex[] vertices = new TriVertex[emf.readDWORD()];
Gradient[] gradients = new Gradient[emf.readDWORD()];
int mode = emf.readULONG();
for (int i = 0; i < vertices.length; i++) {
vertices[i] = new TriVertex(emf);
}
for (int i = 0; i < gradients.length; i++) {
if (mode == GRADIENT_FILL_TRIANGLE) {
gradients[i] = new GradientTriangle(emf);
} else {
gradients[i] = new GradientRectangle(emf);
}
}
GradientFill tag = new GradientFill(bounds, mode, vertices, gradients);
return tag;
}
@Override
public void write(int tagID, EMFOutputStream emf) throws IOException {
emf.writeRECTL(bounds);
emf.writeDWORD(vertices.length);
emf.writeDWORD(gradients.length);
emf.writeULONG(mode);
for (int i = 0; i < vertices.length; i++) {
vertices[i].write(emf);
}
for (int i = 0; i < gradients.length; i++) {
gradients[i].write(emf);
}
}
@Override
public String toString() {
StringBuffer s = new StringBuffer();
s.append(super.toString() + "\n");
s.append(" bounds: " + bounds + "\n");
s.append(" mode: " + mode + "\n");
for (int i = 0; i < vertices.length; i++) {
s.append(" vertex[" + i + "]: " + vertices[i] + "\n");
}
for (int i = 0; i < gradients.length; i++) {
s.append(" gradient[" + i + "]: " + gradients[i] + "\n");
}
return s.toString();
}
}