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/filters/karbon/wmf/wmfimportparser.h

142 lines
4.9 KiB

/* This file is part of the KDE project
* 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 _WMFIMPORTPARSER_H_
#define _WMFIMPORTPARSER_H_
#include <tqpainter.h>
#include <tqdom.h>
#include <core/vdocument.h>
#include <core/vcomposite.h>
#include <kowmfread.h>
/**
* WMFImportParser inherit KoWmfRead
* and translate WMF functions
*
*/
class WMFImportParser : public KoWmfRead
{
public:
WMFImportParser();
~WMFImportParser() { }
/**
* play WMF file on a VDocument. Return true on success.
*/
bool play( VDocument& doc );
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( Qt::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
// 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 );
//-----------------------------------------------------------------------------
// Utilities
// Add pen, brush and points to a path
void appendPen( VObject& obj );
void appendBrush( VObject& obj );
void appendPoints(VPath& path, const TQPointArray& pa);
// coordinate transformation
// translate wmf to (0,0) -> scale to document size -> translate to karbon (0,0)
// Wmf origin is (left,top) corner
// Karbon origin is (left,bottom) corner
double coordX( int left )
{ return ((double)(left - mCurrentOrg.x()) * mScaleX); }
double coordY( int top )
{ return (mDoc->height() - ((double)(top - mCurrentOrg.y()) * mScaleY)); }
double scaleW( int width )
{ return (width * mScaleX); }
double scaleH( int height )
{ return (height * mScaleY); }
private:
VDocument *mDoc;
TQRegion mClippingRegion;
TQPen mPen;
TQBrush mBrush;
Qt::BGMode mBackgroundMode;
TQColor mBackgroundColor;
// current origin of WMF logical coordinate
TQPoint mCurrentOrg;
double mScaleX;
double mScaleY;
// current position in WMF coordinate (INT16)
TQPoint mCurrentPoint;
};
#endif