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.
238 lines
5.1 KiB
238 lines
5.1 KiB
|
|
/***************************************************************************
|
|
qsdrvqt.h
|
|
-------------------
|
|
begin : 01-January-2000
|
|
copyright : (C) 2000 by Kamil Dobkowski
|
|
email : kamildobk@poczta.onet.pl
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef QSDRVQT_H
|
|
#define QSDRVQT_H
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include"qsdrv.h"
|
|
#include<math.h>
|
|
#include<qpainter.h>
|
|
|
|
class QImage;
|
|
|
|
//-------------------------------------------------------------//
|
|
|
|
/**
|
|
* \brief Implementation of QSDrv for Qt.
|
|
* @author Kamil Dobkowski
|
|
*/
|
|
class QSDrvQt : public QSDrv
|
|
{
|
|
public:
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
QSDrvQt();
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~QSDrvQt();
|
|
/**
|
|
* Returns a copy of this object.
|
|
*/
|
|
virtual QSDrvQt *copy();
|
|
/**
|
|
* Creates and returns a copy of painter.
|
|
*/
|
|
static QPainter *copyPainter( const QPainter *painter );
|
|
/**
|
|
* Copies painter, dpi settings.
|
|
*/
|
|
void copySettingsFrom( const QSDrvQt *drv );
|
|
/**
|
|
* Sets a painter. If deletePainter is true, painter is deleted in destructor.
|
|
* This driver calls neither p->start(), nor p->stop()
|
|
*/
|
|
virtual void setDC( QPainter *p, double dpi = 72.0, bool deletePainter = false );
|
|
/**
|
|
* Returns painter
|
|
*/
|
|
QPainter *painter() const { return m_paint; }
|
|
/**
|
|
* Returns 'delete' painter setting
|
|
*/
|
|
bool deletePainter() const { return m_delete_painter; }
|
|
|
|
/**
|
|
* Reimplemented from @ref QSDrv::startDraw .
|
|
*/
|
|
void startDrawing();
|
|
/**
|
|
* Reimplemented from @ref QSDrv::stopDraw .
|
|
* Doesn,t call paint->end().
|
|
*/
|
|
void stopDrawing();
|
|
|
|
void clearCanvas( const QSGFill& f, const QSPt2f& pos, const QSPt2f& size );
|
|
void drawLine( const QSPt2f &one, const QSPt2f &two );
|
|
void beginPolyline( const QSPt2f& pos );
|
|
void drawPolylineTo( const QSPt2f& pos );
|
|
void endPolyline();
|
|
QSPt2f currPolylinePos() { return m_curr_polyline_pos; }
|
|
void drawRect( const QSPt2f &p1, const QSPt2f &p2 );
|
|
void drawPoly( const QSPt2f pts[], int npoints, const bool edges[] = NULL, int edgeAutoColor = 0 );
|
|
void drawEllipse( const QSPt2f& p1, const QSPt2f& p2 );
|
|
void drawText( const QSPt2f &pos, const QString& text, int align = AlignLeft | AlignBottom );
|
|
QSPt2f textSize( const QString& text );
|
|
void drawRText( const QSPt2f &pos, int angle, const QString& text, int align = AlignLeft | AlignBottom );
|
|
void getRTextBoundingPoly( QSPt2f outPts[4], const QSPt2f &pos, int angle, const QString& text, int align = AlignLeft | AlignBottom );
|
|
void getPixmapBuffer( PixmapBuffer *buff, int pwidth, int pheight );
|
|
void drawPixmap( const QSPt2f& pos, PixmapBuffer *data );
|
|
void setFill( const QSGFill &f );
|
|
void setFont( const QSGFont &f );
|
|
void setLine( const QSGLine &l );
|
|
QSGFont currentFont();
|
|
QSGFill currentFill();
|
|
QSGLine currentLine();
|
|
/**
|
|
* Converts 'QFont' to 'QSGFont' .
|
|
*/
|
|
static QSGFont toQSGFont( const QFont &f, const QColor &c, double dpi = 72.0 );
|
|
/**
|
|
* Converts 'QSGFont' to 'QFont' .
|
|
*/
|
|
static QFont toQFont( const QSGFont &f, double dpi = 72.0 );
|
|
/**
|
|
* Converts 'QColor' to 'QSGColor' .
|
|
*/
|
|
static QSGColor toQSGColor( const QColor &c );
|
|
/**
|
|
* Converts 'QSGColor' to 'QColor' .
|
|
*/
|
|
static QColor toQColor( const QSGColor &c );
|
|
/**
|
|
* Converts 'QBrush' to 'QSGFill' .
|
|
*/
|
|
static QSGFill toQSGFill( const QBrush &b );
|
|
/**
|
|
* Converts 'QSGFill' to 'QBrush' .
|
|
*/
|
|
static QBrush toQBrush( const QSGFill &f );
|
|
/**
|
|
* Converts 'QPen' to 'QSGLine' .
|
|
*/
|
|
static QSGLine toQSGLine( const QPen &p );
|
|
/**
|
|
* Converts 'QSGLine' to 'QPen' .
|
|
*/
|
|
static QPen toQPen( const QSGLine &p );
|
|
|
|
protected:
|
|
QPainter *m_paint;
|
|
QPointArray m_vert_array;
|
|
QPointArray m_edge_array;
|
|
QImage *m_pixmap;
|
|
QSGLine m_line;
|
|
QSGFill m_cfill;
|
|
QSGFont m_curr_font;
|
|
bool m_delete_painter;
|
|
QPen m_curr_pen;
|
|
|
|
QSPt2f m_curr_polyline_pos;
|
|
int m_curr_polyline_style;
|
|
double m_curr_polyline_t;
|
|
double m_curr_polyline_pattern_length;
|
|
double m_curr_polyline_pattern[6];
|
|
static const int defpatterns[4][6];
|
|
QPoint align_rect( const QRect& r, int align );
|
|
inline int toInt( double value ) { return int(value+0.5); }
|
|
void set_auto_pen( int autoColor );
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|