00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef _KOWMFREADPRIVATE_H_
00021
#define _KOWMFREADPRIVATE_H_
00022
00023
#include <qpen.h>
00024
#include <qcolor.h>
00025
#include <qfont.h>
00026
#include <qrect.h>
00027
#include <qregion.h>
00028
#include <qbuffer.h>
00029
#include <qstring.h>
00030
00031
#include "kowmfstruct.h"
00032
#include "kowmfstack.h"
00033
00034
class KoWmfRead;
00035
00041 class KoWmfReadPrivate
00042 {
00043
public:
00044
KoWmfReadPrivate();
00045
virtual ~
KoWmfReadPrivate();
00046
00050
bool load(
const QByteArray& array );
00051
00056
bool play(
KoWmfRead* readKwmf );
00057
00058
00059
00060
00062
void setWindowOrg( Q_UINT32 size,
QDataStream& stream );
00064
void setWindowExt( Q_UINT32 size,
QDataStream& stream );
00066
void ScaleWindowExt( Q_UINT32,
QDataStream& stream );
00068
void OffsetWindowOrg( Q_UINT32,
QDataStream& stream );
00069
00070
00072
void lineTo( Q_UINT32 size,
QDataStream& stream );
00074
void moveTo( Q_UINT32 size,
QDataStream& stream );
00076
void ellipse( Q_UINT32 size,
QDataStream& stream );
00078
void polygon( Q_UINT32 size,
QDataStream& stream );
00080
void polyPolygon( Q_UINT32 size,
QDataStream& stream );
00082
void polyline( Q_UINT32 size,
QDataStream& stream );
00084
void rectangle( Q_UINT32 size,
QDataStream& stream );
00086
void roundRect( Q_UINT32 size,
QDataStream& stream );
00088
void arc( Q_UINT32 size,
QDataStream& stream );
00090
void chord( Q_UINT32 size,
QDataStream& stream );
00092
void pie( Q_UINT32 size,
QDataStream& stream );
00094
void setPolyFillMode( Q_UINT32 size,
QDataStream& stream );
00096
void setBkColor( Q_UINT32 size,
QDataStream& stream );
00098
void setBkMode( Q_UINT32 size,
QDataStream& stream );
00100
void setPixel( Q_UINT32 size,
QDataStream& stream );
00102
void setRop( Q_UINT32 size,
QDataStream& stream );
00104
void saveDC( Q_UINT32 size,
QDataStream& stream );
00106
void restoreDC( Q_UINT32 size,
QDataStream& stream );
00108
void intersectClipRect( Q_UINT32 size,
QDataStream& stream );
00110
void excludeClipRect( Q_UINT32 size,
QDataStream& stream );
00111
00112
00114
void setTextColor( Q_UINT32 size,
QDataStream& stream );
00116
void setTextAlign( Q_UINT32 size,
QDataStream& stream );
00118
void textOut( Q_UINT32 size,
QDataStream& stream );
00119
void extTextOut( Q_UINT32 size,
QDataStream& stream );
00120
00121
00122
void SetStretchBltMode( Q_UINT32,
QDataStream& stream );
00124
void dibBitBlt( Q_UINT32 size,
QDataStream& stream );
00126
void dibStretchBlt( Q_UINT32 size,
QDataStream& stream );
00127
void stretchDib( Q_UINT32 size,
QDataStream& stream );
00129
void dibCreatePatternBrush( Q_UINT32 size,
QDataStream& stream );
00130
00131
00133
void selectObject( Q_UINT32 size,
QDataStream& stream );
00135
void deleteObject( Q_UINT32 size,
QDataStream& stream );
00137
void createEmptyObject();
00139
void createBrushIndirect( Q_UINT32 size,
QDataStream& stream );
00141
void createPenIndirect( Q_UINT32 size,
QDataStream& stream );
00143
void createFontIndirect( Q_UINT32 size,
QDataStream& stream );
00144
00145
00147
void end( Q_UINT32,
QDataStream& stream );
00148
00150
static Q_UINT16
calcCheckSum( WmfPlaceableHeader* );
00151
00152
00153
void notyet( Q_UINT32,
QDataStream& stream );
00154
void region( Q_UINT32,
QDataStream& stream );
00155
void palette( Q_UINT32,
QDataStream& stream );
00156
void escape( Q_UINT32,
QDataStream& stream );
00157
void setRelAbs( Q_UINT32,
QDataStream& stream );
00158
void setMapMode( Q_UINT32,
QDataStream& stream );
00159
void extFloodFill( Q_UINT32,
QDataStream& stream );
00160
void startDoc( Q_UINT32,
QDataStream& stream );
00161
void startPage( Q_UINT32,
QDataStream& stream );
00162
void endDoc( Q_UINT32,
QDataStream& stream );
00163
void endPage( Q_UINT32,
QDataStream& stream );
00164
void resetDC( Q_UINT32,
QDataStream& stream );
00165
void bitBlt( Q_UINT32,
QDataStream& stream );
00166
void setDibToDev( Q_UINT32,
QDataStream& stream );
00167
void createBrush( Q_UINT32,
QDataStream& stream );
00168
void createPatternBrush( Q_UINT32,
QDataStream& stream );
00169
void createBitmap( Q_UINT32,
QDataStream& stream );
00170
void createBitmapIndirect( Q_UINT32,
QDataStream& stream );
00171
void createPalette( Q_UINT32,
QDataStream& stream );
00172
void createRegion( Q_UINT32,
QDataStream& stream );
00173
00174
private:
00175
00176
00177
00179
bool addHandle(
KoWmfHandle* );
00180
void deleteHandle(
int );
00181
00183
void pointArray(
QDataStream& stream,
QPointArray& pa );
00184
00186
QColor qtColor( Q_UINT32 color )
const
00187
{
return QColor( color & 0xFF, (color>>8) & 0xFF, (color>>16) & 0xFF ); }
00188
00190
void xyToAngle(
int xStart,
int yStart,
int xEnd,
int yEnd,
int& angle,
int& aLength );
00191
00193 Qt::RasterOp winToQtRaster( Q_UINT16 param )
const;
00194 Qt::RasterOp winToQtRaster( Q_UINT32 param )
const;
00195
00197
bool dibToBmp(
QImage& bmp,
QDataStream& stream, Q_UINT32 size);
00198
00199
00200
public:
00201
00202
bool mValid;
00203
bool mStandard;
00204
bool mPlaceable;
00205
bool mEnhanced;
00206
00208 QRect mBBox;
00209
00211 int mDpi;
00212
00214 int mNbrFunc;
00215
00216
private:
00217
00218
KoWmfRead *mReadWmf;
00219
00220
00221
QRect mWindow;
00222
00223
QColor mTextColor;
00224 Q_UINT16 mTextAlign;
00225
int mTextRotation;
00226
bool mWinding;
00227
00228
00229
QBuffer* mBuffer;
00230
int mOffsetFirstRecord;
00231
00232
00233
KoWmfHandle** mObjHandleTab;
00234
00235
int mNbrObject;
00236
bool mStackOverflow;
00237 };
00238
00242 static const struct KoWmfFunc {
00243 void ( KoWmfReadPrivate::*method )( Q_UINT32,
QDataStream& );
00244 } koWmfFunc[] = {
00245 { &KoWmfReadPrivate::end },
00246 { &
KoWmfReadPrivate::setBkColor },
00247 { &
KoWmfReadPrivate::setBkMode },
00248 { &KoWmfReadPrivate::setMapMode },
00249 { &
KoWmfReadPrivate::setRop },
00250 { &KoWmfReadPrivate::setRelAbs },
00251 { &
KoWmfReadPrivate::setPolyFillMode },
00252 { &KoWmfReadPrivate::SetStretchBltMode },
00253 { &KoWmfReadPrivate::notyet },
00254 { &
KoWmfReadPrivate::setTextColor },
00255 { &
KoWmfReadPrivate::ScaleWindowExt },
00256 { &
KoWmfReadPrivate::setWindowOrg },
00257 { &
KoWmfReadPrivate::setWindowExt },
00258 { &KoWmfReadPrivate::notyet },
00259 { &KoWmfReadPrivate::notyet },
00260 { &
KoWmfReadPrivate::OffsetWindowOrg },
00261 { &KoWmfReadPrivate::notyet },
00262 { &KoWmfReadPrivate::notyet },
00263 { &KoWmfReadPrivate::notyet },
00264 { &
KoWmfReadPrivate::lineTo },
00265 { &
KoWmfReadPrivate::moveTo },
00266 { &
KoWmfReadPrivate::excludeClipRect },
00267 { &
KoWmfReadPrivate::intersectClipRect },
00268 { &
KoWmfReadPrivate::arc },
00269 { &
KoWmfReadPrivate::ellipse },
00270 { &KoWmfReadPrivate::notyet },
00271 { &
KoWmfReadPrivate::pie },
00272 { &
KoWmfReadPrivate::rectangle },
00273 { &
KoWmfReadPrivate::roundRect },
00274 { &KoWmfReadPrivate::notyet },
00275 { &
KoWmfReadPrivate::saveDC },
00276 { &
KoWmfReadPrivate::setPixel },
00277 { &KoWmfReadPrivate::notyet },
00278 { &
KoWmfReadPrivate::textOut },
00279 { &KoWmfReadPrivate::bitBlt },
00280 { &KoWmfReadPrivate::notyet },
00281 { &
KoWmfReadPrivate::polygon },
00282 { &
KoWmfReadPrivate::polyline },
00283 { &KoWmfReadPrivate::escape },
00284 { &
KoWmfReadPrivate::restoreDC },
00285 { &KoWmfReadPrivate::region },
00286 { &KoWmfReadPrivate::region },
00287 { &KoWmfReadPrivate::region },
00288 { &KoWmfReadPrivate::region },
00289 { &KoWmfReadPrivate::region },
00290 { &
KoWmfReadPrivate::selectObject },
00291 { &
KoWmfReadPrivate::setTextAlign },
00292 { 0 },
00293 { &
KoWmfReadPrivate::chord },
00294 { &KoWmfReadPrivate::notyet },
00295 { &KoWmfReadPrivate::extTextOut },
00296 { &KoWmfReadPrivate::setDibToDev },
00297 { &KoWmfReadPrivate::palette },
00298 { &KoWmfReadPrivate::palette },
00299 { &KoWmfReadPrivate::palette },
00300 { &KoWmfReadPrivate::palette },
00301 { &
KoWmfReadPrivate::polyPolygon },
00302 { &KoWmfReadPrivate::palette },
00303 { 0 },
00304 { 0 },
00305 { 0 },
00306 { 0 },
00307 { 0 },
00308 { 0 },
00309 { &
KoWmfReadPrivate::dibBitBlt },
00310 { &
KoWmfReadPrivate::dibStretchBlt },
00311 { &
KoWmfReadPrivate::dibCreatePatternBrush },
00312 { &KoWmfReadPrivate::stretchDib },
00313 { 0 },
00314 { 0 },
00315 { 0 },
00316 { 0 },
00317 { &KoWmfReadPrivate::extFloodFill },
00318 { 0 },
00319 { 0 },
00320 { 0 },
00321 { &KoWmfReadPrivate::resetDC },
00322 { &KoWmfReadPrivate::startDoc },
00323 { 0 },
00324 { &KoWmfReadPrivate::startPage },
00325 { &KoWmfReadPrivate::endPage },
00326 { 0 },
00327 { 0 },
00328 { 0 },
00329 { 0 },
00330 { 0 },
00331 { 0 },
00332 { 0 },
00333 { 0 },
00334 { 0 },
00335 { 0 },
00336 { 0 },
00337 { 0 },
00338 { 0 },
00339 { &KoWmfReadPrivate::endDoc },
00340 { 0 },
00341
00342 { &
KoWmfReadPrivate::deleteObject },
00343 { 0 },
00344 { 0 },
00345 { 0 },
00346 { 0 },
00347 { 0 },
00348 { 0 },
00349 { &KoWmfReadPrivate::createPalette },
00350 { &KoWmfReadPrivate::createBrush },
00351 { &KoWmfReadPrivate::createPatternBrush },
00352 { &
KoWmfReadPrivate::createPenIndirect },
00353 { &
KoWmfReadPrivate::createFontIndirect },
00354 { &
KoWmfReadPrivate::createBrushIndirect },
00355 { &KoWmfReadPrivate::createBitmapIndirect },
00356 { &KoWmfReadPrivate::createBitmap },
00357 { &KoWmfReadPrivate::createRegion }
00358 };
00359
00360
00361
#endif
00362