/* This file is part of the KDE project
   Copyright (C) 2001, The Karbon Developers
   Copyright (C) 2002, The Karbon Developers

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   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 __VTQPAINTER_H__
#define __VTQPAINTER_H__

// qpainter wrapper

#include "vpainter.h"
#include "tqpointarray.h"

class TQPainter;

class VTQPainter : public VPainter
{
public:
	VTQPainter( TQPaintDevice *target, unsigned int w = 0, unsigned int h = 0 );
	virtual ~VTQPainter();

    //
	virtual void resize( unsigned int w, unsigned int h );
	virtual void begin();
	virtual void end();
	virtual void blit( const KoRect & );
	virtual void clear( const TQColor & );
	virtual void clear( const KoRect &, const TQColor & ) {}

	// matrix manipulation
	virtual void setWorldMatrix( const TQWMatrix & );
	virtual const TQWMatrix worldMatrix();
	virtual void setZoomFactor( double );
	virtual double zoomFactor() { return m_zoomFactor; }

	// drawing
    virtual void moveTo( const KoPoint & );
    virtual void lineTo( const KoPoint & );
	virtual void curveTo( const KoPoint &, const KoPoint &, const KoPoint & );
    virtual void newPath();
    virtual void strokePath();
    virtual void fillPath();
	virtual void setFillRule( VFillRule ) {}
	virtual void setClipPath() {}
	virtual void resetClipPath() {}

	// pen + brush
	virtual void setPen( const VStroke & );
	virtual void setPen( const TQColor & );
	virtual void setPen( TQt::PenStyle style );
	virtual void setBrush( const VFill & );
	virtual void setBrush( const TQColor & );
	virtual void setBrush( TQt::BrushStyle style );

	virtual void drawImage( const TQImage &, const TQWMatrix & );

	// stack management
	virtual void save();
	virtual void restore();

	// helper
	virtual void drawNode( const KoPoint& , int );
	virtual void drawRect( const KoRect & );

	//
	virtual void setRasterOp( TQt::RasterOp );

	virtual TQPaintDevice *device() { return m_target; }

private:
	double m_zoomFactor;
	unsigned int m_index;
	TQPointArray m_pa;
	TQPainter *m_painter;
	TQPaintDevice *m_target;
	unsigned int m_width;
	unsigned int m_height;
};

#endif
