|
|
|
|
/* 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 <tqstring.h>
|
|
|
|
|
#include <tqpainter.h>
|
|
|
|
|
#include <tqwmatrix.h>
|
|
|
|
|
#include <tqpointarray.h>
|
|
|
|
|
#include <tqpen.h>
|
|
|
|
|
#include <tqcolor.h>
|
|
|
|
|
#include <tqimage.h>
|
|
|
|
|
#include <tqrect.h>
|
|
|
|
|
|
|
|
|
|
class TQBuffer;
|
|
|
|
|
class TQString;
|
|
|
|
|
class WmfCmd;
|
|
|
|
|
class WinObjHandle;
|
|
|
|
|
class WinObjPenHandle;
|
|
|
|
|
class WinObjBrushHandle;
|
|
|
|
|
struct WmfPlaceableHeader;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* QWinMetaFile is a WMF viewer based on QT toolkit
|
|
|
|
|
* How to use QWinMetaFile :
|
|
|
|
|
* <pre>
|
|
|
|
|
* #include "qwmf.h"
|
|
|
|
|
* QWinMetaFile wmf;
|
|
|
|
|
* TQPicture pic; // or TQImage pic;
|
|
|
|
|
* if ( wmf.load( filename )
|
|
|
|
|
*<EFBFBD> <EFBFBD>wmf.paint( &pic );
|
|
|
|
|
* </pre>
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QWinMetaFile
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
QWinMetaFile();
|
|
|
|
|
virtual ~QWinMetaFile();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Load WMF file.
|
|
|
|
|
* @return true on success.
|
|
|
|
|
*/
|
|
|
|
|
virtual bool load( const TQString &fileName );
|
|
|
|
|
virtual bool load( TQBuffer &buffer );
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Paint metafile to given paint-device using absolute or relative coordinate.
|
|
|
|
|
* - absolute coord. Reset the world transfomation Matrix
|
|
|
|
|
* - relative coord. Use the existing world transfomation Matrix
|
|
|
|
|
*
|
|
|
|
|
* @return true on success.
|
|
|
|
|
*/
|
|
|
|
|
virtual bool paint( const TQPaintDevice* target, bool absolute=false );
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return true if the metafile is placeable.
|
|
|
|
|
*/
|
|
|
|
|
bool isPlaceable( void ) const { return mIsPlaceable; }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return true if the metafile is enhanced.
|
|
|
|
|
*/
|
|
|
|
|
bool isEnhanced( void ) const { return mIsEnhanced; }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return bounding rectangle
|
|
|
|
|
*/
|
|
|
|
|
TQRect bbox( void ) const { return mBBox; }
|
|
|
|
|
|
|
|
|
|
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. */
|
|
|
|
|
TQPointArray* pointArray( short num, short* parms );
|
|
|
|
|
|
|
|
|
|
/** Returns color given by the two parameters */
|
|
|
|
|
TQColor 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 */
|
|
|
|
|
TQt::RasterOp winToTQtRaster( short parm ) const;
|
|
|
|
|
TQt::RasterOp winToTQtRaster( long parm ) const;
|
|
|
|
|
|
|
|
|
|
/** Converts DIB to BMP */
|
|
|
|
|
bool dibToBmp( TQImage& bmp, const char* dib, long size);
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
TQPainter mPainter;
|
|
|
|
|
bool mIsPlaceable, mIsEnhanced, mValid;
|
|
|
|
|
|
|
|
|
|
// coordinate system
|
|
|
|
|
bool mAbsoluteCoord;
|
|
|
|
|
TQWMatrix mInternalWorldMatrix; // memorisation of WMF matrix transformation
|
|
|
|
|
TQRect mHeaderBoundingBox;
|
|
|
|
|
TQRect mBBox;
|
|
|
|
|
|
|
|
|
|
// information shared between Metafile Functions
|
|
|
|
|
TQColor mTextColor;
|
|
|
|
|
int mTextAlign, mRotation;
|
|
|
|
|
bool mWinding;
|
|
|
|
|
|
|
|
|
|
WmfCmd* mFirstCmd;
|
|
|
|
|
WinObjHandle** mObjHandleTab;
|
|
|
|
|
TQPointArray mPoints;
|
|
|
|
|
int mDpi;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif /*qwmf_h*/
|