summaryrefslogtreecommitdiffstats
path: root/ktnef/gui/qwmf.h
diff options
context:
space:
mode:
Diffstat (limited to 'ktnef/gui/qwmf.h')
-rw-r--r--ktnef/gui/qwmf.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/ktnef/gui/qwmf.h b/ktnef/gui/qwmf.h
new file mode 100644
index 00000000..b655a3fd
--- /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*/