/* 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 #include #include #include #include #include #include #include class TQBuffer; class TQString; class WmfCmd; class WinObjHandle; class WinObjPenHandle; class WinObjBrushHandle; struct WmfPlaceableHeader; /** * TQWinMetaFile is a WMF viewer based on QT toolkit * How to use TQWinMetaFile : * #include "qwmf.h" * TQWinMetaFile wmf; * TQPicture pic; // or TQImage pic; * if ( wmf.load( filename ) *   wmf.paint( &pic ); */ class TQWinMetaFile { public: TQWinMetaFile(); virtual ~TQWinMetaFile(); /** * Load WMF file. Returns 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. * abosute coord. reset the world transfomation Matrix * relative coord. use the existing world transfomation Matrix * Returns true on success. */ virtual bool paint( const TQPaintDevice* 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 */ TQRect bbox( void ) const { return mBBox; } void setBbox( TQRect 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. */ 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; // informtion shared between Metafile Functions TQColor mTextColor; int mTextAlign, mRotation; bool mWinding; WmfCmd* mFirstCmd; WinObjHandle** mObjHandleTab; TQPointArray mPoints; int mDpi; }; #endif /*qwmf_h*/