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>
00024 #include <QColor>
00025 #include <QFont>
00026 #include <QRect>
00027 #include <qregion.h>
00028 #include <QBuffer>
00029 #include <QString>
00030
00031 #include <QPolygon>
00032
00033 #include "kowmfstruct.h"
00034 #include "kowmfstack.h"
00035
00036 class KoWmfRead;
00037
00043 class KoWmfReadPrivate
00044 {
00045 public:
00046 KoWmfReadPrivate();
00047 virtual ~KoWmfReadPrivate();
00048
00052 bool load( const QByteArray& array );
00053
00058 bool play( KoWmfRead* readKwmf );
00059
00060
00061
00062
00064 void setWindowOrg( quint32 size, QDataStream& stream );
00066 void setWindowExt( quint32 size, QDataStream& stream );
00068 void ScaleWindowExt( quint32, QDataStream& stream );
00070 void OffsetWindowOrg( quint32, QDataStream& stream );
00071
00072
00074 void lineTo( quint32 size, QDataStream& stream );
00076 void moveTo( quint32 size, QDataStream& stream );
00078 void ellipse( quint32 size, QDataStream& stream );
00080 void polygon( quint32 size, QDataStream& stream );
00082 void polyPolygon( quint32 size, QDataStream& stream );
00084 void polyline( quint32 size, QDataStream& stream );
00086 void rectangle( quint32 size, QDataStream& stream );
00088 void roundRect( quint32 size, QDataStream& stream );
00090 void arc( quint32 size, QDataStream& stream );
00092 void chord( quint32 size, QDataStream& stream );
00094 void pie( quint32 size, QDataStream& stream );
00096 void setPolyFillMode( quint32 size, QDataStream& stream );
00098 void setBkColor( quint32 size, QDataStream& stream );
00100 void setBkMode( quint32 size, QDataStream& stream );
00102 void setPixel( quint32 size, QDataStream& stream );
00104 void setRop( quint32 size, QDataStream& stream );
00106 void saveDC( quint32 size, QDataStream& stream );
00108 void restoreDC( quint32 size, QDataStream& stream );
00110 void intersectClipRect( quint32 size, QDataStream& stream );
00112 void excludeClipRect( quint32 size, QDataStream& stream );
00113
00114
00116 void setTextColor( quint32 size, QDataStream& stream );
00118 void setTextAlign( quint32 size, QDataStream& stream );
00120 void textOut( quint32 size, QDataStream& stream );
00121 void extTextOut( quint32 size, QDataStream& stream );
00122
00123
00124 void SetStretchBltMode( quint32, QDataStream& stream );
00126 void dibBitBlt( quint32 size, QDataStream& stream );
00128 void dibStretchBlt( quint32 size, QDataStream& stream );
00129 void stretchDib( quint32 size, QDataStream& stream );
00131 void dibCreatePatternBrush( quint32 size, QDataStream& stream );
00132
00133
00135 void selectObject( quint32 size, QDataStream& stream );
00137 void deleteObject( quint32 size, QDataStream& stream );
00139 void createEmptyObject();
00141 void createBrushIndirect( quint32 size, QDataStream& stream );
00143 void createPenIndirect( quint32 size, QDataStream& stream );
00145 void createFontIndirect( quint32 size, QDataStream& stream );
00146
00147
00149 void end( quint32, QDataStream& stream );
00150
00152 static quint16 calcCheckSum( WmfPlaceableHeader* );
00153
00154
00155 void notyet( quint32, QDataStream& stream );
00156 void region( quint32, QDataStream& stream );
00157 void palette( quint32, QDataStream& stream );
00158 void escape( quint32, QDataStream& stream );
00159 void setRelAbs( quint32, QDataStream& stream );
00160 void setMapMode( quint32, QDataStream& stream );
00161 void extFloodFill( quint32, QDataStream& stream );
00162 void startDoc( quint32, QDataStream& stream );
00163 void startPage( quint32, QDataStream& stream );
00164 void endDoc( quint32, QDataStream& stream );
00165 void endPage( quint32, QDataStream& stream );
00166 void resetDC( quint32, QDataStream& stream );
00167 void bitBlt( quint32, QDataStream& stream );
00168 void setDibToDev( quint32, QDataStream& stream );
00169 void createBrush( quint32, QDataStream& stream );
00170 void createPatternBrush( quint32, QDataStream& stream );
00171 void createBitmap( quint32, QDataStream& stream );
00172 void createBitmapIndirect( quint32, QDataStream& stream );
00173 void createPalette( quint32, QDataStream& stream );
00174 void createRegion( quint32, QDataStream& stream );
00175
00176 private:
00177
00178
00179
00181 bool addHandle( KoWmfHandle* );
00182 void deleteHandle( int );
00183
00185 void pointArray( QDataStream& stream, QPolygon& pa );
00186
00188 QColor qtColor( quint32 color ) const
00189 { return QColor( color & 0xFF, (color>>8) & 0xFF, (color>>16) & 0xFF ); }
00190
00192 void xyToAngle( int xStart, int yStart, int xEnd, int yEnd, int& angle, int& aLength );
00193
00195 QPainter::CompositionMode winToQtComposition( quint16 param ) const;
00196 QPainter::CompositionMode winToQtComposition( quint32 param ) const;
00197
00199 bool dibToBmp( QImage& bmp, QDataStream& stream, quint32 size);
00200
00201
00202 public:
00203
00204 bool mValid;
00205 bool mStandard;
00206 bool mPlaceable;
00207 bool mEnhanced;
00208
00210 QRect mBBox;
00211
00213 int mDpi;
00214
00216 int mNbrFunc;
00217
00218 private:
00219
00220 KoWmfRead *mReadWmf;
00221
00222
00223 QRect mWindow;
00224
00225 QColor mTextColor;
00226 quint16 mTextAlign;
00227 int mTextRotation;
00228 bool mWinding;
00229
00230
00231 QBuffer* mBuffer;
00232 int mOffsetFirstRecord;
00233
00234
00235 KoWmfHandle** mObjHandleTab;
00236
00237 int mNbrObject;
00238 bool mStackOverflow;
00239 };
00240
00244 static const struct KoWmfFunc {
00245 void ( KoWmfReadPrivate::*method )( quint32, QDataStream& );
00246 } koWmfFunc[] = {
00247 { &KoWmfReadPrivate::end },
00248 { &KoWmfReadPrivate::setBkColor },
00249 { &KoWmfReadPrivate::setBkMode },
00250 { &KoWmfReadPrivate::setMapMode },
00251 { &KoWmfReadPrivate::setRop },
00252 { &KoWmfReadPrivate::setRelAbs },
00253 { &KoWmfReadPrivate::setPolyFillMode },
00254 { &KoWmfReadPrivate::SetStretchBltMode },
00255 { &KoWmfReadPrivate::notyet },
00256 { &KoWmfReadPrivate::setTextColor },
00257 { &KoWmfReadPrivate::ScaleWindowExt },
00258 { &KoWmfReadPrivate::setWindowOrg },
00259 { &KoWmfReadPrivate::setWindowExt },
00260 { &KoWmfReadPrivate::notyet },
00261 { &KoWmfReadPrivate::notyet },
00262 { &KoWmfReadPrivate::OffsetWindowOrg },
00263 { &KoWmfReadPrivate::notyet },
00264 { &KoWmfReadPrivate::notyet },
00265 { &KoWmfReadPrivate::notyet },
00266 { &KoWmfReadPrivate::lineTo },
00267 { &KoWmfReadPrivate::moveTo },
00268 { &KoWmfReadPrivate::excludeClipRect },
00269 { &KoWmfReadPrivate::intersectClipRect },
00270 { &KoWmfReadPrivate::arc },
00271 { &KoWmfReadPrivate::ellipse },
00272 { &KoWmfReadPrivate::notyet },
00273 { &KoWmfReadPrivate::pie },
00274 { &KoWmfReadPrivate::rectangle },
00275 { &KoWmfReadPrivate::roundRect },
00276 { &KoWmfReadPrivate::notyet },
00277 { &KoWmfReadPrivate::saveDC },
00278 { &KoWmfReadPrivate::setPixel },
00279 { &KoWmfReadPrivate::notyet },
00280 { &KoWmfReadPrivate::textOut },
00281 { &KoWmfReadPrivate::bitBlt },
00282 { &KoWmfReadPrivate::notyet },
00283 { &KoWmfReadPrivate::polygon },
00284 { &KoWmfReadPrivate::polyline },
00285 { &KoWmfReadPrivate::escape },
00286 { &KoWmfReadPrivate::restoreDC },
00287 { &KoWmfReadPrivate::region },
00288 { &KoWmfReadPrivate::region },
00289 { &KoWmfReadPrivate::region },
00290 { &KoWmfReadPrivate::region },
00291 { &KoWmfReadPrivate::region },
00292 { &KoWmfReadPrivate::selectObject },
00293 { &KoWmfReadPrivate::setTextAlign },
00294 { 0 },
00295 { &KoWmfReadPrivate::chord },
00296 { &KoWmfReadPrivate::notyet },
00297 { &KoWmfReadPrivate::extTextOut },
00298 { &KoWmfReadPrivate::setDibToDev },
00299 { &KoWmfReadPrivate::palette },
00300 { &KoWmfReadPrivate::palette },
00301 { &KoWmfReadPrivate::palette },
00302 { &KoWmfReadPrivate::palette },
00303 { &KoWmfReadPrivate::polyPolygon },
00304 { &KoWmfReadPrivate::palette },
00305 { 0 },
00306 { 0 },
00307 { 0 },
00308 { 0 },
00309 { 0 },
00310 { 0 },
00311 { &KoWmfReadPrivate::dibBitBlt },
00312 { &KoWmfReadPrivate::dibStretchBlt },
00313 { &KoWmfReadPrivate::dibCreatePatternBrush },
00314 { &KoWmfReadPrivate::stretchDib },
00315 { 0 },
00316 { 0 },
00317 { 0 },
00318 { 0 },
00319 { &KoWmfReadPrivate::extFloodFill },
00320 { 0 },
00321 { 0 },
00322 { 0 },
00323 { &KoWmfReadPrivate::resetDC },
00324 { &KoWmfReadPrivate::startDoc },
00325 { 0 },
00326 { &KoWmfReadPrivate::startPage },
00327 { &KoWmfReadPrivate::endPage },
00328 { 0 },
00329 { 0 },
00330 { 0 },
00331 { 0 },
00332 { 0 },
00333 { 0 },
00334 { 0 },
00335 { 0 },
00336 { 0 },
00337 { 0 },
00338 { 0 },
00339 { 0 },
00340 { 0 },
00341 { &KoWmfReadPrivate::endDoc },
00342 { 0 },
00343
00344 { &KoWmfReadPrivate::deleteObject },
00345 { 0 },
00346 { 0 },
00347 { 0 },
00348 { 0 },
00349 { 0 },
00350 { 0 },
00351 { &KoWmfReadPrivate::createPalette },
00352 { &KoWmfReadPrivate::createBrush },
00353 { &KoWmfReadPrivate::createPatternBrush },
00354 { &KoWmfReadPrivate::createPenIndirect },
00355 { &KoWmfReadPrivate::createFontIndirect },
00356 { &KoWmfReadPrivate::createBrushIndirect },
00357 { &KoWmfReadPrivate::createBitmapIndirect },
00358 { &KoWmfReadPrivate::createBitmap },
00359 { &KoWmfReadPrivate::createRegion }
00360 };
00361
00362
00363 #endif
00364