~ubuntu-branches/ubuntu/quantal/libwpd/quantal

« back to all changes in this revision

Viewing changes to src/lib/WP6GraphicsBoxStylePacket.cpp

  • Committer: Package Import Robot
  • Author(s): Rene Engelhard
  • Date: 2011-11-29 23:31:13 UTC
  • mfrom: (10.1.8 sid)
  • Revision ID: package-import@ubuntu.com-20111129233113-g69767blnzxs6pee
Tags: 0.9.4-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1
2
/* libwpd
2
3
 * Copyright (C) 2007 Fridrich Strba (fridrich.strba@bluewin.ch)
3
4
 * Copyright (C) 2007 Novell Inc. (http://www.novell.com)
4
 
 *  
 
5
 *
5
6
 * This library is free software; you can redistribute it and/or
6
7
 * modify it under the terms of the GNU Library General Public
7
8
 * License as published by the Free Software Foundation; either
19
20
 * For further information visit http://libwpd.sourceforge.net
20
21
 */
21
22
 
22
 
/* "This product is not manufactured, approved, or supported by 
 
23
/* "This product is not manufactured, approved, or supported by
23
24
 * Corel Corporation or Corel Corporation Limited."
24
25
 */
25
26
#include <string.h>
27
28
#include "WP6GraphicsBoxStylePacket.h"
28
29
#include "WP6Parser.h"
29
30
 
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),
33
34
        m_boxStyleName(),
34
35
        m_generalPositioningFlags(0x00),
35
36
        m_horizontalPositioningFlags(0x00),
36
37
        m_horizontalOffset(0),
 
38
        m_leftColumn(0x00),
 
39
        m_rightColumn(0x00),
37
40
        m_verticalPositioningFlags(0x00),
38
41
        m_verticalOffset(0),
39
42
        m_widthFlags(0x00),
46
49
        m_contentPreserveAspectRatio(true),
47
50
        m_nativeWidth(0),
48
51
        m_nativeHeight(0)
49
 
{       
 
52
{
50
53
        _read(input, encryption, dataOffset, dataSize);
51
54
}
52
55
 
116
119
        }
117
120
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Style name: %s\n", m_boxStyleName.cstr()));
118
121
        input->seek(tmpSizeOfBoxNameLibraryData + tmpBoxNameLibraryDataPosition, WPX_SEEK_SET);
119
 
                
 
122
 
120
123
        // Skipping box counter data
121
124
 
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);
125
 
        
 
128
 
126
129
        // Reading Box positioning data
127
 
        
 
130
 
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));
136
139
 
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));
140
 
                
 
142
                       m_horizontalPositioningFlags & 0x03, (m_horizontalPositioningFlags & 0x1C) >> 2));
 
143
 
141
144
        m_horizontalOffset = (int16_t)readU16(input, encryption);
142
145
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Horizontal Offset (%i)\n", m_horizontalOffset));
143
 
        
 
146
 
144
147
        m_leftColumn = readU8(input, encryption);
145
148
        m_rightColumn = readU8(input, encryption);
146
149
 
147
150
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Horizontal position (between columns %i and %i)\n", m_leftColumn, m_rightColumn));
148
 
        
 
151
 
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));
152
155
 
153
156
        m_verticalOffset = (int16_t)readU16(input, encryption);
154
157
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Vertical Offset (%i)\n", m_verticalOffset));
155
 
        
 
158
 
156
159
        m_widthFlags = readU8(input, encryption) & 0x01;
157
160
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Width Flags: 0x%.2x\n", m_widthFlags));
158
 
        
 
161
 
159
162
        m_width = readU16(input, encryption);
160
163
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Width: %i\n", m_width));
161
 
        
 
164
 
162
165
        m_heightFlags = readU8(input, encryption) & 0x01;
163
166
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Height Flags: 0x%.2x\n", m_heightFlags));
164
 
        
 
167
 
165
168
        m_height = readU16(input, encryption);
166
169
        WPD_DEBUG_MSG(("WP6GraphicsBoxStylePacket -- Box Height: %i\n", m_height));
167
170
 
168
171
        input->seek(tmpSizeOfBoxPositioningData + tmpBoxPositioningDataPosition, WPX_SEEK_SET);
169
 
        
 
172
 
170
173
        // Reading box content data
171
 
        
 
174
 
172
175
        uint16_t tmpSizeOfBoxContentData = readU16(input, encryption);
173
176
        unsigned tmpBoxContentDataPosition = input->tell();
174
177
        input->seek(1, WPX_SEEK_CUR);
175
 
        
 
178
 
176
179
        m_contentType = readU8(input, encryption);
