/**************************************************************************** ** ** Definition of TQPainter class ** ** Created : 940112 ** ** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. ** ** This file is part of the kernel module of the TQt GUI Toolkit. ** ** This file may be used under the terms of the GNU General ** Public License versions 2.0 or 3.0 as published by the Free ** Software Foundation and appearing in the files LICENSE.GPL2 ** and LICENSE.GPL3 included in the packaging of this file. ** Alternatively you may (at your option) use any later version ** of the GNU General Public License if such license has been ** publicly approved by Trolltech ASA (or its successors, if any) ** and the KDE Free TQt Foundation. ** ** Please review the following information to ensure GNU General ** Public Licensing requirements will be met: ** http://trolltech.com/products/qt/licenses/licensing/opensource/. ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview ** or contact the sales department at sales@trolltech.com. ** ** This file may be used under the terms of the Q Public License as ** defined by Trolltech ASA and appearing in the file LICENSE.TQPL ** included in the packaging of this file. Licensees holding valid TQt ** Commercial licenses may use this file in accordance with the TQt ** Commercial License Agreement provided with the Software. ** ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted ** herein. ** **********************************************************************/ #ifndef TQPAINTER_H #define TQPAINTER_H #include "tqtglobaldefines.h" #ifndef TQT_H #include "tqcolor.h" #include "tqfontmetrics.h" #include "tqfontinfo.h" #include "tqregion.h" #include "tqpen.h" #include "tqbrush.h" #include "tqpointarray.h" #include "tqwmatrix.h" #endif // TQT_H #ifdef USE_QT4 /**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the Qt3Support module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "tqwidget.h" #include "tqpaintdevice.h" #include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE class Q_COMPAT_EXPORT TQPainter : public QPainter, virtual public TQt { public: enum TextDirection { Auto, RTL, LTR }; enum CoordinateMode { CoordDevice, CoordPainter }; TQPainter(); TQPainter( const QWidget *pdev, bool unclipped = FALSE); TQPainter( QPaintDevice *pdev, bool unclipped = FALSE); TQPainter( QWidget *pdev, const QWidget *w, bool unclipped = FALSE ); TQPainter( QPaintDevice *pdev, const QWidget *w, bool unclipped = FALSE ); void flush(); void flush( const TQRegion ®ion, CoordinateMode cm = CoordDevice ); void drawRect(const QRect &rect); inline void drawRect(int x1, int y1, int w, int h) { drawRect(QRect(x1, y1, w, h)); } void drawRoundRect(const QRect &r, int xround = 25, int yround = 25); inline void drawRoundRect(int x, int y, int w, int h, int xround = 25, int yround = 25) { drawRoundRect(QRect(x, y, w, h), xround, yround); } void drawEllipse(const QRect &r); inline void drawEllipse(int x, int y, int w, int h) { drawEllipse(QRect(x, y, w, h)); } void drawArc(const QRect &r, int a, int alen); inline void drawArc(int x, int y, int w, int h, int a, int alen) { drawArc(QRect(x, y, w, h), a, alen); } void drawPie(const QRect &r, int a, int alen); inline void drawPie(int x, int y, int w, int h, int a, int alen) { drawPie(QRect(x, y, w, h), a, alen); } void drawChord(const QRect &r, int a, int alen); inline void drawChord(int x, int y, int w, int h, int a, int alen) { drawChord(QRect(x, y, w, h), a, alen); } void drawImage( int x, int y, const TQImage image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0 ); void drawImage( const TQPoint p, const TQImage image, const TQRect sr, int conversionFlags = 0 ); void drawImage( const TQPoint p, const TQImage image, int conversion_flags = 0 ); void drawImage( const TQRect r, const TQImage image ); void drawLineSegments(const QPolygon &points, int index = 0, int nlines = -1); void setBrush(const QBrush &brush); void setBrush(Qt::BrushStyle style); void setBrush(TQt::BrushStyle style); inline void tqdrawPixmap( int x, int y, const TQPixmap &tqpm, int sx=0, int sy=0, int sw=-1, int sh=-1 ) { drawPixmap(x, y, tqpm, sx, sy, sw, sh); } TQPoint pos() const; // Qt4 requires the QPainter to have a valid QPaintDevice (engine) for boundingRect() to work // So, we create one off-screen! #define TQT_INITIALIZE_QPAINTER_TEMPORARY_ENGINE_CONDITIONAL \ bool neededEngine = FALSE; \ if (QPainter::isActive() == 0) { \ printf("[WARNING] Painter was inactive when TQPainter::boundingRect was called; this indicates a likely problem in painting within your application (check Qt::WA_PaintOutsidePaintEvent == true)\n\r"); \ QImage image(1,1,QImage::Format_RGB32); \ neededEngine = TRUE; \ QPainter::begin(&image); \ } #define TQT_DESTROY_QPAINTER_TEMPORARY_ENGINE_CONDITIONAL \ if (neededEngine == TRUE) { \ QPainter::end(); \ } QRectF boundingRect(const QRectF &rect, int flags, const QString &text); QRect boundingRect(const QRect &rect, int flags, const QString &text); QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text); QRectF boundingRect(const QRectF &rect, const QString &text, const QTextOption &o = QTextOption()); TQRect boundingRect(const QRect &rect, int flags, const QString &text, int len); TQRect boundingRect(int x, int y, int w, int h, int flags, const QString &text, int len); void drawText(const QPointF &p, const QString &s); void drawText(const QPoint &p, const QString &s); void drawText(int x, int y, const QString &s); void drawText(const QPointF &p, const QString &str, int tf, int justificationPadding); void drawText(const QRectF &r, int flags, const QString &text, QRectF *br=0); void drawText(const QRect &r, int flags, const QString &text, QRect *br=0); void drawText(int x, int y, int w, int h, int flags, const QString &text, QRect *br=0); void drawText(const QRectF &r, const QString &text, const QTextOption &o = QTextOption()); void drawText( int x, int y, const TQString &s, int len = -1, TextDirection dir = Auto ); void drawText( const TQPoint &p, const TQString &s, int len = -1, TextDirection dir = Auto ); void drawText( int x, int y, const TQString &s, int pos, int len, TextDirection dir = Auto ); void drawText( const TQPoint &p, const TQString &s, int pos, int len, TextDirection dir = Auto ); void drawText(int x, int y, const QString &s, int pos, int len); void drawText(const QPoint &p, const QString &s, int pos, int len); void drawText(int x, int y, const QString &s, int len); void drawText(const QPoint &p, const QString &s, int len); void drawText(const QRect &r, int flags, const QString &str, int len, QRect *br=0); void drawText(int x, int y, int w, int h, int flags, const QString &text, int len, QRect *br=0); #ifndef TQT_NO_PICTURE void drawPicture( const QPicture ); void drawPicture( int x, int y, const QPicture ); void drawPicture( const QPoint, const QPicture ); #endif void drawPoints( const TQPointArray& a, int index=0, int npoints=-1 ); int tabStops() const; void setTabStops( int ); int *tabArray() const; void setTabArray( int * ); TQFontInfo fontInfo() const; void map(int x, int y, int *rx, int *ry) const; void map( int, int, int, int, int *, int *, int *, int * ) const; TQPoint xForm(const QPoint &) const; // map virtual -> deviceb TQRect xForm(const QRect &) const; // TQPolygon xForm(const QPolygon &) const; // TQPolygon xForm(const QPolygon &, int index, int npoints) const; TQPoint xFormDev(const QPoint &) const; // map device -> virtual TQRect xFormDev(const QRect &) const; TQPointArray xForm( const TQPointArray & ) const; TQPointArray xForm( const TQPointArray &, int index, int npoints ) const; // TQPolygon xFormDev(const QPolygon &) const; // TQPolygon xFormDev(const QPolygon &, int index, int npoints) const; TQPointArray xFormDev( const TQPointArray & ) const; TQPointArray xFormDev( const TQPointArray &, int index, int npoints ) const; qreal translationX() const; qreal translationY() const; void resetXForm(); // [FIXME] The drawWinFocusRect methods below probably need tweaking to exactly match the old Qt3 behaviour void drawWinFocusRect( int x, int y, int w, int h ); void drawWinFocusRect( int x, int y, int w, int h, const TQColor &bgColor ); void drawWinFocusRect( const TQRect &tqr ); void drawWinFocusRect( const TQRect &tqr, const TQColor &bgColor ); // inline const TQWMatrix &tqworldMatrix() const { return (*(static_cast(&worldMatrix()))); } const TQWMatrix &tqworldMatrix() const; void saveWorldMatrix(); void restoreWorldMatrix(); inline TQPaintDevice *tqdevice() const { return static_cast(device()); } TQRegion clipRegion( CoordinateMode cm = CoordDevice ) const; void setClipRegion( const QRegion &qr, CoordinateMode cm = CoordDevice ); void setBackgroundColor(const QColor &color); const QColor &backgroundColor() const; void setClipRect(const QRectF &qrf, Qt::ClipOperation op = Qt::ReplaceClip); void setClipRect(const QRect &qr, Qt::ClipOperation op = Qt::ReplaceClip); void setClipRect( const TQRect &qr, CoordinateMode cm = CoordDevice ); void setClipRect( int x, int y, int w, int h, CoordinateMode cm = CoordDevice ); inline double m11() const { return deviceTransform().m11(); } inline double m12() const { return deviceTransform().m12(); } inline double m21() const { return deviceTransform().m21(); } inline double m22() const { return deviceTransform().m22(); } inline double dx() const { return deviceTransform().dx(); } inline double dy() const { return deviceTransform().dy(); } inline double im11() const { return deviceTransform().inverted().m11(); } inline double im12() const { return deviceTransform().inverted().m12(); } inline double im21() const { return deviceTransform().inverted().m21(); } inline double im22() const { return deviceTransform().inverted().m22(); } inline double idx() const { return deviceTransform().inverted().dx(); } inline double idy() const { return deviceTransform().inverted().dy(); } void moveTo( int x, int y ); void moveTo( const TQPoint & ); void lineTo( int x, int y ); void lineTo( const TQPoint & ); void tqdrawTextItem( int x, int y, const TQTextItem &ti, int textflags = 0 ); void tqdrawTextItem( const TQPoint& p, const TQTextItem &ti, int textflags = 0 ); static void redirect(QPaintDevice *pdev, QPaintDevice *replacement); static TQPaintDevice *redirect(QPaintDevice *pdev); TQt::RasterOp rasterOp() const; void setRasterOp( TQt::RasterOp ); bool tqbegin( QPaintDevice *pdev, bool unclipped = FALSE ); bool tqbegin( QPaintDevice *pdev, const QWidget *init, bool unclipped = FALSE ); inline void tqdrawPolyline(const QPolygon &pa, int index, int npoints = -1) { drawPolyline(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints); } inline void tqdrawPolygon(const QPolygon &pa, bool winding, int index = 0, int npoints = -1) { drawPolygon(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints, winding ? Qt::WindingFill : Qt::OddEvenFill); } inline void tqdrawPolygon(const QPolygonF &polygon, bool winding, int index = 0, int npoints = -1) { drawPolygon(polygon.constData() + index, npoints == -1 ? polygon.size() - index : npoints, winding ? Qt::WindingFill : Qt::OddEvenFill); } void tqdrawPolyline( const TQPointArray &, int index=0, int npoints=-1 ); inline void tqdrawConvexPolygon(const QPolygonF &polygon, int index, int npoints = -1) { drawConvexPolygon(polygon.constData() + index, npoints == -1 ? polygon.size() - index : npoints); } inline void tqdrawConvexPolygon(const QPolygon &pa, int index, int npoints = -1) { drawConvexPolygon(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints); } // static inline void redirect(QPaintDevice *pdev, QPaintDevice *replacement) { setRedirected(pdev, replacement); } // static inline TQPaintDevice *redirect(QPaintDevice *pdev) { return const_cast(redirected(pdev)); } void setWorldXForm(bool enabled); bool hasWorldXForm() const; // inline void resetXForm() { resetTransform(); } void setViewXForm(bool enabled); bool hasViewXForm() const; #ifndef TQT_NO_BEZIER void drawCubicBezier( const TQPointArray &, int index=0 ); #endif // [FIXME] static void initialize(); static void cleanup(); bool has_qwidget; mutable QWidget* qwidget_ptr; private: QRect adjustedRectangle(const QRect &r); int rectSubtraction() const; uchar rop; enum { IsActive=0x01, ExtDev=0x02, IsStartingUp=0x04, NoCache=0x08, VxF=0x10, WxF=0x20, ClipOn=0x40, SafePolygon=0x80, MonoDev=0x100, DirtyFont=0x200, DirtyPen=0x400, DirtyBrush=0x800, RGBColor=0x1000, FontMet=0x2000, FontInf=0x4000, CtorBegin=0x8000, UsePrivateCx = 0x10000, VolatileDC = 0x20000, TQt2Compat = 0x40000 }; // uint flags; // bool testf( uint b ) const { return (flags&b)!=0; } bool testf( uint b ) const; void drawWinFocusRect( int x, int y, int w, int h, bool xorPaint, const QColor &penColor ); void fix_neg_rect( int *x, int *y, int *w, int *h ); TQPoint current_penpos; Q_DISABLE_COPY(TQPainter) }; QT_END_NAMESPACE QT_END_HEADER #else // USE_QT4 class TQGfx; class TQTextCodec; class TQTextParag; class TQPaintDevice; class TQTextItem; #if defined( TQ_WS_MAC ) class TQMacSavedPortInfo; #endif class TQPainterPrivate; #if defined(TQ_WS_TQWS) class TQScreen; #endif class TQ_EXPORT TQPainter : public TQt { public: enum CoordinateMode { CoordDevice, CoordPainter }; TQPainter(); TQPainter( const TQPaintDevice *, bool unclipped = FALSE ); TQPainter( const TQPaintDevice *, const TQWidget *, bool unclipped = FALSE ); ~TQPainter(); bool begin( const TQPaintDevice *, bool unclipped = FALSE ); bool begin( const TQPaintDevice *, const TQWidget *, bool unclipped = FALSE ); bool end(); TQPaintDevice *tqdevice() const; #ifdef TQ_WS_TQWS TQGfx * internalGfx(); #ifdef TQT_TQWS_EXPERIMENTAL_SCREENPAINTER bool begin(TQScreen *screen); #endif #endif static void redirect( TQPaintDevice *pdev, TQPaintDevice *replacement ); static TQPaintDevice *redirect( TQPaintDevice *pdev ); bool isActive() const; void flush( const TQRegion ®ion, CoordinateMode cm = CoordDevice ); void flush(); void save(); void restore(); // Drawing tools TQFontMetrics fontMetrics() const; TQFontInfo fontInfo() const; const TQFont &font() const; void setFont( const TQFont & ); const TQPen &pen() const; void setPen( const TQPen & ); void setPen( PenStyle ); void setPen( const TQColor & ); const TQBrush &brush() const; void setBrush( const TQBrush & ); void setBrush( BrushStyle ); void setBrush( const TQColor & ); TQPoint pos() const; // Drawing attributes/modes const TQColor &backgroundColor() const; void setBackgroundColor( const TQColor & ); BGMode backgroundMode() const; void setBackgroundMode( BGMode ); RasterOp rasterOp() const; void setRasterOp( RasterOp ); const TQPoint &brushOrigin() const; void setBrushOrigin( int x, int y ); void setBrushOrigin( const TQPoint & ); // Scaling and transformations // PaintUnit unit() const; // get set painter unit // void setUnit( PaintUnit ); // NOT IMPLEMENTED!!! bool hasViewXForm() const; bool hasWorldXForm() const; #ifndef TQT_NO_TRANSFORMATIONS void setViewXForm( bool ); // set xform on/off TQRect window() const; // get window void setWindow( const TQRect & ); // set window void setWindow( int x, int y, int w, int h ); TQRect viewport() const; // get viewport void setViewport( const TQRect & ); // set viewport void setViewport( int x, int y, int w, int h ); void setWorldXForm( bool ); // set world xform on/off const TQWMatrix &tqworldMatrix() const; // get/set world xform matrix void setWorldMatrix( const TQWMatrix &, bool combine=FALSE ); void saveWorldMatrix(); void restoreWorldMatrix(); void scale( double sx, double sy ); void shear( double sh, double sv ); void rotate( double a ); #endif void translate( double dx, double dy ); void resetXForm(); double translationX() const; double translationY() const; TQPoint xForm( const TQPoint & ) const; // map virtual -> tqdevice TQRect xForm( const TQRect & ) const; TQPointArray xForm( const TQPointArray & ) const; TQPointArray xForm( const TQPointArray &, int index, int npoints ) const; TQPoint xFormDev( const TQPoint & ) const; // map tqdevice -> virtual TQRect xFormDev( const TQRect & ) const; TQPointArray xFormDev( const TQPointArray & ) const; TQPointArray xFormDev( const TQPointArray &, int index, int npoints ) const; // Clipping void setClipping( bool ); // set clipping on/off bool hasClipping() const; TQRegion clipRegion( CoordinateMode = CoordDevice ) const; void setClipRect( const TQRect &, CoordinateMode = CoordDevice ); // set clip rectangle void setClipRect( int x, int y, int w, int h, CoordinateMode = CoordDevice ); void setClipRegion( const TQRegion &, CoordinateMode = CoordDevice );// set clip region // Graphics drawing functions void drawPoint( int x, int y ); void drawPoint( const TQPoint & ); void drawPoints( const TQPointArray& a, int index=0, int npoints=-1 ); void moveTo( int x, int y ); void moveTo( const TQPoint & ); void lineTo( int x, int y ); void lineTo( const TQPoint & ); void drawLine( int x1, int y1, int x2, int y2 ); void drawLine( const TQPoint &, const TQPoint & ); void drawRect( int x, int y, int w, int h ); void drawRect( const TQRect & ); void drawWinFocusRect( int x, int y, int w, int h ); void drawWinFocusRect( int x, int y, int w, int h, const TQColor &bgColor ); void drawWinFocusRect( const TQRect & ); void drawWinFocusRect( const TQRect &, const TQColor &bgColor ); void drawRoundRect( int x, int y, int w, int h, int = 25, int = 25 ); void drawRoundRect( const TQRect &, int = 25, int = 25 ); void drawEllipse( int x, int y, int w, int h ); void drawEllipse( const TQRect & ); void drawArc( int x, int y, int w, int h, int a, int alen ); void drawArc( const TQRect &, int a, int alen ); void drawPie( int x, int y, int w, int h, int a, int alen ); void drawPie( const TQRect &, int a, int alen ); void drawChord( int x, int y, int w, int h, int a, int alen ); void drawChord( const TQRect &, int a, int alen ); void drawLineSegments( const TQPointArray &, int index=0, int nlines=-1 ); void drawPolyline( const TQPointArray &, int index=0, int npoints=-1 ); void drawPolygon( const TQPointArray &, bool winding=FALSE, int index=0, int npoints=-1 ); void drawConvexPolygon( const TQPointArray &, int index=0, int npoints=-1 ); #ifndef TQT_NO_BEZIER void drawCubicBezier( const TQPointArray &, int index=0 ); #endif void drawPixmap( int x, int y, const TQPixmap &, int sx=0, int sy=0, int sw=-1, int sh=-1 ); void drawPixmap( const TQPoint &, const TQPixmap &, const TQRect &sr ); void drawPixmap( const TQPoint &, const TQPixmap & ); void drawPixmap( const TQRect &, const TQPixmap & ); void drawImage( int x, int y, const TQImage &, int sx = 0, int sy = 0, int sw = -1, int sh = -1, int conversionFlags = 0 ); void drawImage( const TQPoint &, const TQImage &, const TQRect &sr, int conversionFlags = 0 ); void drawImage( const TQPoint &, const TQImage &, int conversion_flags = 0 ); void drawImage( const TQRect &, const TQImage & ); void drawTiledPixmap( int x, int y, int w, int h, const TQPixmap &, int sx=0, int sy=0 ); void drawTiledPixmap( const TQRect &, const TQPixmap &, const TQPoint & ); void drawTiledPixmap( const TQRect &, const TQPixmap & ); #ifndef TQT_NO_PICTURE void drawPicture( const TQPicture & ); void drawPicture( int x, int y, const TQPicture & ); void drawPicture( const TQPoint &, const TQPicture & ); #endif void fillRect( int x, int y, int w, int h, const TQBrush & ); void fillRect( const TQRect &, const TQBrush & ); void eraseRect( int x, int y, int w, int h ); void eraseRect( const TQRect & ); // Text drawing functions enum TextDirection { Auto, RTL, LTR }; void drawText( int x, int y, const TQString &, int len = -1, TextDirection dir = Auto ); void drawText( const TQPoint &, const TQString &, int len = -1, TextDirection dir = Auto ); void drawText( int x, int y, const TQString &, int pos, int len, TextDirection dir = Auto ); void drawText( const TQPoint &p, const TQString &, int pos, int len, TextDirection dir = Auto ); void drawText( int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0 ); void drawText( const TQRect &, int flags, const TQString&, int len = -1, TQRect *br=0, TQTextParag **intern=0 ); void tqdrawTextItem( int x, int y, const TQTextItem &ti, int textflags = 0 ); void tqdrawTextItem( const TQPoint& p, const TQTextItem &ti, int textflags = 0 ); TQRect boundingRect( int x, int y, int w, int h, int flags, const TQString&, int len = -1, TQTextParag **intern=0 ); TQRect boundingRect( const TQRect &, int flags, const TQString&, int len = -1, TQTextParag **intern=0 ); int tabStops() const; void setTabStops( int ); int *tabArray() const; void setTabArray( int * ); // Other functions #if defined(TQ_WS_WIN) HDC handle() const; #elif defined(TQ_WS_X11) || defined(TQ_WS_MAC) HANDLE handle() const; #endif static void initialize(); static void cleanup(); private: void init(); void destroy(); void updateFont(); void updatePen(); void updateBrush(); #ifndef TQT_NO_TRANSFORMATIONS void updateXForm(); void updateInvXForm(); #endif void map( int, int, int *rx, int *ry ) const; void map( int, int, int, int, int *, int *, int *, int * ) const; void mapInv( int, int, int *, int * ) const; void mapInv( int, int, int, int, int *, int *, int *, int * ) const; void drawPolyInternal( const TQPointArray &, bool close=TRUE ); void drawWinFocusRect( int x, int y, int w, int h, bool xorPaint, const TQColor &penColor ); enum { IsActive=0x01, ExtDev=0x02, IsStartingUp=0x04, NoCache=0x08, VxF=0x10, WxF=0x20, ClipOn=0x40, SafePolygon=0x80, MonoDev=0x100, DirtyFont=0x200, DirtyPen=0x400, DirtyBrush=0x800, RGBColor=0x1000, FontMet=0x2000, FontInf=0x4000, CtorBegin=0x8000, UsePrivateCx = 0x10000, VolatileDC = 0x20000, TQt2Compat = 0x40000 }; uint flags; bool testf( uint b ) const { return (flags&b)!=0; } void setf( uint b ) { flags |= b; } void setf( uint b, bool v ); void clearf( uint b ) { flags &= (uint)(~b); } void fix_neg_rect( int *x, int *y, int *w, int *h ); TQPainterPrivate *d; TQPaintDevice *pdev; TQColor bg_col; uchar bg_mode; uchar rop; uchar pu; TQPoint bro; TQFont cfont; TQFont *pfont; // font used for metrics (might be different for printers) TQPen cpen; TQBrush cbrush; TQRegion crgn; int tabstops; int *tabarray; int tabarraylen; bool block_ext; // for temporary blocking of external tqdevices // Transformations #ifndef TQT_NO_TRANSFORMATIONS TQCOORD wx, wy, ww, wh; TQCOORD vx, vy, vw, vh; TQWMatrix wxmat; // Cached composition (and inverse) of transformations TQWMatrix xmat; TQWMatrix ixmat; double m11() const { return xmat.m11(); } double m12() const { return xmat.m12(); } double m21() const { return xmat.m21(); } double m22() const { return xmat.m22(); } double dx() const { return xmat.dx(); } double dy() const { return xmat.dy(); } double im11() const { return ixmat.m11(); } double im12() const { return ixmat.m12(); } double im21() const { return ixmat.m21(); } double im22() const { return ixmat.m22(); } double idx() const { return ixmat.dx(); } double idy() const { return ixmat.dy(); } int txop; bool txinv; #else // even without transformations we still have translations int xlatex; int xlatey; #endif void *penRef; // pen cache ref void *brushRef; // brush cache ref void *ps_stack; void *wm_stack; void killPStack(); protected: #ifdef TQ_OS_TEMP TQPoint internalCurrentPos; uint old_pix; // ### All win platforms in 4.0 #endif #if defined(TQ_WS_WIN) friend class TQFontEngineWin; friend class TQFontEngineBox; TQT_WIN_PAINTER_MEMBERS #elif defined(TQ_WS_X11) friend class TQFontEngineXLFD; friend class TQFontEngineXft; friend class TQFontEngineBox; Display *dpy; // current display int scrn; // current screen TQt::HANDLE hd; // handle to drawable TQt::HANDLE rendhd; // handle to Xft draw GC gc; // graphics context (standard) GC gc_brush; // graphics contect for brush TQPoint curPt; // current point uint clip_serial; // clipping serial number #elif defined(TQ_WS_MAC) TQt::HANDLE hd; // handle to drawable void initPaintDevice(bool force=FALSE, TQPoint *off=NULL, TQRegion *rgn=NULL); friend const TQRegion &qt_mac_update_painter(TQPainter *, bool); friend class TQFontEngineMac; friend class TQMacPainter; #elif defined(TQ_WS_TQWS) friend class TQFontEngine; TQGfx * gfx; friend void qwsUpdateActivePainters(); #endif friend class TQFontMetrics; friend class TQFontInfo; friend class TQTextLayout; friend void qt_format_text( const TQFont &, const TQRect &r, int tf, const TQString& str, int len, TQRect *brect, int tabstops, int* tabarray, int tabarraylen, TQTextParag **internal, TQPainter* painter ); friend void qt_draw_background( TQPainter *p, int x, int y, int w, int h ); friend void qt_draw_transformed_rect( TQPainter *p, int x, int y, int w, int h, bool fill ); friend class TQPrinter; private: // Disabled copy constructor and operator= #if defined(TQ_DISABLE_COPY) TQPainter( const TQPainter & ); TQPainter &operator=( const TQPainter & ); #endif enum TransformationCodes { TxNone = 0, // transformation codes TxTranslate = 1, // copy in qpainter_*.cpp TxScale = 2, TxRotShear = 3 }; }; /***************************************************************************** TQPainter member functions *****************************************************************************/ inline TQPaintDevice *TQPainter::tqdevice() const { return pdev; } inline bool TQPainter::isActive() const { return testf(IsActive); } inline const TQFont &TQPainter::font() const { return cfont; } inline const TQPen &TQPainter::pen() const { return cpen; } inline const TQBrush &TQPainter::brush() const { return cbrush; } /* inline PaintUnit TQPainter::unit() const { return (PaintUnit)pu; } */ inline const TQColor &TQPainter::backgroundColor() const { return bg_col; } inline TQt::BGMode TQPainter::backgroundMode() const { return (BGMode)bg_mode; } inline TQt::RasterOp TQPainter::rasterOp() const { return (RasterOp)rop; } inline const TQPoint &TQPainter::brushOrigin() const { return bro; } inline bool TQPainter::hasViewXForm() const { #ifndef TQT_NO_TRANSFORMATIONS return testf(VxF); #else return xlatex || xlatey; #endif } inline bool TQPainter::hasWorldXForm() const { #ifndef TQT_NO_TRANSFORMATIONS return testf(WxF); #else return xlatex || xlatey; #endif } inline double TQPainter::translationX() const { #ifndef TQT_NO_TRANSFORMATIONS return tqworldMatrix().dx(); #else return xlatex; #endif } inline double TQPainter::translationY() const { #ifndef TQT_NO_TRANSFORMATIONS return tqworldMatrix().dy(); #else return xlatey; #endif } inline bool TQPainter::hasClipping() const { return testf(ClipOn); } inline int TQPainter::tabStops() const { return tabstops; } inline int *TQPainter::tabArray() const { return tabarray; } #if defined(TQ_WS_WIN) inline HDC TQPainter::handle() const { return hdc; } #elif defined(TQ_WS_X11) || defined(TQ_WS_MAC) inline TQt::HANDLE TQPainter::handle() const { return hd; } #endif inline void TQPainter::setBrushOrigin( const TQPoint &p ) { setBrushOrigin( p.x(), p.y() ); } #ifndef TQT_NO_TRANSFORMATIONS inline void TQPainter::setWindow( const TQRect &r ) { setWindow( r.x(), r.y(), r.width(), r.height() ); } inline void TQPainter::setViewport( const TQRect &r ) { setViewport( r.x(), r.y(), r.width(), r.height() ); } #endif inline void TQPainter::setClipRect( int x, int y, int w, int h, CoordinateMode m ) { setClipRect( TQRect(x,y,w,h), m ); } inline void TQPainter::drawPoint( const TQPoint &p ) { drawPoint( p.x(), p.y() ); } inline void TQPainter::moveTo( const TQPoint &p ) { moveTo( p.x(), p.y() ); } inline void TQPainter::lineTo( const TQPoint &p ) { lineTo( p.x(), p.y() ); } inline void TQPainter::drawLine( const TQPoint &p1, const TQPoint &p2 ) { drawLine( p1.x(), p1.y(), p2.x(), p2.y() ); } inline void TQPainter::drawRect( const TQRect &r ) { drawRect( r.x(), r.y(), r.width(), r.height() ); } inline void TQPainter::drawWinFocusRect( const TQRect &r ) { drawWinFocusRect( r.x(), r.y(), r.width(), r.height() ); } inline void TQPainter::drawWinFocusRect( const TQRect &r,const TQColor &penColor ) { drawWinFocusRect( r.x(), r.y(), r.width(), r.height(), penColor ); } inline void TQPainter::drawRoundRect( const TQRect &r, int xRnd, int yRnd ) { drawRoundRect( r.x(), r.y(), r.width(), r.height(), xRnd, yRnd ); } inline void TQPainter::drawEllipse( const TQRect &r ) { drawEllipse( r.x(), r.y(), r.width(), r.height() ); } inline void TQPainter::drawArc( const TQRect &r, int a, int alen ) { drawArc( r.x(), r.y(), r.width(), r.height(), a, alen ); } inline void TQPainter::drawPie( const TQRect &r, int a, int alen ) { drawPie( r.x(), r.y(), r.width(), r.height(), a, alen ); } inline void TQPainter::drawChord( const TQRect &r, int a, int alen ) { drawChord( r.x(), r.y(), r.width(), r.height(), a, alen ); } inline void TQPainter::drawPixmap( const TQPoint &p, const TQPixmap &pm, const TQRect &sr ) { drawPixmap( p.x(), p.y(), pm, sr.x(), sr.y(), sr.width(), sr.height() ); } inline void TQPainter::drawImage( const TQPoint &p, const TQImage &pm, const TQRect &sr, int conversionFlags ) { drawImage( p.x(), p.y(), pm, sr.x(), sr.y(), sr.width(), sr.height(), conversionFlags ); } inline void TQPainter::drawTiledPixmap( const TQRect &r, const TQPixmap &pm, const TQPoint &sp ) { drawTiledPixmap( r.x(), r.y(), r.width(), r.height(), pm, sp.x(), sp.y() ); } inline void TQPainter::drawTiledPixmap( const TQRect &r, const TQPixmap &pm ) { drawTiledPixmap( r.x(), r.y(), r.width(), r.height(), pm, 0, 0 ); } inline void TQPainter::fillRect( const TQRect &r, const TQBrush &brush ) { fillRect( r.x(), r.y(), r.width(), r.height(), brush ); } inline void TQPainter::eraseRect( int x, int y, int w, int h ) { fillRect( x, y, w, h, backgroundColor() ); } inline void TQPainter::eraseRect( const TQRect &r ) { fillRect( r.x(), r.y(), r.width(), r.height(), backgroundColor() ); } inline void TQPainter::drawText( const TQPoint &p, const TQString &s, int len, TextDirection dir ) { drawText( p.x(), p.y(), s, 0, len, dir ); } inline void TQPainter::drawText( const TQPoint &p, const TQString &s, int pos, int len, TextDirection dir ) { drawText( p.x(), p.y(), s, pos, len, dir ); } inline void TQPainter::drawText( int x, int y, int w, int h, int tf, const TQString& str, int len, TQRect *br, TQTextParag **i ) { TQRect r(x, y, w, h); drawText( r, tf, str, len, br, i ); } inline void TQPainter::tqdrawTextItem( const TQPoint& p, const TQTextItem &ti, int textflags ) { tqdrawTextItem( p.x(), p.y(), ti, textflags ); } inline TQRect TQPainter::boundingRect( int x, int y, int w, int h, int tf, const TQString& str, int len, TQTextParag **i ) { TQRect r(x, y, w, h); return boundingRect( r, tf, str, len, i ); } #if defined(TQ_WS_TQWS) inline TQGfx * TQPainter::internalGfx() { return gfx; } #endif #endif // USE_QT4 #endif // TQPAINTER_H