You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kwmf/qwmf.h

232 lines
7.2 KiB

/* 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 TQt 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 TQt 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*/