F:/KPlato/koffice/libs/kwmf/kowmfreadprivate.h

Aller à la documentation de ce fichier.
00001 /* This file is part of the KDE libraries
00002  * Copyright (c) 1998 Stefan Taferner
00003  *                       2001/2003 thierry lorthiois (lorthioist@wanadoo.fr)
00004  * With the help of WMF documentation by Caolan Mc Namara
00005 
00006    This library is free software; you can redistribute it and/or
00007    modify it under the terms of the GNU Library General Public
00008    License version 2 as published by the Free Software Foundation.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
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 //Added by qt3to4:
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     /* Metafile painter methods */
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     /****************** Drawing *******************/
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     /****************** Text *******************/
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     /****************** Bitmap *******************/
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     /****************** Object handle *******************/
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     /****************** misc *******************/
00149     void end( quint32, QDataStream& stream );
00150 
00152     static quint16 calcCheckSum( WmfPlaceableHeader* );
00153 
00154     // function unimplemented
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     // Utilities and conversion Wmf -> Qt
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     // state of the WMF
00204     bool mValid;
00205     bool mStandard;
00206     bool mPlaceable;
00207     bool mEnhanced;
00208 
00210     QRect  mBBox;     // placeable file : this is the header
00211                       // standard file : this is the value in setWindowOrg and setWindowExt
00213     int mDpi;
00214 
00216     int mNbrFunc;
00217 
00218 private:
00219     // the output
00220     KoWmfRead *mReadWmf;
00221 
00222     // current coordinate != mBBox
00223     QRect  mWindow;
00224     // current state of the drawing
00225     QColor  mTextColor;
00226     quint16  mTextAlign;
00227     int     mTextRotation;
00228     bool    mWinding;
00229 
00230     // memory allocation for WMF file
00231     QBuffer*  mBuffer;
00232     int    mOffsetFirstRecord;
00233 
00234     // stack of object handle
00235     KoWmfHandle**  mObjHandleTab;
00236     // number of object on the stack
00237     int    mNbrObject;
00238     bool   mStackOverflow;
00239 };
00240 
00244     static const struct KoWmfFunc {
00245         void ( KoWmfReadPrivate::*method )( quint32, QDataStream& );
00246     } koWmfFunc[] = {
00247       { &KoWmfReadPrivate::end }, // 0
00248       { &KoWmfReadPrivate::setBkColor }, // 1
00249       { &KoWmfReadPrivate::setBkMode }, // 2
00250       { &KoWmfReadPrivate::setMapMode }, // 3
00251       { &KoWmfReadPrivate::setRop }, // 4
00252       { &KoWmfReadPrivate::setRelAbs }, // 5
00253       { &KoWmfReadPrivate::setPolyFillMode }, // 6
00254       { &KoWmfReadPrivate::SetStretchBltMode }, // 7
00255       { &KoWmfReadPrivate::notyet }, // 8
00256       { &KoWmfReadPrivate::setTextColor }, // 9
00257       { &KoWmfReadPrivate::ScaleWindowExt }, // 10
00258       { &KoWmfReadPrivate::setWindowOrg }, // 11
00259       { &KoWmfReadPrivate::setWindowExt }, // 12
00260       { &KoWmfReadPrivate::notyet }, // 13
00261       { &KoWmfReadPrivate::notyet }, // 14
00262       { &KoWmfReadPrivate::OffsetWindowOrg }, // 15
00263       { &KoWmfReadPrivate::notyet }, // 16
00264       { &KoWmfReadPrivate::notyet }, // 17
00265       { &KoWmfReadPrivate::notyet }, // 18
00266       { &KoWmfReadPrivate::lineTo }, // 19
00267       { &KoWmfReadPrivate::moveTo }, // 20
00268       { &KoWmfReadPrivate::excludeClipRect }, // 21
00269       { &KoWmfReadPrivate::intersectClipRect }, // 22
00270       { &KoWmfReadPrivate::arc }, // 23
00271       { &KoWmfReadPrivate::ellipse }, // 24
00272       { &KoWmfReadPrivate::notyet }, // 25
00273       { &KoWmfReadPrivate::pie }, // 26
00274       { &KoWmfReadPrivate::rectangle }, // 27
00275       { &KoWmfReadPrivate::roundRect }, // 28
00276       { &KoWmfReadPrivate::notyet }, // 29
00277       { &KoWmfReadPrivate::saveDC }, // 30
00278       { &KoWmfReadPrivate::setPixel }, // 31
00279       { &KoWmfReadPrivate::notyet }, // 32
00280       { &KoWmfReadPrivate::textOut }, // 33
00281       { &KoWmfReadPrivate::bitBlt }, // 34
00282       { &KoWmfReadPrivate::notyet }, // 35
00283       { &KoWmfReadPrivate::polygon }, // 36
00284       { &KoWmfReadPrivate::polyline }, // 37
00285       { &KoWmfReadPrivate::escape }, // 38
00286       { &KoWmfReadPrivate::restoreDC }, // 39
00287       { &KoWmfReadPrivate::region }, // 40
00288       { &KoWmfReadPrivate::region }, // 41
00289       { &KoWmfReadPrivate::region }, // 42
00290       { &KoWmfReadPrivate::region }, // 43
00291       { &KoWmfReadPrivate::region }, // 44
00292       { &KoWmfReadPrivate::selectObject }, // 45
00293       { &KoWmfReadPrivate::setTextAlign }, // 46
00294       { 0 }, // 47
00295       { &KoWmfReadPrivate::chord }, // 48
00296       { &KoWmfReadPrivate::notyet }, // 49
00297       { &KoWmfReadPrivate::extTextOut }, // 50
00298       { &KoWmfReadPrivate::setDibToDev }, // 51
00299       { &KoWmfReadPrivate::palette }, // 52
00300       { &KoWmfReadPrivate::palette }, // 53
00301       { &KoWmfReadPrivate::palette }, // 54
00302       { &KoWmfReadPrivate::palette }, // 55
00303       { &KoWmfReadPrivate::polyPolygon }, // 56
00304       { &KoWmfReadPrivate::palette }, // 57
00305       { 0 }, // 58
00306       { 0 }, // 59
00307       { 0 }, // 60
00308       { 0 }, // 61
00309       { 0 }, // 62
00310       { 0 }, // 63
00311       { &KoWmfReadPrivate::dibBitBlt }, // 64
00312       { &KoWmfReadPrivate::dibStretchBlt }, // 65
00313       { &KoWmfReadPrivate::dibCreatePatternBrush }, // 66
00314       { &KoWmfReadPrivate::stretchDib }, // 67
00315       { 0 }, // 68
00316       { 0 }, // 69
00317       { 0 }, // 70
00318       { 0 }, // 71
00319       { &KoWmfReadPrivate::extFloodFill }, // 72
00320       { 0 }, // 73
00321       { 0 }, // 74
00322       { 0 }, // 75
00323       { &KoWmfReadPrivate::resetDC }, // 76
00324       { &KoWmfReadPrivate::startDoc }, // 77
00325       { 0 }, // 78
00326       { &KoWmfReadPrivate::startPage }, // 79
00327       { &KoWmfReadPrivate::endPage }, // 80
00328       { 0 }, // 81
00329       { 0 }, // 82
00330       { 0 }, // 83
00331       { 0 }, // 84
00332       { 0 }, // 85
00333       { 0 }, // 86
00334       { 0 }, // 87
00335       { 0 }, // 88
00336       { 0 }, // 89
00337       { 0 }, // 90
00338       { 0 }, // 91
00339       { 0 }, // 92
00340       { 0 }, // 93
00341       { &KoWmfReadPrivate::endDoc }, // 94
00342       { 0 }, // 95
00343       // 0x5F last function until 0xF0
00344       { &KoWmfReadPrivate::deleteObject }, // 96
00345       { 0 }, // 97
00346       { 0 }, // 98
00347       { 0 }, // 99
00348       { 0 }, // 100
00349       { 0 }, // 101
00350       { 0 }, // 102
00351       { &KoWmfReadPrivate::createPalette }, // 103
00352       { &KoWmfReadPrivate::createBrush }, // 104
00353       { &KoWmfReadPrivate::createPatternBrush }, // 105
00354       { &KoWmfReadPrivate::createPenIndirect }, // 106
00355       { &KoWmfReadPrivate::createFontIndirect }, // 107
00356       { &KoWmfReadPrivate::createBrushIndirect }, //108
00357       { &KoWmfReadPrivate::createBitmapIndirect }, //109
00358       { &KoWmfReadPrivate::createBitmap }, // 110
00359       { &KoWmfReadPrivate::createRegion } // 111
00360     };
00361 
00362 
00363 #endif
00364 

Généré le Wed Nov 22 23:41:13 2006 pour KPlato par  doxygen 1.5.1-p1