|
|
|
/* This file is part of the KDE libraries
|
|
|
|
* Copyright (c) 2003 thierry lorthiois (lorthioist@wanadoo.fr)
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License version 2 as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public License
|
|
|
|
* along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
#ifndef _KOWMFPAINT_H_
|
|
|
|
#define _KOWMFPAINT_H_
|
|
|
|
|
|
|
|
#include <tqpainter.h>
|
|
|
|
|
|
|
|
#include "kowmfread.h"
|
|
|
|
#include <../kofficecore/koffice_export.h>
|
|
|
|
/**
|
|
|
|
* KoWmfPaint inherits the abstract class KoWmfRead
|
|
|
|
* and redirects WMF actions onto a TQPaintDevice.
|
|
|
|
* Uses relative or absolute coordinate.
|
|
|
|
*
|
|
|
|
* how to use:
|
|
|
|
* <pre>
|
|
|
|
* TQPixmap pix( 100, 100 );
|
|
|
|
* KoWmfPaint wmf;
|
|
|
|
* if ( wmf.load( "/home/test.wmf" ) ) {
|
|
|
|
* wmf.play( pix );
|
|
|
|
* }
|
|
|
|
* paint.drawPixmap( 0, 0, pix );
|
|
|
|
* </pre>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
class KOWMF_EXPORT KoWmfPaint : public KoWmfRead
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
KoWmfPaint();
|
|
|
|
~KoWmfPaint() { }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* play WMF file on a TQPaintDevice. Return true on success.
|
|
|
|
* Use absolute or relative coordinate :
|
|
|
|
* absolute coord. reset the world transfomation Matrix (by default)
|
|
|
|
* relative coord. use the existing world transfomation Matrix
|
|
|
|
*/
|
|
|
|
bool play( TQPaintDevice& target, bool relativeCoord=false );
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
// A virtual TQPainter
|
|
|
|
bool begin();
|
|
|
|
bool end();
|
|
|
|
void save();
|
|
|
|
void restore();
|
|
|
|
|
|
|
|
// Drawing tools
|
|
|
|
void setFont( const TQFont& font );
|
|
|
|
// the pen : the width of the pen is in logical coordinate
|
|
|
|
void setPen( const TQPen& pen );
|
|
|
|
const TQPen& pen() const;
|
|
|
|
void setBrush( const TQBrush& brush );
|
|
|
|
|
|
|
|
// Drawing attributes/modes
|
|
|
|
void setBackgroundColor( const TQColor& c );
|
|
|
|
void setBackgroundMode( TQt::BGMode mode );
|
|
|
|
void setRasterOp( TQt::RasterOp op );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Change logical Coordinate
|
|
|
|
* some wmf files call those functions several times in the middle of a drawing
|
|
|
|
* others wmf files doesn't call setWindow* at all
|
|
|
|
* negative width and height are possible
|
|
|
|
*/
|
|
|
|
void setWindowOrg( int left, int top );
|
|
|
|
void setWindowExt( int width, int height );
|
|
|
|
|
|
|
|
// Clipping
|
|
|
|
// the 'CoordinateMode' is ommitted : always CoordPainter in wmf
|
|
|
|
// setClipRegion() is often used with save() and restore() => implement all or none
|
|
|
|
void setClipRegion( const TQRegion &rec );
|
|
|
|
TQRegion clipRegion();
|
|
|
|
|
|
|
|
// Graphics drawing functions
|
|
|
|
void moveTo( int x, int y );
|
|
|
|
void lineTo( int x, int y );
|
|
|
|
void drawRect( int x, int y, int w, int h );
|
|
|
|
void drawRoundRect( int x, int y, int w, int h, int = 25, int = 25 );
|
|
|
|
void drawEllipse( int x, int y, int w, int h );
|
|
|
|
void drawArc( int x, int y, int w, int h, int a, int alen );
|
|
|
|
void drawPie( int x, int y, int w, int h, int a, int alen );
|
|
|
|
void drawChord( int x, int y, int w, int h, int a, int alen );
|
|
|
|
void drawPolyline( const TQPointArray& pa );
|
|
|
|
void drawPolygon( const TQPointArray& pa, bool winding=FALSE );
|
|
|
|
/**
|
|
|
|
* drawPolyPolygon draw the XOR of a list of polygons
|
|
|
|
* listPa : list of polygons
|
|
|
|
*/
|
|
|
|
void drawPolyPolygon( TQPtrList<TQPointArray>& listPa, bool winding=FALSE );
|
|
|
|
void drawImage( int x, int y, const TQImage &, int sx = 0, int sy = 0, int sw = -1, int sh = -1 );
|
|
|
|
|
|
|
|
// Text drawing functions
|
|
|
|
// rotation = the degrees of rotation in counterclockwise
|
|
|
|
// not yet implemented in KWinMetaFile
|
|
|
|
void drawText( int x, int y, int w, int h, int flags, const TQString &s, double rotation );
|
|
|
|
|
|
|
|
// matrix transformation : only used in some bitmap manipulation
|
|
|
|
void setWorldMatrix( const TQWMatrix &, bool combine=FALSE );
|
|
|
|
|
|
|
|
private:
|
|
|
|
TQPainter mPainter;
|
|
|
|
TQPaintDevice *mTarget;
|
|
|
|
bool mRelativeCoord;
|
|
|
|
// memorisation of WMF matrix transformation (in relative coordinate)
|
|
|
|
TQWMatrix mInternalWorldMatrix;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|