1
2 package org.freehep.graphicsio.emf.gdi;
3
4 import java.awt.geom.AffineTransform;
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 import org.freehep.graphicsio.emf.EMFRenderer;
12
13
14
15
16
17
18
19 public class ModifyWorldTransform extends EMFTag implements EMFConstants {
20
21 private AffineTransform transform;
22
23 private int mode;
24
25 public ModifyWorldTransform() {
26 super(36, 1);
27 }
28
29 public ModifyWorldTransform(AffineTransform transform, int mode) {
30 this();
31 this.transform = transform;
32 this.mode = mode;
33 }
34
35 public EMFTag read(int tagID, EMFInputStream emf, int len)
36 throws IOException {
37
38 return new ModifyWorldTransform(
39 emf.readXFORM(),
40 emf.readDWORD());
41 }
42
43 public void write(int tagID, EMFOutputStream emf) throws IOException {
44 emf.writeXFORM(transform);
45 emf.writeDWORD(mode);
46 }
47
48 public String toString() {
49 return super.toString() +
50 "\n transform: " + transform +
51 "\n mode: " + mode;
52 }
53
54
55
56
57
58
59 public void render(EMFRenderer renderer) {
60
61
62
63 if (mode == EMFConstants.MWT_IDENTITY) {
64 if (renderer.getPath() != null) {
65 renderer.setPathTransform(new AffineTransform());
66 } else {
67 renderer.resetTransformation();
68 }
69 }
70
71
72
73
74
75 else if (mode == EMFConstants.MWT_LEFTMULTIPLY) {
76 if (renderer.getPath() != null) {
77 renderer.getPathTransform().concatenate(transform);
78 renderer.transform(transform);
79 } else {
80 renderer.transform(transform);
81 }
82 }
83
84
85
86
87
88 else if (mode != EMFConstants.MWT_RIGHTMULTIPLY) {
89
90
91
92
93
94
95
96
97
98
99
100
101
102 }
103
104
105 else {
106 logger.warning("unsupport transform mode " + toString());
107 }
108 }
109 }