lib

kowmfreadprivate.h
1/* This file is part of the KDE libraries
2 * Copyright (c) 1998 Stefan Taferner
3 * 2001/2003 thierry lorthiois (lorthioist@wanadoo.fr)
4 * With the help of WMF documentation by Caolan Mc Namara
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19*/
20#ifndef _KOWMFREADPRIVATE_H_
21#define _KOWMFREADPRIVATE_H_
22
23#include <tqpen.h>
24#include <tqcolor.h>
25#include <tqfont.h>
26#include <tqrect.h>
27#include <tqregion.h>
28#include <tqbuffer.h>
29#include <tqstring.h>
30
31#include "kowmfstruct.h"
32#include "kowmfstack.h"
33
34class KoWmfRead;
35
40
41class KoWmfReadPrivate
42{
43public:
44 KoWmfReadPrivate();
45 virtual ~KoWmfReadPrivate();
46
50 bool load( const TQByteArray& array );
51
56 bool play( KoWmfRead* readKwmf );
57
58
59 /* Metafile painter methods */
60
62 void setWindowOrg( TQ_UINT32 size, TQDataStream& stream );
64 void setWindowExt( TQ_UINT32 size, TQDataStream& stream );
66 void ScaleWindowExt( TQ_UINT32, TQDataStream& stream );
68 void OffsetWindowOrg( TQ_UINT32, TQDataStream& stream );
69
70 /****************** Drawing *******************/
72 void lineTo( TQ_UINT32 size, TQDataStream& stream );
74 void moveTo( TQ_UINT32 size, TQDataStream& stream );
76 void ellipse( TQ_UINT32 size, TQDataStream& stream );
78 void polygon( TQ_UINT32 size, TQDataStream& stream );
80 void polyPolygon( TQ_UINT32 size, TQDataStream& stream );
82 void polyline( TQ_UINT32 size, TQDataStream& stream );
84 void rectangle( TQ_UINT32 size, TQDataStream& stream );
86 void roundRect( TQ_UINT32 size, TQDataStream& stream );
88 void arc( TQ_UINT32 size, TQDataStream& stream );
90 void chord( TQ_UINT32 size, TQDataStream& stream );
92 void pie( TQ_UINT32 size, TQDataStream& stream );
94 void setPolyFillMode( TQ_UINT32 size, TQDataStream& stream );
96 void setBkColor( TQ_UINT32 size, TQDataStream& stream );
98 void setBkMode( TQ_UINT32 size, TQDataStream& stream );
100 void setPixel( TQ_UINT32 size, TQDataStream& stream );
102 void setRop( TQ_UINT32 size, TQDataStream& stream );
104 void saveDC( TQ_UINT32 size, TQDataStream& stream );
106 void restoreDC( TQ_UINT32 size, TQDataStream& stream );
108 void intersectClipRect( TQ_UINT32 size, TQDataStream& stream );
110 void excludeClipRect( TQ_UINT32 size, TQDataStream& stream );
111
112 /****************** Text *******************/
114 void setTextColor( TQ_UINT32 size, TQDataStream& stream );
116 void setTextAlign( TQ_UINT32 size, TQDataStream& stream );
118 void textOut( TQ_UINT32 size, TQDataStream& stream );
119 void extTextOut( TQ_UINT32 size, TQDataStream& stream );
120
121 /****************** Bitmap *******************/
122 void SetStretchBltMode( TQ_UINT32, TQDataStream& stream );
124 void dibBitBlt( TQ_UINT32 size, TQDataStream& stream );
126 void dibStretchBlt( TQ_UINT32 size, TQDataStream& stream );
127 void stretchDib( TQ_UINT32 size, TQDataStream& stream );
129 void dibCreatePatternBrush( TQ_UINT32 size, TQDataStream& stream );
130
131 /****************** Object handle *******************/
133 void selectObject( TQ_UINT32 size, TQDataStream& stream );
135 void deleteObject( TQ_UINT32 size, TQDataStream& stream );
137 void createEmptyObject();
139 void createBrushIndirect( TQ_UINT32 size, TQDataStream& stream );
141 void createPenIndirect( TQ_UINT32 size, TQDataStream& stream );
143 void createFontIndirect( TQ_UINT32 size, TQDataStream& stream );
144
145 /****************** misc *******************/
147 void end( TQ_UINT32, TQDataStream& stream );
148
150 static TQ_UINT16 calcCheckSum( WmfPlaceableHeader* );
151
152 // function unimplemented
153 void notyet( TQ_UINT32, TQDataStream& stream );
154 void region( TQ_UINT32, TQDataStream& stream );
155 void palette( TQ_UINT32, TQDataStream& stream );
156 void escape( TQ_UINT32, TQDataStream& stream );
157 void setRelAbs( TQ_UINT32, TQDataStream& stream );
158 void setMapMode( TQ_UINT32, TQDataStream& stream );
159 void extFloodFill( TQ_UINT32, TQDataStream& stream );
160 void startDoc( TQ_UINT32, TQDataStream& stream );
161 void startPage( TQ_UINT32, TQDataStream& stream );
162 void endDoc( TQ_UINT32, TQDataStream& stream );
163 void endPage( TQ_UINT32, TQDataStream& stream );
164 void resetDC( TQ_UINT32, TQDataStream& stream );
165 void bitBlt( TQ_UINT32, TQDataStream& stream );
166 void setDibToDev( TQ_UINT32, TQDataStream& stream );
167 void createBrush( TQ_UINT32, TQDataStream& stream );
168 void createPatternBrush( TQ_UINT32, TQDataStream& stream );
169 void createBitmap( TQ_UINT32, TQDataStream& stream );
170 void createBitmapIndirect( TQ_UINT32, TQDataStream& stream );
171 void createPalette( TQ_UINT32, TQDataStream& stream );
172 void createRegion( TQ_UINT32, TQDataStream& stream );
173
174private:
175 //-----------------------------------------------------------------------------
176 // Utilities and conversion Wmf -> TQt
177
179 bool addHandle( KoWmfHandle* );
180 void deleteHandle( int );
181
183 void pointArray( TQDataStream& stream, TQPointArray& pa );
184
186 TQColor qtColor( TQ_UINT32 color ) const
187 { return TQColor( color & 0xFF, (color>>8) & 0xFF, (color>>16) & 0xFF ); }
188
190 void xyToAngle( int xStart, int yStart, int xEnd, int yEnd, int& angle, int& aLength );
191
193 TQt::RasterOp winToTQtRaster( TQ_UINT16 param ) const;
194 TQt::RasterOp winToTQtRaster( TQ_UINT32 param ) const;
195
197 bool dibToBmp( TQImage& bmp, TQDataStream& stream, TQ_UINT32 size);
198
199
200public:
201 // state of the WMF
202 bool mValid;
203 bool mStandard;
204 bool mPlaceable;
205 bool mEnhanced;
206
208 TQRect mBBox; // placeable file : this is the header
209 // standard file : this is the value in setWindowOrg and setWindowExt
211 int mDpi;
212
215
216private:
217 // the output
218 KoWmfRead *mReadWmf;
219
220 // current coordinate != mBBox
221 TQRect mWindow;
222 // current state of the drawing
223 TQColor mTextColor;
224 TQ_UINT16 mTextAlign;
225 int mTextRotation;
226 bool mWinding;
227
228 // memory allocation for WMF file
229 TQBuffer* mBuffer;
230 int mOffsetFirstRecord;
231
232 // stack of object handle
233 KoWmfHandle** mObjHandleTab;
234 // number of object on the stack
235 int mNbrObject;
236 bool mStackOverflow;
237};
238
242 static const struct KoWmfFunc {
243 void ( KoWmfReadPrivate::*method )( TQ_UINT32, TQDataStream& );
244 } koWmfFunc[] = {
245 { &KoWmfReadPrivate::end }, // 0
248 { &KoWmfReadPrivate::setMapMode }, // 3
249 { &KoWmfReadPrivate::setRop }, // 4
250 { &KoWmfReadPrivate::setRelAbs }, // 5
252 { &KoWmfReadPrivate::SetStretchBltMode }, // 7
253 { &KoWmfReadPrivate::notyet }, // 8
258 { &KoWmfReadPrivate::notyet }, // 13
259 { &KoWmfReadPrivate::notyet }, // 14
261 { &KoWmfReadPrivate::notyet }, // 16
262 { &KoWmfReadPrivate::notyet }, // 17
263 { &KoWmfReadPrivate::notyet }, // 18
264 { &KoWmfReadPrivate::lineTo }, // 19
265 { &KoWmfReadPrivate::moveTo }, // 20
268 { &KoWmfReadPrivate::arc }, // 23
269 { &KoWmfReadPrivate::ellipse }, // 24
270 { &KoWmfReadPrivate::notyet }, // 25
271 { &KoWmfReadPrivate::pie }, // 26
274 { &KoWmfReadPrivate::notyet }, // 29
275 { &KoWmfReadPrivate::saveDC }, // 30
277 { &KoWmfReadPrivate::notyet }, // 32
278 { &KoWmfReadPrivate::textOut }, // 33
279 { &KoWmfReadPrivate::bitBlt }, // 34
280 { &KoWmfReadPrivate::notyet }, // 35
281 { &KoWmfReadPrivate::polygon }, // 36
283 { &KoWmfReadPrivate::escape }, // 38
285 { &KoWmfReadPrivate::region }, // 40
286 { &KoWmfReadPrivate::region }, // 41
287 { &KoWmfReadPrivate::region }, // 42
288 { &KoWmfReadPrivate::region }, // 43
289 { &KoWmfReadPrivate::region }, // 44
292 { 0 }, // 47
293 { &KoWmfReadPrivate::chord }, // 48
294 { &KoWmfReadPrivate::notyet }, // 49
295 { &KoWmfReadPrivate::extTextOut }, // 50
296 { &KoWmfReadPrivate::setDibToDev }, // 51
297 { &KoWmfReadPrivate::palette }, // 52
298 { &KoWmfReadPrivate::palette }, // 53
299 { &KoWmfReadPrivate::palette }, // 54
300 { &KoWmfReadPrivate::palette }, // 55
302 { &KoWmfReadPrivate::palette }, // 57
303 { 0 }, // 58
304 { 0 }, // 59
305 { 0 }, // 60
306 { 0 }, // 61
307 { 0 }, // 62
308 { 0 }, // 63
312 { &KoWmfReadPrivate::stretchDib }, // 67
313 { 0 }, // 68
314 { 0 }, // 69
315 { 0 }, // 70
316 { 0 }, // 71
317 { &KoWmfReadPrivate::extFloodFill }, // 72
318 { 0 }, // 73
319 { 0 }, // 74
320 { 0 }, // 75
321 { &KoWmfReadPrivate::resetDC }, // 76
322 { &KoWmfReadPrivate::startDoc }, // 77
323 { 0 }, // 78
324 { &KoWmfReadPrivate::startPage }, // 79
325 { &KoWmfReadPrivate::endPage }, // 80
326 { 0 }, // 81
327 { 0 }, // 82
328 { 0 }, // 83
329 { 0 }, // 84
330 { 0 }, // 85
331 { 0 }, // 86
332 { 0 }, // 87
333 { 0 }, // 88
334 { 0 }, // 89
335 { 0 }, // 90
336 { 0 }, // 91
337 { 0 }, // 92
338 { 0 }, // 93
339 { &KoWmfReadPrivate::endDoc }, // 94
340 { 0 }, // 95
341 // 0x5F last function until 0xF0
343 { 0 }, // 97
344 { 0 }, // 98
345 { 0 }, // 99
346 { 0 }, // 100
347 { 0 }, // 101
348 { 0 }, // 102
349 { &KoWmfReadPrivate::createPalette }, // 103
350 { &KoWmfReadPrivate::createBrush }, // 104
351 { &KoWmfReadPrivate::createPatternBrush }, // 105
355 { &KoWmfReadPrivate::createBitmapIndirect }, //109
356 { &KoWmfReadPrivate::createBitmap }, // 110
357 { &KoWmfReadPrivate::createRegion } // 111
358 };
359
360
361#endif
362
WMF file allows manipulation on a stack of object.
Definition kowmfstack.h:35
KoWmfReadPrivate allows to read WMF files.
void arc(TQ_UINT32 size, TQDataStream &stream)
draw arc
TQRect mBBox
bounding rectangle
void createEmptyObject()
create an empty object in the object list
void setPixel(TQ_UINT32 size, TQDataStream &stream)
set a pixel
bool load(const TQByteArray &array)
Load WMF file.
void ellipse(TQ_UINT32 size, TQDataStream &stream)
draw ellipse
void moveTo(TQ_UINT32 size, TQDataStream &stream)
move pen to coord
void createFontIndirect(TQ_UINT32 size, TQDataStream &stream)
create a logical font
int mDpi
number of points per inch for the default size
void saveDC(TQ_UINT32 size, TQDataStream &stream)
save device context *‍/
void roundRect(TQ_UINT32 size, TQDataStream &stream)
draw round rectangle
void dibCreatePatternBrush(TQ_UINT32 size, TQDataStream &stream)
create a pattern brush
int mNbrFunc
number of functions to draw (==0 for all)
static TQ_UINT16 calcCheckSum(WmfPlaceableHeader *)
Calculate header checksum.
void createBrushIndirect(TQ_UINT32 size, TQDataStream &stream)
create a logical brush
void rectangle(TQ_UINT32 size, TQDataStream &stream)
draw a rectangle
void dibStretchBlt(TQ_UINT32 size, TQDataStream &stream)
stretches a DIB into a dest location
void chord(TQ_UINT32 size, TQDataStream &stream)
draw chord
void polyline(TQ_UINT32 size, TQDataStream &stream)
draw series of lines
void polygon(TQ_UINT32 size, TQDataStream &stream)
draw polygon
void excludeClipRect(TQ_UINT32 size, TQDataStream &stream)
delete a clipping rectangle of the original region
void end(TQ_UINT32, TQDataStream &stream)
end of meta file
void pie(TQ_UINT32 size, TQDataStream &stream)
draw pie
void deleteObject(TQ_UINT32 size, TQDataStream &stream)
free object handle
void lineTo(TQ_UINT32 size, TQDataStream &stream)
draw line to coord
void createPenIndirect(TQ_UINT32 size, TQDataStream &stream)
create a logical pen
bool play(KoWmfRead *readKwmf)
Plays a metafile in readKwmf and returns true on success.
void selectObject(TQ_UINT32 size, TQDataStream &stream)
activate object handle
void restoreDC(TQ_UINT32 size, TQDataStream &stream)
restore device context
void textOut(TQ_UINT32 size, TQDataStream &stream)
draw text
void OffsetWindowOrg(TQ_UINT32, TQDataStream &stream)
offset in window origin
void setWindowExt(TQ_UINT32 size, TQDataStream &stream)
set window extents
void dibBitBlt(TQ_UINT32 size, TQDataStream &stream)
copies a DIB into a dest location
void ScaleWindowExt(TQ_UINT32, TQDataStream &stream)
scale window extents
void setTextAlign(TQ_UINT32 size, TQDataStream &stream)
set text alignment
void setPolyFillMode(TQ_UINT32 size, TQDataStream &stream)
set polygon fill mode
void polyPolygon(TQ_UINT32 size, TQDataStream &stream)
draw a list of polygons
void setTextColor(TQ_UINT32 size, TQDataStream &stream)
set text color
void setWindowOrg(TQ_UINT32 size, TQDataStream &stream)
set window origin
void setBkColor(TQ_UINT32 size, TQDataStream &stream)
set background pen color
void setRop(TQ_UINT32 size, TQDataStream &stream)
set raster operation mode
void intersectClipRect(TQ_UINT32 size, TQDataStream &stream)
clipping region is the intersection of this region and the original region
void setBkMode(TQ_UINT32 size, TQDataStream &stream)
set background pen mode
KoWmfRead allows the redirection of the actions stored in a WMF file.
Definition kowmfread.h:47
static data