View Javadoc

1   // Copyright 2001, FreeHEP.
2   package org.freehep.graphicsio.swf;
3   
4   import java.io.IOException;
5   import java.util.ArrayList;
6   import java.util.List;
7   
8   /**
9    * DefineFont TAG.
10   * 
11   * @author Mark Donszelmann
12   * @author Charles Loomis
13   * @version $Id: DefineFont.java 8584 2006-08-10 23:06:37Z duns $
14   */
15  public class DefineFont extends DefinitionTag {
16  
17      private int character;
18  
19      private List /* SWFShape */shapes;
20  
21      private DefineFontInfo info;
22  
23      public DefineFont(int id) {
24          this();
25          character = id;
26          this.shapes = new ArrayList();
27      }
28  
29      public void add(SWFShape shape) {
30          shapes.add(shape);
31      }
32  
33      public DefineFont() {
34          super(10, 1);
35      }
36  
37      public SWFTag read(int tagID, SWFInputStream swf, int len)
38              throws IOException {
39  
40          DefineFont tag = new DefineFont();
41          tag.character = swf.readUnsignedShort();
42          swf.getDictionary().put(tag.character, tag);
43  
44          int offset0 = swf.readUnsignedShort();
45          int glyphCount = offset0 / 2;
46  
47          // read offsets but ignore them
48          int[] offsets = new int[glyphCount];
49          offsets[0] = offset0;
50          for (int i = 1; i < glyphCount; i++) {
51              offsets[i] = swf.readUnsignedShort();
52          }
53  
54          tag.shapes = new ArrayList();
55          for (int i = 0; i < glyphCount; i++) {
56              tag.shapes.add(new SWFShape(swf));
57          }
58          return tag;
59      }
60  
61      public void write(int tagID, SWFOutputStream swf) throws IOException {
62          swf.writeUnsignedShort(character);
63          swf.pushBuffer();
64          int[] offsets = new int[shapes.size()];
65  
66          for (int i = 0; i < shapes.size(); i++) {
67              offsets[i] = swf.getBufferLength();
68              ((SWFShape) shapes.get(i)).write(swf);
69          }
70  
71          swf.popBuffer();
72          for (int i = 0; i < shapes.size(); i++) {
73              swf.writeUnsignedShort(shapes.size() * 2 + offsets[i]);
74          }
75          swf.append();
76      }
77  
78      public int getGlyphCount() {
79          return shapes.size();
80      }
81  
82      public void setFontInfo(DefineFontInfo info) {
83          this.info = info;
84      }
85  
86      public String toString() {
87          StringBuffer s = new StringBuffer();
88          s.append(super.toString() + "\n");
89          s.append("  character:  " + character + "\n");
90          s.append("  glyphcount: " + shapes.size() + "\n");
91          for (int i = 0; i < shapes.size(); i++) {
92              s.append(shapes.get(i) + "\n");
93          }
94          s.append("  fontInfo: " + info + "\n");
95          return s.toString();
96      }
97  }