View Javadoc

1   // Copyright 2001, FreeHEP.
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   * GradientFill TAG.
14   * 
15   * @author Mark Donszelmann
16   * @version $Id: GradientFill.java 10367 2007-01-22 19:26:48Z duns $
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 }