1
2 package org.freehep.graphicsio.emf.gdi;
3
4 import java.awt.Point;
5 import java.awt.Rectangle;
6 import java.io.IOException;
7
8 import org.freehep.graphicsio.emf.EMFInputStream;
9 import org.freehep.graphicsio.emf.EMFOutputStream;
10
11
12
13
14
15
16
17 public class TextW extends Text {
18
19 public TextW(Point pos, String string, int options, Rectangle bounds, int[] widths) {
20 super(pos, string, options, bounds, widths);
21 }
22
23 public static TextW read(EMFInputStream emf) throws IOException {
24 Point pos = emf.readPOINTL();
25 int sLen = emf.readDWORD();
26
27 int options = emf.readDWORD();
28 Rectangle bounds = emf.readRECTL();
29
30
31 String string = new String(emf.readBYTE(2 * sLen), "UTF-16LE");
32 if ((2 * sLen) % 4 != 0)
33 for (int i = 0; i < 4 - (2 * sLen) % 4; i++)
34 emf.readBYTE();
35 int[] widths = new int[sLen];
36 for (int i = 0; i < sLen; i++)
37 widths[i] = emf.readDWORD();
38 return new TextW(pos, string, options, bounds, widths);
39 }
40
41 public void write(EMFOutputStream emf) throws IOException {
42 emf.writePOINTL(pos);
43 emf.writeDWORD(string.length());
44 emf.writeDWORD(8 + 28 + 40);
45 emf.writeDWORD(options);
46 emf.writeRECTL(bounds);
47 int pad = (2 * string.length()) % 4;
48 if (pad > 0)
49 pad = 4 - pad;
50 emf.writeDWORD(8 + 28 + 40 + 2 * string.length() + pad);
51
52
53
54 emf.writeBYTE(string.getBytes("UTF-16LE"));
55 for (int i = 0; i < pad; i++)
56 emf.writeBYTE(0);
57 for (int i = 0; i < string.length(); i++)
58 emf.writeDWORD(widths[i]);
59 }
60
61 public String toString() {
62 StringBuffer widthsS = new StringBuffer();
63 for (int i = 0; i < string.length(); i++) {
64 widthsS.append(",");
65 widthsS.append(widths[i]);
66 }
67 widthsS.append(']');
68 widthsS.setCharAt(0, '[');
69 return " TextW\n" + " pos: " + pos +
70 "\n options: " + options +
71 "\n bounds: " + bounds +
72 "\n string: " + string +
73 "\n widths: " + widthsS;
74 }
75 }