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.
142 lines
4.9 KiB
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
|