177
180
        uint8_t tmpContentAlignFlags = readU8(input, encryption);
178
181
        m_contentHAlign = tmpContentAlignFlags & 0x03;
181
184
 
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"));
185
 
                
 
187
                       m_contentHAlign, m_contentVAlign, m_contentPreserveAspectRatio ? "true" : "false"));
 
188
 
186
189
        switch (m_contentType)
187
190
        {
188
191
        case 0x03:
 
192
        {
 
193
                uint16_t tmpGraphicsRenderingInfoSize = readU16(input, encryption);
 
194
                unsigned tmpGraphicsRenderingInfoBegin = input->tell();
 
195
                if (0x01 == (readU8(input, encryption) & 0xFF))
189
196
                {
190
 
                        uint16_t tmpGraphicsRenderingInfoSize = readU16(input, encryption);
191
 
                        unsigned tmpGraphicsRenderingInfoBegin = input->tell();
192
 
                        if (0x01 == (readU8(input, encryption) & 0xFF))
193
 
                        {
194
 
                                m_nativeWidth = readU16(input, encryption);
195
 
                                m_nativeHeight = readU16(input, encryption);
196
 
                        }
197
 
                        else
198
 
                                input->seek(4, WPX_SEEK_CUR);
 
197
                        m_nativeWidth = readU16(input, encryption);
 
198
                        m_nativeHeight = readU16(input, encryption);
 
199
                }
 
200
                else
 
201
                        input->seek(4, WPX_SEEK_CUR);
199
202
 
200
 
                        input->seek(tmpGraphicsRenderingInfoSize + tmpGraphicsRenderingInfoBegin, WPX_SEEK_CUR);
201
 
                }
202
 
                break;
 
203
                input->seek(tmpGraphicsRenderingInfoSize + tmpGraphicsRenderingInfoBegin, WPX_SEEK_CUR);
 
204
        }
 
205
        break;
203
206
        default:
204
207
                break;
205
208
        }
206
 
        
 
209
 
207
210
        input->seek(tmpSizeOfBoxContentData + tmpBoxContentDataPosition, WPX_SEEK_SET);
208
 
        
 
211
 
209
212
        // Reading box caption data
210
 
        
 
213
 
211
214
        uint16_t tmpSizeOfBoxCaptionData = readU16(input, encryption);
212
215
        unsigned tmpBoxCaptionDataPosition = input->tell();
213
 
        
 
216
 
214
217
        input->seek(tmpSizeOfBoxCaptionData + tmpBoxCaptionDataPosition, WPX_SEEK_SET);
215
 
        
 
218
 
216
219
        // Reading box border data
217
 
        
 
220
 
218
221
        uint16_t tmpSizeOfBoxBorderData = readU16(input, encryption);
219
222
        unsigned tmpBoxBorderDataPosition = input->tell();
220
 
        
 
223
 
221
224
        input->seek(tmpSizeOfBoxBorderData + tmpBoxBorderDataPosition, WPX_SEEK_SET);
222
 
        
 
225
 
223
226
        // Reading box fill data
224
 
        
 
227
 
225
228
        uint16_t tmpSizeOfBoxFillData = readU16(input, encryption);
226
229
        unsigned tmpBoxFillDataPosition = input->tell();
227
 
        
 
230
 
228
231
        input->seek(tmpSizeOfBoxFillData + tmpBoxFillDataPosition, WPX_SEEK_SET);
229
 
        
 
232
 
230
233
        // Reading box wrapping data
231
 
        
 
234
 
232
235
        uint16_t tmpSizeOfBoxWrappingData = readU16(input, encryption);
233
236
        unsigned tmpBoxWrappingDataPosition = input->tell();
234
 
        
 
237
 
235
238
        input->seek(tmpSizeOfBoxWrappingData + tmpBoxWrappingDataPosition, WPX_SEEK_SET);
236
 
        
 
239
 
237
240
        // Reading box hypertext data
238
 
        
 
241
 
239
242
        uint16_t tmpSizeOfBoxHypertextData = readU16(input, encryption);
240
243
        unsigned tmpBoxHypertextDataPosition = input->tell();
241
 
        
 
244
 
242
245
        input->seek(tmpSizeOfBoxHypertextData + tmpBoxHypertextDataPosition, WPX_SEEK_SET);
243
 
        
 
246
 
244
247
        // Dumping hexadecimally the rest of the packet
245
 
        
 
248
 
246
249
        long tmpCurrentPosition = input->tell();
247
250
        if ((long)tmpStartOfBoxData + (long)tmpSizeOfBoxData - tmpCurrentPosition < 0)
248
251
                throw FileException();
260
263
#endif
261
264
 
262
265
}
 
266
/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */