1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/*
2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Copyright 2008 CoreMedia AG, Hamburg
3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the License);
5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * you may not use this file except in compliance with the License.
6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * You may obtain a copy of the License at
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *     http://www.apache.org/licenses/LICENSE-2.0
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * distributed under the License is distributed on an AS IS BASIS,
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * See the License for the specific language governing permissions and
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * limitations under the License.
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.coremedia.iso.boxes.sampleentry;
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader;
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter;
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.boxes.Box;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.IOException;
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer;
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/**
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Entry type for timed text samples defined in the timed text specification (ISO/IEC 14496-17).
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class TextSampleEntry extends SampleEntry {
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static final String TYPE1 = "tx3g";
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static final String TYPE_ENCRYPTED = "enct";
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/*  class TextSampleEntry() extends SampleEntry ('tx3g') {
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    unsigned int(32)  displayFlags;
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    signed int(8)     horizontal-justification;
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    signed int(8)     vertical-justification;
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    unsigned int(8)   background-color-rgba[4];
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    BoxRecord         default-text-box;
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    StyleRecord       default-style;
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    FontTableBox      font-table;
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu  }
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu  */
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long displayFlags; // 32 bits
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int horizontalJustification; // 8 bit
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int verticalJustification;  // 8 bit
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int[] backgroundColorRgba = new int[4]; // 4 bytes
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private BoxRecord boxRecord = new BoxRecord();
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private StyleRecord styleRecord = new StyleRecord();
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public TextSampleEntry(String type) {
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        super(type);
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void _parseDetails(ByteBuffer content) {
59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        _parseReservedAndDataReferenceIndex(content);
60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        displayFlags = IsoTypeReader.readUInt32(content);
61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        horizontalJustification = IsoTypeReader.readUInt8(content);
62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        verticalJustification = IsoTypeReader.readUInt8(content);
63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        backgroundColorRgba = new int[4];
64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        backgroundColorRgba[0] = IsoTypeReader.readUInt8(content);
65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        backgroundColorRgba[1] = IsoTypeReader.readUInt8(content);
66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        backgroundColorRgba[2] = IsoTypeReader.readUInt8(content);
67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        backgroundColorRgba[3] = IsoTypeReader.readUInt8(content);
68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        boxRecord = new BoxRecord();
69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        boxRecord.parse(content);
70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        styleRecord = new StyleRecord();
72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        styleRecord.parse(content);
73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        _parseChildBoxes(content);
74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected long getContentSize() {
78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long contentSize = 18;
79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        contentSize += boxRecord.getSize();
80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        contentSize += styleRecord.getSize();
81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        for (Box boxe : boxes) {
82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            contentSize += boxe.getSize();
83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return contentSize;
85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public String toString() {
88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return "TextSampleEntry";
89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected void getContent(ByteBuffer byteBuffer) {
93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        _writeReservedAndDataReferenceIndex(byteBuffer);
94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt32(byteBuffer, displayFlags);
95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt8(byteBuffer, horizontalJustification);
96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt8(byteBuffer, verticalJustification);
97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[0]);
98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[1]);
99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[2]);
100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[3]);
101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        boxRecord.getContent(byteBuffer);
102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        styleRecord.getContent(byteBuffer);
103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        _writeChildBoxes(byteBuffer);
105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public BoxRecord getBoxRecord() {
108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return boxRecord;
109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setBoxRecord(BoxRecord boxRecord) {
112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.boxRecord = boxRecord;
113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public StyleRecord getStyleRecord() {
116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return styleRecord;
117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setStyleRecord(StyleRecord styleRecord) {
120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.styleRecord = styleRecord;
121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean isScrollIn() {
124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return (displayFlags & 0x00000020) == 0x00000020;
125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setScrollIn(boolean scrollIn) {
128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (scrollIn) {
129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags |= 0x00000020;
130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags &= ~0x00000020;
132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean isScrollOut() {
136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return (displayFlags & 0x00000040) == 0x00000040;
137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setScrollOut(boolean scrollOutIn) {
140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (scrollOutIn) {
141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags |= 0x00000040;
142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags &= ~0x00000040;
144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean isScrollDirection() {
148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return (displayFlags & 0x00000180) == 0x00000180;
149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setScrollDirection(boolean scrollOutIn) {
152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (scrollOutIn) {
153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags |= 0x00000180;
154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags &= ~0x00000180;
156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean isContinuousKaraoke() {
160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return (displayFlags & 0x00000800) == 0x00000800;
161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setContinuousKaraoke(boolean continuousKaraoke) {
164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (continuousKaraoke) {
165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags |= 0x00000800;
166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags &= ~0x00000800;
168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean isWriteTextVertically() {
172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return (displayFlags & 0x00020000) == 0x00020000;
173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setWriteTextVertically(boolean writeTextVertically) {
176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (writeTextVertically) {
177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags |= 0x00020000;
178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags &= ~0x00020000;
180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean isFillTextRegion() {
185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return (displayFlags & 0x00040000) == 0x00040000;
186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setFillTextRegion(boolean fillTextRegion) {
189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (fillTextRegion) {
190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags |= 0x00040000;
191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            displayFlags &= ~0x00040000;
193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getHorizontalJustification() {
198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return horizontalJustification;
199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setHorizontalJustification(int horizontalJustification) {
202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.horizontalJustification = horizontalJustification;
203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getVerticalJustification() {
206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return verticalJustification;
207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setVerticalJustification(int verticalJustification) {
210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.verticalJustification = verticalJustification;
211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int[] getBackgroundColorRgba() {
214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return backgroundColorRgba;
215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setBackgroundColorRgba(int[] backgroundColorRgba) {
218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.backgroundColorRgba = backgroundColorRgba;
219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static class BoxRecord {
222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int top;
223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int left;
224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int bottom;
225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int right;
226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void parse(ByteBuffer in) {
228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            top = IsoTypeReader.readUInt16(in);
229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            left = IsoTypeReader.readUInt16(in);
230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            bottom = IsoTypeReader.readUInt16(in);
231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            right = IsoTypeReader.readUInt16(in);
232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void getContent(ByteBuffer bb)  {
235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, top);
236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, left);
237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, bottom);
238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, right);
239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public int getSize() {
242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return 8;
243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    /*
247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    class FontRecord {
248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu	unsigned int(16) 	font-ID;
249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu	unsigned int(8)	font-name-length;
250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu	unsigned int(8)	font[font-name-length];
251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu     */
253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    /*
256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   aligned(8) class StyleRecord {
257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   unsigned int(16) 	startChar;
258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   unsigned int(16)	endChar;
259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   unsigned int(16)	font-ID;
260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   unsigned int(8)	face-style-flags;
261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   unsigned int(8)	font-size;
262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu   unsigned int(8)	text-color-rgba[4];
263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    */
265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static class StyleRecord {
266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int startChar;
267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int endChar;
268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int fontId;
269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int faceStyleFlags;
270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int fontSize;
271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int[] textColor = new int[]{0xff, 0xff, 0xff, 0xff};
272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void parse(ByteBuffer in) {
274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            startChar = IsoTypeReader.readUInt16(in);
275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            endChar = IsoTypeReader.readUInt16(in);
276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            fontId = IsoTypeReader.readUInt16(in);
277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            faceStyleFlags = IsoTypeReader.readUInt8(in);
278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            fontSize = IsoTypeReader.readUInt8(in);
279dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            textColor = new int[4];
280dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            textColor[0] = IsoTypeReader.readUInt8(in);
281dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            textColor[1] = IsoTypeReader.readUInt8(in);
282dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            textColor[2] = IsoTypeReader.readUInt8(in);
283dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            textColor[3] = IsoTypeReader.readUInt8(in);
284dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
285dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
286dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
287dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void getContent(ByteBuffer bb) {
288dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, startChar);
289dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, endChar);
290dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt16(bb, fontId);
291dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt8(bb, faceStyleFlags);
292dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt8(bb, fontSize);
293dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt8(bb, textColor[0]);
294dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt8(bb, textColor[1]);
295dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt8(bb, textColor[2]);
296dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt8(bb, textColor[3]);
297dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
298dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
299dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public int getSize() {
300dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return 12;
301dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
302dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
303dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
304dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
305dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
306