27
28
#include "WP6GraphicsBoxStylePacket.h"
28
29
#include "WP6Parser.h"
30
WP6GraphicsBoxStylePacket::WP6GraphicsBoxStylePacket(WPXInputStream *input, WPXEncryption *encryption, int /* id */, uint32_t dataOffset, uint32_t dataSize):
31
WP6GraphicsBoxStylePacket::WP6GraphicsBoxStylePacket(WPXInputStream *input, WPXEncryption *encryption, int /* id */, uint32_t dataOffset, uint32_t dataSize):
31
32
WP6PrefixDataPacket(input, encryption),
32
33
m_isLibraryStyle(false),
34
35
m_generalPositioningFlags(0x00),
35
36
m_horizontalPositioningFlags(0x00),
36
37
m_horizontalOffset(0),
37
40
m_verticalPositioningFlags(0x00),
38
41
m_verticalOffset(0),
39
42
m_widthFlags(0x00),
117
120
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Style name: %s\n", m_boxStyleName.cstr()));
118
121
input->seek(tmpSizeOfBoxNameLibraryData + tmpBoxNameLibraryDataPosition, WPX_SEEK_SET);
120
123
// Skipping box counter data
122
125
uint16_t tmpSizeOfBoxCounterData = readU16(input, encryption);
123
126
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box counter data\n"));
124
127
input->seek(tmpSizeOfBoxCounterData, WPX_SEEK_CUR);
126
129
// Reading Box positioning data
128
131
uint16_t tmpSizeOfBoxPositioningData = readU16(input, encryption);
129
132
unsigned tmpBoxPositioningDataPosition = input->tell();
130
133
input->seek(1, WPX_SEEK_CUR);
132
135
m_generalPositioningFlags = readU8(input, encryption);
133
136
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Positioning data (general positioning flags: 0x%.2x)\n", m_generalPositioningFlags));
134
137
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Positioning data (anchor value: %i) (page offset bit: %i) (overlap flag: %i) (auto flag: %i)\n",
135
m_generalPositioningFlags & 0x07, (m_generalPositioningFlags & 0x08) >> 3, (m_generalPositioningFlags & 0x10) >> 4, (m_generalPositioningFlags & 0x20) >> 5));
138
m_generalPositioningFlags & 0x07, (m_generalPositioningFlags & 0x08) >> 3, (m_generalPositioningFlags & 0x10) >> 4, (m_generalPositioningFlags & 0x20) >> 5));
137
140
m_horizontalPositioningFlags = readU8(input, encryption);
138
141
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Horizontal position (horizontal alignment type: %i) (horizontal alignment: %i)\n",
139
m_horizontalPositioningFlags & 0x03, (m_horizontalPositioningFlags & 0x1C) >> 2));
142
m_horizontalPositioningFlags & 0x03, (m_horizontalPositioningFlags & 0x1C) >> 2));
141
144
m_horizontalOffset = (int16_t)readU16(input, encryption);
142
145
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Horizontal Offset (%i)\n", m_horizontalOffset));
144
147
m_leftColumn = readU8(input, encryption);
145
148
m_rightColumn = readU8(input, encryption);
147
150
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Horizontal position (between columns %i and %i)\n", m_leftColumn, m_rightColumn));
149
152
m_verticalPositioningFlags = readU8(input, encryption);
150
153
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Vertical position (vertical alignment type: %i) (vertical alignment: %i) (vertical effect: %i)\n",
151
m_verticalPositioningFlags & 0x03, (m_verticalPositioningFlags & 0x1C) >> 2, (m_verticalPositioningFlags & 0x20) >> 5));
154
m_verticalPositioningFlags & 0x03, (m_verticalPositioningFlags & 0x1C) >> 2, (m_verticalPositioningFlags & 0x20) >> 5));
153
156
m_verticalOffset = (int16_t)readU16(input, encryption);
154
157
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Vertical Offset (%i)\n", m_verticalOffset));
156
159
m_widthFlags = readU8(input, encryption) & 0x01;
157
160
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Width Flags: 0x%.2x\n", m_widthFlags));
159
162
m_width = readU16(input, encryption);
160
163
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Width: %i\n", m_width));
162
165
m_heightFlags = readU8(input, encryption) & 0x01;
163
166
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Height Flags: 0x%.2x\n", m_heightFlags));
165
168
m_height = readU16(input, encryption);
166
169
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Height: %i\n", m_height));
168
171
input->seek(tmpSizeOfBoxPositioningData + tmpBoxPositioningDataPosition, WPX_SEEK_SET);
170
173
// Reading box content data
172
175
uint16_t tmpSizeOfBoxContentData = readU16(input, encryption);
173
176
unsigned tmpBoxContentDataPosition = input->tell();
174
177
input->seek(1, WPX_SEEK_CUR);
176
179
m_contentType = readU8(input, encryption);
177
180
uint8_t tmpContentAlignFlags = readU8(input, encryption);
178
181
m_contentHAlign = tmpContentAlignFlags & 0x03;
182
185
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Content Type (%i)\n", m_contentType));
183
186
WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Content Alignment (horizontal: 0x%.2x) (vertical: 0x%.2x) (preserve aspect ratio: %s)\n",
184
m_contentHAlign, m_contentVAlign, m_contentPreserveAspectRatio ? "true" : "false"));
187
m_contentHAlign, m_contentVAlign, m_contentPreserveAspectRatio ? "true" : "false"));
186
189
switch (m_contentType)
193
uint16_t tmpGraphicsRenderingInfoSize = readU16(input, encryption);
194
unsigned tmpGraphicsRenderingInfoBegin = input->tell();
195
if (0x01 == (readU8(input, encryption) & 0xFF))
190
uint16_t tmpGraphicsRenderingInfoSize = readU16(input, encryption);
191
unsigned tmpGraphicsRenderingInfoBegin = input->tell();
192
if (0x01 == (readU8(input, encryption) & 0xFF))
194
m_nativeWidth = readU16(input, encryption);
195
m_nativeHeight = readU16(input, encryption);
198
input->seek(4, WPX_SEEK_CUR);
197
m_nativeWidth = readU16(input, encryption);
198
m_nativeHeight = readU16(input, encryption);
201
input->seek(4, WPX_SEEK_CUR);
200
input->seek(tmpGraphicsRenderingInfoSize + tmpGraphicsRenderingInfoBegin, WPX_SEEK_CUR);
203
input->seek(tmpGraphicsRenderingInfoSize + tmpGraphicsRenderingInfoBegin, WPX_SEEK_CUR);
207
210
input->seek(tmpSizeOfBoxContentData + tmpBoxContentDataPosition, WPX_SEEK_SET);
209
212
// Reading box caption data
211
214
uint16_t tmpSizeOfBoxCaptionData = readU16(input, encryption);
212
215
unsigned tmpBoxCaptionDataPosition = input->tell();
214
217
input->seek(tmpSizeOfBoxCaptionData + tmpBoxCaptionDataPosition, WPX_SEEK_SET);
216
219
// Reading box border data
218
221
uint16_t tmpSizeOfBoxBorderData = readU16(input, encryption);
219
222
unsigned tmpBoxBorderDataPosition = input->tell();
221
224
input->seek(tmpSizeOfBoxBorderData + tmpBoxBorderDataPosition, WPX_SEEK_SET);
223
226
// Reading box fill data
225
228
uint16_t tmpSizeOfBoxFillData = readU16(input, encryption);
226
229
unsigned tmpBoxFillDataPosition = input->tell();
228
231
input->seek(tmpSizeOfBoxFillData + tmpBoxFillDataPosition, WPX_SEEK_SET);
230
233
// Reading box wrapping data
232
235
uint16_t tmpSizeOfBoxWrappingData = readU16(input, encryption);
233
236
unsigned tmpBoxWrappingDataPosition = input->tell();
235
238
input->seek(tmpSizeOfBoxWrappingData + tmpBoxWrappingDataPosition, WPX_SEEK_SET);
237
240
// Reading box hypertext data
239
242
uint16_t tmpSizeOfBoxHypertextData = readU16(input, encryption);
240
243
unsigned tmpBoxHypertextDataPosition = input->tell();
242
245
input->seek(tmpSizeOfBoxHypertextData + tmpBoxHypertextDataPosition, WPX_SEEK_SET);
244
247
// Dumping hexadecimally the rest of the packet
246
249
long tmpCurrentPosition = input->tell();
247
250
if ((long)tmpStartOfBoxData + (long)tmpSizeOfBoxData - tmpCurrentPosition < 0)
248
251
throw FileException();