1
2 package org.freehep.graphicsio.emf.gdi;
3
4 import java.io.IOException;
5 import java.awt.geom.GeneralPath;
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 import org.freehep.graphicsio.emf.EMFRenderer;
12
13
14
15
16
17
18
19 public class SetPolyFillMode extends EMFTag implements EMFConstants {
20
21 private int mode;
22
23 public SetPolyFillMode() {
24 super(19, 1);
25 }
26
27 public SetPolyFillMode(int mode) {
28 this();
29 this.mode = mode;
30 }
31
32 public EMFTag read(int tagID, EMFInputStream emf, int len)
33 throws IOException {
34
35 return new SetPolyFillMode(emf.readDWORD());
36 }
37
38 public void write(int tagID, EMFOutputStream emf) throws IOException {
39 emf.writeDWORD(mode);
40 }
41
42 public String toString() {
43 return super.toString() + "\n mode: " + mode;
44 }
45
46
47
48
49
50
51 public void render(EMFRenderer renderer) {
52 renderer.setWindingRule(getWindingRule(mode));
53 }
54
55
56
57
58
59
60
61
62 private int getWindingRule(int polyFillMode) {
63 if (polyFillMode == EMFConstants.WINDING) {
64 return GeneralPath.WIND_EVEN_ODD;
65 } else if (polyFillMode == EMFConstants.ALTERNATE) {
66 return GeneralPath.WIND_NON_ZERO;
67 } else {
68 return GeneralPath.WIND_EVEN_ODD;
69 }
70 }
71
72 }