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