diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /ktnef/gui/qwmf.h | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'ktnef/gui/qwmf.h')
-rw-r--r-- | ktnef/gui/qwmf.h | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/ktnef/gui/qwmf.h b/ktnef/gui/qwmf.h new file mode 100644 index 000000000..b655a3fd3 --- /dev/null +++ b/ktnef/gui/qwmf.h @@ -0,0 +1,228 @@ +/* Windows Meta File Loader + * + * Copyright ( C ) 1998 Stefan Taferner + * Modified 2002 thierry lorthiois + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or ( at your + * option ) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. You should have received a copy + * of the GNU General Public License along with this program; if not, write + * to the Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ +#ifndef qwmf_h +#define qwmf_h + +#include <qstring.h> +#include <qpainter.h> +#include <qwmatrix.h> +#include <qpointarray.h> +#include <qpen.h> +#include <qcolor.h> +#include <qimage.h> +#include <qrect.h> + +class QBuffer; +class QString; +class WmfCmd; +class WinObjHandle; +class WinObjPenHandle; +class WinObjBrushHandle; +struct WmfPlaceableHeader; + +/** + * QWinMetaFile is a WMF viewer based on QT toolkit + * How to use QWinMetaFile : + * #include "qwmf.h" + * QWinMetaFile wmf; + * QPicture pic; // or QImage pic; + * if ( wmf.load( filename ) + * wmf.paint( &pic ); + */ + + +class QWinMetaFile +{ +public: + QWinMetaFile(); + virtual ~QWinMetaFile(); + + /** + * Load WMF file. Returns true on success. + */ + virtual bool load( const QString &fileName ); + virtual bool load( QBuffer &buffer ); + + /** + * Paint metafile to given paint-device using absolute or relative coordinate. + * abosute coord. reset the world transfomation Matrix + * relative coord. use the existing world transfomation Matrix + * Returns true on success. + */ + virtual bool paint( const QPaintDevice* target, bool absolute=false ); + + /** + * Returns true if the metafile is placeable. + */ + bool isPlaceable( void ) const { return mIsPlaceable; } + + /** + * Returns true if the metafile is enhanced. + */ + bool isEnhanced( void ) const { return mIsEnhanced; } + + /** + * Returns bounding rectangle + */ + QRect bbox( void ) const { return mBBox; } + void setBbox( QRect r ) { mBBox = r; } + +public: // should be protected but cannot + /** Metafile painter methods */ + + // set window origin + void setWindowOrg( long num, short* parms ); + // set window extents + void setWindowExt( long num, short* parms ); + + /****************** Drawing *******************/ + // draw line to coord + void lineTo( long num, short* parms ); + // move pen to coord + void moveTo( long num, short* parms ); + // draw ellipse + void ellipse( long num, short* parms ); + // draw polygon + void polygon( long num, short* parms ); + /* draw a list of polygons */ + void polyPolygon( long num, short* parms ); + // draw series of lines + void polyline( long num, short* parms ); + /* draw a rectangle */ + void rectangle( long num, short* parms ); + /* draw round rectangle */ + void roundRect( long num, short* parms ); + /* draw arc */ + void arc( long num, short* parms ); + /* draw chord */ + void chord( long num, short* parms ); + /* draw pie */ + void pie( long num, short* parms ); + // set polygon fill mode + void setPolyFillMode( long num, short* parms ); + // set background pen color + void setBkColor( long num, short* parms ); + // set background pen mode + void setBkMode( long num, short* parms ); + /* set a pixel */ + void setPixel( long num, short* parms ); + // Set raster operation mode + void setRop( long num, short* parms ); + /* save device context */ + void saveDC( long num, short* parms ); + /* restore device context */ + void restoreDC( long num, short* parms ); + /* clipping region is the intersection of this region and the original region */ + void intersectClipRect( long num, short* parms ); + /* delete a clipping rectangle of the original region */ + void excludeClipRect( long num, short* parms ); + + /****************** Text *******************/ + /* set text color */ + void setTextColor( long num, short* parms ); + /* set text alignment */ + void setTextAlign( long num, short* parms ); + /* draw text */ + void textOut( long num, short* parms ); + void extTextOut( long num, short* parms ); + + /****************** Bitmap *******************/ + /* copies a DIB into a dest location */ + void dibBitBlt( long num, short* parms ); + /* stretches a DIB into a dest location */ + void dibStretchBlt( long num, short* parms ); + void stretchDib( long num, short* parms ); + /* create a pattern brush */ + void dibCreatePatternBrush( long num, short* parms ); + + /****************** Object handle *******************/ + // Activate object handle + void selectObject( long num, short* parms ); + // Free object handle + void deleteObject( long num, short* parms ); + /* create an empty object in the object list */ + void createEmptyObject( long num, short* parms ); + // create a logical brush + void createBrushIndirect( long num, short* parms ); + // create a logical pen + void createPenIndirect( long num, short* parms ); + /* create a logical font */ + void createFontIndirect( long num, short* parms ); + + /****************** misc *******************/ + // nothing to do + void noop( long , short* ); + // end of meta file + void end( long /*num*/, short* /*parms*/ ); + // Resolution of the image in dots per inch + int dpi( void ) const { return mDpi; } + +protected: + /** Calculate header checksum */ + unsigned short calcCheckSum( WmfPlaceableHeader* ); + + /** Find function in metafunc table by metafile-function. + Returns index or -1 if not found. */ + virtual int findFunc( unsigned short aFunc ) const; + + /** Fills given parms into mPoints. */ + QPointArray* pointArray( short num, short* parms ); + + /** Returns color given by the two parameters */ + QColor color( short* parm ); + + /** Converts two parameters to long */ + unsigned int toDWord( short* parm ); + + /** Convert (x1,y1) and (x2, y2) positions in angle and angleLength */ + void xyToAngle( int xStart, int yStart, int xEnd, int yEnd, int& angle, int& aLength ); + + /** Handle win-object-handles */ + void addHandle( WinObjHandle* ); + void deleteHandle( int ); + + /** Convert windows rasterOp in QT rasterOp */ + Qt::RasterOp winToQtRaster( short parm ) const; + Qt::RasterOp winToQtRaster( long parm ) const; + + /** Converts DIB to BMP */ + bool dibToBmp( QImage& bmp, const char* dib, long size); + +protected: + QPainter mPainter; + bool mIsPlaceable, mIsEnhanced, mValid; + + // coordinate system + bool mAbsoluteCoord; + QWMatrix mInternalWorldMatrix; // memorisation of WMF matrix transformation + QRect mHeaderBoundingBox; + QRect mBBox; + + // informtion shared between Metafile Functions + QColor mTextColor; + int mTextAlign, mRotation; + bool mWinding; + + WmfCmd* mFirstCmd; + WinObjHandle** mObjHandleTab; + QPointArray mPoints; + int mDpi; +}; + +#endif /*qwmf_h*/ |