1
2 package org.freehep.graphicsio.emf.gdi;
3
4 import java.awt.Rectangle;
5 import java.io.IOException;
6
7 import org.freehep.graphicsio.emf.EMFConstants;
8 import org.freehep.graphicsio.emf.EMFInputStream;
9 import org.freehep.graphicsio.emf.EMFOutputStream;
10 import org.freehep.graphicsio.emf.EMFTag;
11
12
13
14
15
16
17
18 public class GradientFill extends EMFTag implements EMFConstants {
19
20 private Rectangle bounds;
21
22 private int mode;
23
24 private TriVertex[] vertices;
25
26 private Gradient[] gradients;
27
28 public GradientFill() {
29 super(118, 1);
30 }
31
32 public GradientFill(Rectangle bounds, int mode, TriVertex[] vertices,
33 Gradient[] gradients) {
34 this();
35 this.bounds = bounds;
36 this.mode = mode;
37 this.vertices = vertices;
38 this.gradients = gradients;
39 }
40
41 public EMFTag read(int tagID, EMFInputStream emf, int len)
42 throws IOException {
43
44 Rectangle bounds = emf.readRECTL();
45 TriVertex[] vertices = new TriVertex[emf.readDWORD()];
46 Gradient[] gradients = new Gradient[emf.readDWORD()];
47 int mode = emf.readULONG();
48
49 for (int i = 0; i < vertices.length; i++) {
50 vertices[i] = new TriVertex(emf);
51 }
52 for (int i = 0; i < gradients.length; i++) {
53 if (mode == GRADIENT_FILL_TRIANGLE) {
54 gradients[i] = new GradientTriangle(emf);
55 } else {
56 gradients[i] = new GradientRectangle(emf);
57 }
58 }
59 return new GradientFill(bounds, mode, vertices, gradients);
60 }
61
62 public void write(int tagID, EMFOutputStream emf) throws IOException {
63 emf.writeRECTL(bounds);
64 emf.writeDWORD(vertices.length);
65 emf.writeDWORD(gradients.length);
66 emf.writeULONG(mode);
67 for (int i = 0; i < vertices.length; i++) {
68 vertices[i].write(emf);
69 }
70 for (int i = 0; i < gradients.length; i++) {
71 gradients[i].write(emf);
72 }
73 }
74
75 public String toString() {
76 StringBuffer s = new StringBuffer();
77 s.append(super.toString());
78 s.append("\n");
79 s.append(" bounds: ");
80 s.append(bounds);
81 s.append("\n");
82 s.append(" mode: ");
83 s.append(mode);
84 s.append("\n");
85 for (int i = 0; i < vertices.length; i++) {
86 s.append(" vertex[");
87 s.append(i);
88 s.append("]: ");
89 s.append(vertices[i]);
90 s.append("\n");
91 }
92 for (int i = 0; i < gradients.length; i++) {
93 s.append(" gradient[");
94 s.append(i);
95 s.append("]: ");
96 s.append(gradients[i]);
97 s.append("\n");
98 }
99 return s.toString();
100 }
101 }