| [2] | 1 | /**************************************************************************** | 
|---|
|  | 2 | ** $Id: qpainter.h 8 2005-11-16 19:36:46Z dmik $ | 
|---|
|  | 3 | ** | 
|---|
|  | 4 | ** Definition of QPainter class | 
|---|
|  | 5 | ** | 
|---|
|  | 6 | ** Created : 940112 | 
|---|
|  | 7 | ** | 
|---|
|  | 8 | ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved. | 
|---|
|  | 9 | ** | 
|---|
|  | 10 | ** This file is part of the kernel module of the Qt GUI Toolkit. | 
|---|
|  | 11 | ** | 
|---|
|  | 12 | ** This file may be distributed under the terms of the Q Public License | 
|---|
|  | 13 | ** as defined by Trolltech AS of Norway and appearing in the file | 
|---|
|  | 14 | ** LICENSE.QPL included in the packaging of this file. | 
|---|
|  | 15 | ** | 
|---|
|  | 16 | ** This file may be distributed and/or modified under the terms of the | 
|---|
|  | 17 | ** GNU General Public License version 2 as published by the Free Software | 
|---|
|  | 18 | ** Foundation and appearing in the file LICENSE.GPL included in the | 
|---|
|  | 19 | ** packaging of this file. | 
|---|
|  | 20 | ** | 
|---|
|  | 21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition | 
|---|
|  | 22 | ** licenses may use this file in accordance with the Qt Commercial License | 
|---|
|  | 23 | ** Agreement provided with the Software. | 
|---|
|  | 24 | ** | 
|---|
|  | 25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 
|---|
|  | 26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 
|---|
|  | 27 | ** | 
|---|
|  | 28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for | 
|---|
|  | 29 | **   information about Qt Commercial License Agreements. | 
|---|
|  | 30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. | 
|---|
|  | 31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 
|---|
|  | 32 | ** | 
|---|
|  | 33 | ** Contact info@trolltech.com if any conditions of this licensing are | 
|---|
|  | 34 | ** not clear to you. | 
|---|
|  | 35 | ** | 
|---|
|  | 36 | **********************************************************************/ | 
|---|
|  | 37 |  | 
|---|
|  | 38 | #ifndef QPAINTER_H | 
|---|
|  | 39 | #define QPAINTER_H | 
|---|
|  | 40 |  | 
|---|
|  | 41 |  | 
|---|
|  | 42 | #ifndef QT_H | 
|---|
|  | 43 | #include "qcolor.h" | 
|---|
|  | 44 | #include "qfontmetrics.h" | 
|---|
|  | 45 | #include "qfontinfo.h" | 
|---|
|  | 46 | #include "qregion.h" | 
|---|
|  | 47 | #include "qpen.h" | 
|---|
|  | 48 | #include "qbrush.h" | 
|---|
|  | 49 | #include "qpointarray.h" | 
|---|
|  | 50 | #include "qwmatrix.h" | 
|---|
|  | 51 | #endif // QT_H | 
|---|
|  | 52 |  | 
|---|
|  | 53 | class QGfx; | 
|---|
|  | 54 | class QTextCodec; | 
|---|
|  | 55 | class QTextParag; | 
|---|
|  | 56 | class QPaintDevice; | 
|---|
|  | 57 | class QTextItem; | 
|---|
|  | 58 | #if defined( Q_WS_MAC ) | 
|---|
|  | 59 | class QMacSavedPortInfo; | 
|---|
|  | 60 | #endif | 
|---|
|  | 61 | class QPainterPrivate; | 
|---|
|  | 62 |  | 
|---|
|  | 63 | class Q_EXPORT QPainter : public Qt | 
|---|
|  | 64 | { | 
|---|
|  | 65 | public: | 
|---|
|  | 66 | enum CoordinateMode { CoordDevice, CoordPainter }; | 
|---|
|  | 67 |  | 
|---|
|  | 68 | QPainter(); | 
|---|
|  | 69 | QPainter( const QPaintDevice *, bool unclipped = FALSE ); | 
|---|
|  | 70 | QPainter( const QPaintDevice *, const QWidget *, bool unclipped = FALSE ); | 
|---|
|  | 71 | ~QPainter(); | 
|---|
|  | 72 |  | 
|---|
|  | 73 | bool        begin( const QPaintDevice *, bool unclipped = FALSE ); | 
|---|
|  | 74 | bool        begin( const QPaintDevice *, const QWidget *, bool unclipped = FALSE ); | 
|---|
|  | 75 | bool        end(); | 
|---|
|  | 76 | QPaintDevice *device() const; | 
|---|
|  | 77 |  | 
|---|
|  | 78 | #ifdef Q_WS_QWS | 
|---|
|  | 79 | QGfx * internalGfx(); | 
|---|
|  | 80 | #endif | 
|---|
|  | 81 |  | 
|---|
|  | 82 | static void redirect( QPaintDevice *pdev, QPaintDevice *replacement ); | 
|---|
|  | 83 | static QPaintDevice *redirect( QPaintDevice *pdev ); | 
|---|
|  | 84 |  | 
|---|
|  | 85 | bool        isActive() const; | 
|---|
|  | 86 |  | 
|---|
|  | 87 | void        flush( const QRegion ®ion, CoordinateMode cm = CoordDevice ); | 
|---|
|  | 88 | void        flush(); | 
|---|
|  | 89 | void        save(); | 
|---|
|  | 90 | void        restore(); | 
|---|
|  | 91 |  | 
|---|
|  | 92 | // Drawing tools | 
|---|
|  | 93 |  | 
|---|
|  | 94 | QFontMetrics fontMetrics()  const; | 
|---|
|  | 95 | QFontInfo    fontInfo()     const; | 
|---|
|  | 96 |  | 
|---|
|  | 97 | const QFont &font()         const; | 
|---|
|  | 98 | void        setFont( const QFont & ); | 
|---|
|  | 99 | const QPen &pen()           const; | 
|---|
|  | 100 | void        setPen( const QPen & ); | 
|---|
|  | 101 | void        setPen( PenStyle ); | 
|---|
|  | 102 | void        setPen( const QColor & ); | 
|---|
|  | 103 | const QBrush &brush()       const; | 
|---|
|  | 104 | void        setBrush( const QBrush & ); | 
|---|
|  | 105 | void        setBrush( BrushStyle ); | 
|---|
|  | 106 | void        setBrush( const QColor & ); | 
|---|
|  | 107 | QPoint      pos() const; | 
|---|
|  | 108 |  | 
|---|
|  | 109 | // Drawing attributes/modes | 
|---|
|  | 110 |  | 
|---|
|  | 111 | const QColor &backgroundColor() const; | 
|---|
|  | 112 | void        setBackgroundColor( const QColor & ); | 
|---|
|  | 113 | BGMode      backgroundMode() const; | 
|---|
|  | 114 | void        setBackgroundMode( BGMode ); | 
|---|
|  | 115 | RasterOp    rasterOp()      const; | 
|---|
|  | 116 | void        setRasterOp( RasterOp ); | 
|---|
|  | 117 | const QPoint &brushOrigin() const; | 
|---|
|  | 118 | void        setBrushOrigin( int x, int y ); | 
|---|
|  | 119 | void        setBrushOrigin( const QPoint & ); | 
|---|
|  | 120 |  | 
|---|
|  | 121 | // Scaling and transformations | 
|---|
|  | 122 |  | 
|---|
|  | 123 | //    PaintUnit unit()         const;           // get set painter unit | 
|---|
|  | 124 | //    void      setUnit( PaintUnit );           // NOT IMPLEMENTED!!! | 
|---|
|  | 125 |  | 
|---|
|  | 126 | bool        hasViewXForm() const; | 
|---|
|  | 127 | bool        hasWorldXForm() const; | 
|---|
|  | 128 |  | 
|---|
|  | 129 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 130 | void        setViewXForm( bool );           // set xform on/off | 
|---|
|  | 131 | QRect       window()       const;           // get window | 
|---|
|  | 132 | void        setWindow( const QRect & );     // set window | 
|---|
|  | 133 | void        setWindow( int x, int y, int w, int h ); | 
|---|
|  | 134 | QRect       viewport()   const;             // get viewport | 
|---|
|  | 135 | void        setViewport( const QRect & );   // set viewport | 
|---|
|  | 136 | void        setViewport( int x, int y, int w, int h ); | 
|---|
|  | 137 |  | 
|---|
|  | 138 | void        setWorldXForm( bool );          // set world xform on/off | 
|---|
|  | 139 | const QWMatrix &worldMatrix() const;        // get/set world xform matrix | 
|---|
|  | 140 | void        setWorldMatrix( const QWMatrix &, bool combine=FALSE ); | 
|---|
|  | 141 |  | 
|---|
|  | 142 | void        saveWorldMatrix(); | 
|---|
|  | 143 | void        restoreWorldMatrix(); | 
|---|
|  | 144 |  | 
|---|
|  | 145 | void        scale( double sx, double sy ); | 
|---|
|  | 146 | void        shear( double sh, double sv ); | 
|---|
|  | 147 | void        rotate( double a ); | 
|---|
|  | 148 | #endif | 
|---|
|  | 149 | void        translate( double dx, double dy ); | 
|---|
|  | 150 | void        resetXForm(); | 
|---|
|  | 151 | double      translationX() const; | 
|---|
|  | 152 | double      translationY() const; | 
|---|
|  | 153 |  | 
|---|
|  | 154 | QPoint      xForm( const QPoint & ) const;  // map virtual -> device | 
|---|
|  | 155 | QRect       xForm( const QRect & )  const; | 
|---|
|  | 156 | QPointArray xForm( const QPointArray & ) const; | 
|---|
|  | 157 | QPointArray xForm( const QPointArray &, int index, int npoints ) const; | 
|---|
|  | 158 | QPoint      xFormDev( const QPoint & ) const; // map device -> virtual | 
|---|
|  | 159 | QRect       xFormDev( const QRect & )  const; | 
|---|
|  | 160 | QPointArray xFormDev( const QPointArray & ) const; | 
|---|
|  | 161 | QPointArray xFormDev( const QPointArray &, int index, int npoints ) const; | 
|---|
|  | 162 |  | 
|---|
|  | 163 | // Clipping | 
|---|
|  | 164 |  | 
|---|
|  | 165 | void        setClipping( bool );            // set clipping on/off | 
|---|
|  | 166 | bool        hasClipping() const; | 
|---|
|  | 167 | QRegion clipRegion( CoordinateMode = CoordDevice ) const; | 
|---|
|  | 168 | void        setClipRect( const QRect &, CoordinateMode = CoordDevice );     // set clip rectangle | 
|---|
|  | 169 | void        setClipRect( int x, int y, int w, int h, CoordinateMode = CoordDevice ); | 
|---|
|  | 170 | void        setClipRegion( const QRegion &, CoordinateMode = CoordDevice );// set clip region | 
|---|
|  | 171 |  | 
|---|
|  | 172 | // Graphics drawing functions | 
|---|
|  | 173 |  | 
|---|
|  | 174 | void        drawPoint( int x, int y ); | 
|---|
|  | 175 | void        drawPoint( const QPoint & ); | 
|---|
|  | 176 | void        drawPoints( const QPointArray& a, | 
|---|
|  | 177 | int index=0, int npoints=-1 ); | 
|---|
|  | 178 | void        moveTo( int x, int y ); | 
|---|
|  | 179 | void        moveTo( const QPoint & ); | 
|---|
|  | 180 | void        lineTo( int x, int y ); | 
|---|
|  | 181 | void        lineTo( const QPoint & ); | 
|---|
|  | 182 | void        drawLine( int x1, int y1, int x2, int y2 ); | 
|---|
|  | 183 | void        drawLine( const QPoint &, const QPoint & ); | 
|---|
|  | 184 | void        drawRect( int x, int y, int w, int h ); | 
|---|
|  | 185 | void        drawRect( const QRect & ); | 
|---|
|  | 186 | void        drawWinFocusRect( int x, int y, int w, int h ); | 
|---|
|  | 187 | void        drawWinFocusRect( int x, int y, int w, int h, | 
|---|
|  | 188 | const QColor &bgColor ); | 
|---|
|  | 189 | void        drawWinFocusRect( const QRect & ); | 
|---|
|  | 190 | void        drawWinFocusRect( const QRect &, | 
|---|
|  | 191 | const QColor &bgColor ); | 
|---|
|  | 192 | void        drawRoundRect( int x, int y, int w, int h, int = 25, int = 25 ); | 
|---|
|  | 193 | void        drawRoundRect( const QRect &, int = 25, int = 25 ); | 
|---|
|  | 194 | void        drawEllipse( int x, int y, int w, int h ); | 
|---|
|  | 195 | void        drawEllipse( const QRect & ); | 
|---|
|  | 196 | void        drawArc( int x, int y, int w, int h, int a, int alen ); | 
|---|
|  | 197 | void        drawArc( const QRect &, int a, int alen ); | 
|---|
|  | 198 | void        drawPie( int x, int y, int w, int h, int a, int alen ); | 
|---|
|  | 199 | void        drawPie( const QRect &, int a, int alen ); | 
|---|
|  | 200 | void        drawChord( int x, int y, int w, int h, int a, int alen ); | 
|---|
|  | 201 | void        drawChord( const QRect &, int a, int alen ); | 
|---|
|  | 202 | void        drawLineSegments( const QPointArray &, | 
|---|
|  | 203 | int index=0, int nlines=-1 ); | 
|---|
|  | 204 | void        drawPolyline( const QPointArray &, | 
|---|
|  | 205 | int index=0, int npoints=-1 ); | 
|---|
|  | 206 | void        drawPolygon( const QPointArray &, bool winding=FALSE, | 
|---|
|  | 207 | int index=0, int npoints=-1 ); | 
|---|
|  | 208 | void        drawConvexPolygon( const QPointArray &, | 
|---|
|  | 209 | int index=0, int npoints=-1 ); | 
|---|
|  | 210 | #ifndef QT_NO_BEZIER | 
|---|
|  | 211 | void        drawCubicBezier( const QPointArray &, int index=0 ); | 
|---|
|  | 212 | #endif | 
|---|
|  | 213 | void        drawPixmap( int x, int y, const QPixmap &, | 
|---|
|  | 214 | int sx=0, int sy=0, int sw=-1, int sh=-1 ); | 
|---|
|  | 215 | void        drawPixmap( const QPoint &, const QPixmap &, | 
|---|
|  | 216 | const QRect &sr ); | 
|---|
|  | 217 | void        drawPixmap( const QPoint &, const QPixmap & ); | 
|---|
|  | 218 | void        drawPixmap( const QRect &, const QPixmap & ); | 
|---|
|  | 219 | void        drawImage( int x, int y, const QImage &, | 
|---|
|  | 220 | int sx = 0, int sy = 0, int sw = -1, int sh = -1, | 
|---|
|  | 221 | int conversionFlags = 0 ); | 
|---|
|  | 222 | void        drawImage( const QPoint &, const QImage &, | 
|---|
|  | 223 | const QRect &sr, int conversionFlags = 0 ); | 
|---|
|  | 224 | void        drawImage( const QPoint &, const QImage &, | 
|---|
|  | 225 | int conversion_flags = 0 ); | 
|---|
|  | 226 | void        drawImage( const QRect &, const QImage & ); | 
|---|
|  | 227 | void        drawTiledPixmap( int x, int y, int w, int h, const QPixmap &, | 
|---|
|  | 228 | int sx=0, int sy=0 ); | 
|---|
|  | 229 | void        drawTiledPixmap( const QRect &, const QPixmap &, | 
|---|
|  | 230 | const QPoint & ); | 
|---|
|  | 231 | void        drawTiledPixmap( const QRect &, const QPixmap & ); | 
|---|
|  | 232 | #ifndef QT_NO_PICTURE | 
|---|
|  | 233 | void        drawPicture( const QPicture & ); | 
|---|
|  | 234 | void        drawPicture( int x, int y, const QPicture & ); | 
|---|
|  | 235 | void        drawPicture( const QPoint &, const QPicture & ); | 
|---|
|  | 236 | #endif | 
|---|
|  | 237 |  | 
|---|
|  | 238 | void        fillRect( int x, int y, int w, int h, const QBrush & ); | 
|---|
|  | 239 | void        fillRect( const QRect &, const QBrush & ); | 
|---|
|  | 240 | void        eraseRect( int x, int y, int w, int h ); | 
|---|
|  | 241 | void        eraseRect( const QRect & ); | 
|---|
|  | 242 |  | 
|---|
|  | 243 | // Text drawing functions | 
|---|
|  | 244 |  | 
|---|
|  | 245 | enum TextDirection { | 
|---|
|  | 246 | Auto, | 
|---|
|  | 247 | RTL, | 
|---|
|  | 248 | LTR | 
|---|
|  | 249 | }; | 
|---|
|  | 250 |  | 
|---|
|  | 251 | void        drawText( int x, int y, const QString &, int len = -1, TextDirection dir = Auto ); | 
|---|
|  | 252 | void        drawText( const QPoint &, const QString &, int len = -1, TextDirection dir = Auto ); | 
|---|
|  | 253 |  | 
|---|
|  | 254 | void     drawText( int x, int y, const QString &, int pos, int len, TextDirection dir = Auto ); | 
|---|
|  | 255 | void     drawText( const QPoint &p, const QString &, int pos, int len, TextDirection dir = Auto ); | 
|---|
|  | 256 |  | 
|---|
|  | 257 | void        drawText( int x, int y, int w, int h, int flags, | 
|---|
|  | 258 | const QString&, int len = -1, QRect *br=0, | 
|---|
|  | 259 | QTextParag **intern=0 ); | 
|---|
|  | 260 | void        drawText( const QRect &, int flags, | 
|---|
|  | 261 | const QString&, int len = -1, QRect *br=0, | 
|---|
|  | 262 | QTextParag **intern=0 ); | 
|---|
|  | 263 |  | 
|---|
|  | 264 | void drawTextItem( int x, int y, const QTextItem &ti, int textflags = 0 ); | 
|---|
|  | 265 | void drawTextItem( const QPoint& p, const QTextItem &ti, int textflags = 0 ); | 
|---|
|  | 266 |  | 
|---|
|  | 267 | QRect       boundingRect( int x, int y, int w, int h, int flags, | 
|---|
|  | 268 | const QString&, int len = -1, QTextParag **intern=0 ); | 
|---|
|  | 269 | QRect       boundingRect( const QRect &, int flags, | 
|---|
|  | 270 | const QString&, int len = -1, QTextParag **intern=0 ); | 
|---|
|  | 271 |  | 
|---|
|  | 272 | int         tabStops() const; | 
|---|
|  | 273 | void        setTabStops( int ); | 
|---|
|  | 274 | int        *tabArray() const; | 
|---|
|  | 275 | void        setTabArray( int * ); | 
|---|
|  | 276 |  | 
|---|
|  | 277 | // Other functions | 
|---|
|  | 278 |  | 
|---|
|  | 279 | #if defined(Q_WS_WIN) | 
|---|
|  | 280 | HDC         handle() const; | 
|---|
| [8] | 281 | #elif defined(Q_WS_PM) | 
|---|
|  | 282 | HPS         handle() const; | 
|---|
| [2] | 283 | #elif defined(Q_WS_X11) || defined(Q_WS_MAC) | 
|---|
|  | 284 | HANDLE      handle() const; | 
|---|
|  | 285 | #endif | 
|---|
|  | 286 |  | 
|---|
|  | 287 |  | 
|---|
|  | 288 | static void initialize(); | 
|---|
|  | 289 | static void cleanup(); | 
|---|
|  | 290 |  | 
|---|
|  | 291 | private: | 
|---|
|  | 292 | void        init(); | 
|---|
|  | 293 | void        destroy(); | 
|---|
|  | 294 | void        updateFont(); | 
|---|
|  | 295 | void        updatePen(); | 
|---|
|  | 296 | void        updateBrush(); | 
|---|
|  | 297 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 298 | void        updateXForm(); | 
|---|
|  | 299 | void        updateInvXForm(); | 
|---|
|  | 300 | #endif | 
|---|
|  | 301 | void        map( int, int, int *rx, int *ry ) const; | 
|---|
|  | 302 | void        map( int, int, int, int, int *, int *, int *, int * ) const; | 
|---|
|  | 303 | void        mapInv( int, int, int *, int * ) const; | 
|---|
|  | 304 | void        mapInv( int, int, int, int, int *, int *, int *, int * ) const; | 
|---|
| [8] | 305 | #if defined(Q_WS_PM) | 
|---|
|  | 306 | void        drawPolyInternal( const QPointArray &, bool close=TRUE, | 
|---|
|  | 307 | bool winding=FALSE, int index=0, int npoints=-1, | 
|---|
|  | 308 | bool disjoint=FALSE ); | 
|---|
|  | 309 | enum        ArcClose { CloseNone, CloseChord, ClosePie }; | 
|---|
|  | 310 | void        drawArcInternal( int x, int y, int w, int h, int a = 0, | 
|---|
|  | 311 | int alen = 360*16, ArcClose close = CloseChord ); | 
|---|
|  | 312 | void        drawWinFocusRectInternal( int x, int y, int w, int h, | 
|---|
|  | 313 | const QColor &bgCol, bool xormode ); | 
|---|
|  | 314 | void        drawRectInternal( int x, int y, int w, int h, int wRnd, int hRnd ); | 
|---|
|  | 315 | #else | 
|---|
| [2] | 316 | void        drawPolyInternal( const QPointArray &, bool close=TRUE ); | 
|---|
| [8] | 317 | #endif | 
|---|
| [2] | 318 | void        drawWinFocusRect( int x, int y, int w, int h, bool xorPaint, | 
|---|
|  | 319 | const QColor &penColor ); | 
|---|
|  | 320 |  | 
|---|
|  | 321 | enum { IsActive=0x01, ExtDev=0x02, IsStartingUp=0x04, NoCache=0x08, | 
|---|
|  | 322 | VxF=0x10, WxF=0x20, ClipOn=0x40, SafePolygon=0x80, MonoDev=0x100, | 
|---|
|  | 323 | DirtyFont=0x200, DirtyPen=0x400, DirtyBrush=0x800, | 
|---|
|  | 324 | RGBColor=0x1000, FontMet=0x2000, FontInf=0x4000, CtorBegin=0x8000, | 
|---|
|  | 325 | UsePrivateCx = 0x10000, VolatileDC = 0x20000, Qt2Compat = 0x40000 }; | 
|---|
|  | 326 | uint        flags; | 
|---|
|  | 327 | bool        testf( uint b ) const { return (flags&b)!=0; } | 
|---|
|  | 328 | void        setf( uint b )  { flags |= b; } | 
|---|
|  | 329 | void        setf( uint b, bool v ); | 
|---|
|  | 330 | void        clearf( uint b )        { flags &= (uint)(~b); } | 
|---|
|  | 331 | void        fix_neg_rect( int *x, int *y, int *w, int *h ); | 
|---|
|  | 332 |  | 
|---|
|  | 333 | QPainterPrivate *d; | 
|---|
|  | 334 | QPaintDevice *pdev; | 
|---|
|  | 335 | QColor      bg_col; | 
|---|
|  | 336 | uchar       bg_mode; | 
|---|
|  | 337 | uchar       rop; | 
|---|
|  | 338 | uchar       pu; | 
|---|
|  | 339 | QPoint      bro; | 
|---|
|  | 340 | QFont       cfont; | 
|---|
|  | 341 | QFont *pfont;       // font used for metrics (might be different for printers) | 
|---|
|  | 342 | QPen        cpen; | 
|---|
|  | 343 | QBrush      cbrush; | 
|---|
|  | 344 | QRegion     crgn; | 
|---|
|  | 345 | int         tabstops; | 
|---|
|  | 346 | int        *tabarray; | 
|---|
|  | 347 | int         tabarraylen; | 
|---|
|  | 348 | bool        block_ext;      // for temporary blocking of external devices | 
|---|
|  | 349 |  | 
|---|
|  | 350 | // Transformations | 
|---|
|  | 351 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 352 | QCOORD      wx, wy, ww, wh; | 
|---|
|  | 353 | QCOORD      vx, vy, vw, vh; | 
|---|
|  | 354 | QWMatrix    wxmat; | 
|---|
|  | 355 |  | 
|---|
|  | 356 | // Cached composition (and inverse) of transformations | 
|---|
|  | 357 | QWMatrix    xmat; | 
|---|
|  | 358 | QWMatrix    ixmat; | 
|---|
|  | 359 |  | 
|---|
|  | 360 |  | 
|---|
|  | 361 |  | 
|---|
|  | 362 | double      m11() const { return xmat.m11(); } | 
|---|
|  | 363 | double      m12() const { return xmat.m12(); } | 
|---|
|  | 364 | double      m21() const { return xmat.m21(); } | 
|---|
|  | 365 | double      m22() const { return xmat.m22(); } | 
|---|
|  | 366 | double      dx() const { return xmat.dx(); } | 
|---|
|  | 367 | double      dy() const { return xmat.dy(); } | 
|---|
|  | 368 | double      im11() const { return ixmat.m11(); } | 
|---|
|  | 369 | double      im12() const { return ixmat.m12(); } | 
|---|
|  | 370 | double      im21() const { return ixmat.m21(); } | 
|---|
|  | 371 | double      im22() const { return ixmat.m22(); } | 
|---|
|  | 372 | double      idx() const { return ixmat.dx(); } | 
|---|
|  | 373 | double      idy() const { return ixmat.dy(); } | 
|---|
|  | 374 |  | 
|---|
|  | 375 | int         txop; | 
|---|
|  | 376 | bool        txinv; | 
|---|
|  | 377 |  | 
|---|
|  | 378 | #else | 
|---|
|  | 379 | // even without transformations we still have translations | 
|---|
|  | 380 | int         xlatex; | 
|---|
|  | 381 | int         xlatey; | 
|---|
|  | 382 | #endif | 
|---|
|  | 383 |  | 
|---|
| [8] | 384 | #if !defined(Q_WS_PM) | 
|---|
| [2] | 385 | void       *penRef;                         // pen cache ref | 
|---|
|  | 386 | void       *brushRef;                       // brush cache ref | 
|---|
| [8] | 387 | #endif | 
|---|
| [2] | 388 | void       *ps_stack; | 
|---|
|  | 389 | void       *wm_stack; | 
|---|
|  | 390 | void        killPStack(); | 
|---|
|  | 391 |  | 
|---|
|  | 392 | protected: | 
|---|
|  | 393 | #ifdef Q_OS_TEMP | 
|---|
|  | 394 | QPoint      internalCurrentPos; | 
|---|
|  | 395 | uint        old_pix;                        // ### All win platforms in 4.0 | 
|---|
|  | 396 | #endif | 
|---|
|  | 397 | #if defined(Q_WS_WIN) | 
|---|
|  | 398 | friend class QFontEngineWin; | 
|---|
|  | 399 | friend class QFontEngineBox; | 
|---|
|  | 400 | QT_WIN_PAINTER_MEMBERS | 
|---|
| [8] | 401 | #elif defined(Q_WS_PM) | 
|---|
|  | 402 | bool setNativeXForm( bool assumeYNegation ); | 
|---|
|  | 403 | void clearNativeXForm(); | 
|---|
|  | 404 | friend class QFontEnginePM; | 
|---|
|  | 405 | HPS         hps; | 
|---|
|  | 406 | HPAL        holdpal; | 
|---|
|  | 407 | HRGN        holdrgn; | 
|---|
|  | 408 | HBITMAP     hbrushbm; | 
|---|
|  | 409 | uint        nocolBrush  : 1; | 
|---|
|  | 410 | uint        pixmapBrush : 1; | 
|---|
|  | 411 | int         devh; | 
|---|
|  | 412 | QRegion     repaintRgn; | 
|---|
| [2] | 413 | #elif defined(Q_WS_X11) | 
|---|
|  | 414 | friend class QFontEngineXLFD; | 
|---|
|  | 415 | friend class QFontEngineXft; | 
|---|
|  | 416 | friend class QFontEngineBox; | 
|---|
|  | 417 | Display    *dpy;                            // current display | 
|---|
|  | 418 | int         scrn;                           // current screen | 
|---|
|  | 419 | Qt::HANDLE  hd;                             // handle to drawable | 
|---|
|  | 420 | Qt::HANDLE  rendhd;                         // handle to Xft draw | 
|---|
|  | 421 | GC          gc;                             // graphics context (standard) | 
|---|
|  | 422 | GC          gc_brush;                       // graphics contect for brush | 
|---|
|  | 423 | QPoint      curPt;                          // current point | 
|---|
|  | 424 | uint        clip_serial;                    // clipping serial number | 
|---|
|  | 425 | #elif defined(Q_WS_MAC) | 
|---|
|  | 426 | Qt::HANDLE  hd;                             // handle to drawable | 
|---|
|  | 427 | void initPaintDevice(bool force=FALSE, QPoint *off=NULL, QRegion *rgn=NULL); | 
|---|
|  | 428 | friend const QRegion &qt_mac_update_painter(QPainter *, bool); | 
|---|
|  | 429 | friend class QFontEngineMac; | 
|---|
|  | 430 | friend class QMacPainter; | 
|---|
|  | 431 | #elif defined(Q_WS_QWS) | 
|---|
|  | 432 | friend class QFontEngine; | 
|---|
|  | 433 | QGfx * gfx; | 
|---|
|  | 434 | friend void qwsUpdateActivePainters(); | 
|---|
|  | 435 | #endif | 
|---|
|  | 436 | friend class QFontMetrics; | 
|---|
|  | 437 | friend class QFontInfo; | 
|---|
|  | 438 | friend class QTextLayout; | 
|---|
|  | 439 | friend void qt_format_text( const QFont &, const QRect &r, | 
|---|
|  | 440 | int tf, const QString& str, int len, QRect *brect, | 
|---|
|  | 441 | int tabstops, int* tabarray, int tabarraylen, | 
|---|
|  | 442 | QTextParag **internal, QPainter* painter ); | 
|---|
|  | 443 | friend void qt_draw_background( QPainter *p, int x, int y, int w,  int h ); | 
|---|
|  | 444 | friend void qt_draw_transformed_rect( QPainter *p,  int x, int y, int w,  int h, bool fill ); | 
|---|
|  | 445 | friend class QPrinter; | 
|---|
|  | 446 |  | 
|---|
|  | 447 | private:        // Disabled copy constructor and operator= | 
|---|
|  | 448 | #if defined(Q_DISABLE_COPY) | 
|---|
|  | 449 | QPainter( const QPainter & ); | 
|---|
|  | 450 | QPainter &operator=( const QPainter & ); | 
|---|
|  | 451 | #endif | 
|---|
|  | 452 |  | 
|---|
|  | 453 | enum TransformationCodes { | 
|---|
|  | 454 | TxNone      = 0,                // transformation codes | 
|---|
|  | 455 | TxTranslate = 1,                // copy in qpainter_*.cpp | 
|---|
|  | 456 | TxScale     = 2, | 
|---|
|  | 457 | TxRotShear  = 3 | 
|---|
|  | 458 | }; | 
|---|
|  | 459 | }; | 
|---|
|  | 460 |  | 
|---|
|  | 461 |  | 
|---|
|  | 462 | /***************************************************************************** | 
|---|
|  | 463 | QPainter member functions | 
|---|
|  | 464 | *****************************************************************************/ | 
|---|
|  | 465 |  | 
|---|
|  | 466 | inline QPaintDevice *QPainter::device() const | 
|---|
|  | 467 | { | 
|---|
|  | 468 | return pdev; | 
|---|
|  | 469 | } | 
|---|
|  | 470 |  | 
|---|
|  | 471 | inline bool QPainter::isActive() const | 
|---|
|  | 472 | { | 
|---|
|  | 473 | return testf(IsActive); | 
|---|
|  | 474 | } | 
|---|
|  | 475 |  | 
|---|
|  | 476 | inline const QFont &QPainter::font() const | 
|---|
|  | 477 | { | 
|---|
|  | 478 | return cfont; | 
|---|
|  | 479 | } | 
|---|
|  | 480 |  | 
|---|
|  | 481 | inline const QPen &QPainter::pen() const | 
|---|
|  | 482 | { | 
|---|
|  | 483 | return cpen; | 
|---|
|  | 484 | } | 
|---|
|  | 485 |  | 
|---|
|  | 486 | inline const QBrush &QPainter::brush() const | 
|---|
|  | 487 | { | 
|---|
|  | 488 | return cbrush; | 
|---|
|  | 489 | } | 
|---|
|  | 490 |  | 
|---|
|  | 491 | /* | 
|---|
|  | 492 | inline PaintUnit QPainter::unit() const | 
|---|
|  | 493 | { | 
|---|
|  | 494 | return (PaintUnit)pu; | 
|---|
|  | 495 | } | 
|---|
|  | 496 | */ | 
|---|
|  | 497 |  | 
|---|
|  | 498 | inline const QColor &QPainter::backgroundColor() const | 
|---|
|  | 499 | { | 
|---|
|  | 500 | return bg_col; | 
|---|
|  | 501 | } | 
|---|
|  | 502 |  | 
|---|
|  | 503 | inline Qt::BGMode QPainter::backgroundMode() const | 
|---|
|  | 504 | { | 
|---|
|  | 505 | return (BGMode)bg_mode; | 
|---|
|  | 506 | } | 
|---|
|  | 507 |  | 
|---|
|  | 508 | inline Qt::RasterOp QPainter::rasterOp() const | 
|---|
|  | 509 | { | 
|---|
|  | 510 | return (RasterOp)rop; | 
|---|
|  | 511 | } | 
|---|
|  | 512 |  | 
|---|
|  | 513 | inline const QPoint &QPainter::brushOrigin() const | 
|---|
|  | 514 | { | 
|---|
|  | 515 | return bro; | 
|---|
|  | 516 | } | 
|---|
|  | 517 |  | 
|---|
|  | 518 | inline bool QPainter::hasViewXForm() const | 
|---|
|  | 519 | { | 
|---|
|  | 520 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 521 | return testf(VxF); | 
|---|
|  | 522 | #else | 
|---|
|  | 523 | return xlatex || xlatey; | 
|---|
|  | 524 | #endif | 
|---|
|  | 525 | } | 
|---|
|  | 526 |  | 
|---|
|  | 527 | inline bool QPainter::hasWorldXForm() const | 
|---|
|  | 528 | { | 
|---|
|  | 529 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 530 | return testf(WxF); | 
|---|
|  | 531 | #else | 
|---|
|  | 532 | return xlatex || xlatey; | 
|---|
|  | 533 | #endif | 
|---|
|  | 534 | } | 
|---|
|  | 535 |  | 
|---|
|  | 536 | inline double QPainter::translationX() const | 
|---|
|  | 537 | { | 
|---|
|  | 538 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 539 | return worldMatrix().dx(); | 
|---|
|  | 540 | #else | 
|---|
|  | 541 | return xlatex; | 
|---|
|  | 542 | #endif | 
|---|
|  | 543 | } | 
|---|
|  | 544 |  | 
|---|
|  | 545 | inline double QPainter::translationY() const | 
|---|
|  | 546 | { | 
|---|
|  | 547 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 548 | return worldMatrix().dy(); | 
|---|
|  | 549 | #else | 
|---|
|  | 550 | return xlatey; | 
|---|
|  | 551 | #endif | 
|---|
|  | 552 | } | 
|---|
|  | 553 |  | 
|---|
|  | 554 |  | 
|---|
|  | 555 | inline bool QPainter::hasClipping() const | 
|---|
|  | 556 | { | 
|---|
|  | 557 | return testf(ClipOn); | 
|---|
|  | 558 | } | 
|---|
|  | 559 |  | 
|---|
|  | 560 | inline int QPainter::tabStops() const | 
|---|
|  | 561 | { | 
|---|
|  | 562 | return tabstops; | 
|---|
|  | 563 | } | 
|---|
|  | 564 |  | 
|---|
|  | 565 | inline int *QPainter::tabArray() const | 
|---|
|  | 566 | { | 
|---|
|  | 567 | return tabarray; | 
|---|
|  | 568 | } | 
|---|
|  | 569 |  | 
|---|
|  | 570 | #if defined(Q_WS_WIN) | 
|---|
|  | 571 | inline HDC QPainter::handle() const | 
|---|
|  | 572 | { | 
|---|
|  | 573 | return hdc; | 
|---|
|  | 574 | } | 
|---|
| [8] | 575 | #elif defined(Q_WS_PM) | 
|---|
|  | 576 | inline HPS QPainter::handle() const | 
|---|
|  | 577 | { | 
|---|
|  | 578 | return hps; | 
|---|
|  | 579 | } | 
|---|
| [2] | 580 | #elif defined(Q_WS_X11) || defined(Q_WS_MAC) | 
|---|
|  | 581 | inline Qt::HANDLE QPainter::handle() const | 
|---|
|  | 582 | { | 
|---|
|  | 583 | return hd; | 
|---|
|  | 584 | } | 
|---|
|  | 585 | #endif | 
|---|
|  | 586 |  | 
|---|
|  | 587 | inline void QPainter::setBrushOrigin( const QPoint &p ) | 
|---|
|  | 588 | { | 
|---|
|  | 589 | setBrushOrigin( p.x(), p.y() ); | 
|---|
|  | 590 | } | 
|---|
|  | 591 |  | 
|---|
|  | 592 | #ifndef QT_NO_TRANSFORMATIONS | 
|---|
|  | 593 | inline void QPainter::setWindow( const QRect &r ) | 
|---|
|  | 594 | { | 
|---|
|  | 595 | setWindow( r.x(), r.y(), r.width(), r.height() ); | 
|---|
|  | 596 | } | 
|---|
|  | 597 |  | 
|---|
|  | 598 | inline void QPainter::setViewport( const QRect &r ) | 
|---|
|  | 599 | { | 
|---|
|  | 600 | setViewport( r.x(), r.y(), r.width(), r.height() ); | 
|---|
|  | 601 | } | 
|---|
|  | 602 | #endif | 
|---|
|  | 603 |  | 
|---|
|  | 604 | inline void QPainter::setClipRect( int x, int y, int w, int h, CoordinateMode m ) | 
|---|
|  | 605 | { | 
|---|
|  | 606 | setClipRect( QRect(x,y,w,h), m ); | 
|---|
|  | 607 | } | 
|---|
|  | 608 |  | 
|---|
|  | 609 | inline void QPainter::drawPoint( const QPoint &p ) | 
|---|
|  | 610 | { | 
|---|
|  | 611 | drawPoint( p.x(), p.y() ); | 
|---|
|  | 612 | } | 
|---|
|  | 613 |  | 
|---|
|  | 614 | inline void QPainter::moveTo( const QPoint &p ) | 
|---|
|  | 615 | { | 
|---|
|  | 616 | moveTo( p.x(), p.y() ); | 
|---|
|  | 617 | } | 
|---|
|  | 618 |  | 
|---|
|  | 619 | inline void QPainter::lineTo( const QPoint &p ) | 
|---|
|  | 620 | { | 
|---|
|  | 621 | lineTo( p.x(), p.y() ); | 
|---|
|  | 622 | } | 
|---|
|  | 623 |  | 
|---|
|  | 624 | inline void QPainter::drawLine( const QPoint &p1, const QPoint &p2 ) | 
|---|
|  | 625 | { | 
|---|
|  | 626 | drawLine( p1.x(), p1.y(), p2.x(), p2.y() ); | 
|---|
|  | 627 | } | 
|---|
|  | 628 |  | 
|---|
|  | 629 | inline void QPainter::drawRect( const QRect &r ) | 
|---|
|  | 630 | { | 
|---|
|  | 631 | drawRect( r.x(), r.y(), r.width(), r.height() ); | 
|---|
|  | 632 | } | 
|---|
|  | 633 |  | 
|---|
|  | 634 | inline void QPainter::drawWinFocusRect( const QRect &r ) | 
|---|
|  | 635 | { | 
|---|
|  | 636 | drawWinFocusRect( r.x(), r.y(), r.width(), r.height() ); | 
|---|
|  | 637 | } | 
|---|
|  | 638 |  | 
|---|
|  | 639 | inline void QPainter::drawWinFocusRect( const QRect &r,const QColor &penColor ) | 
|---|
|  | 640 | { | 
|---|
|  | 641 | drawWinFocusRect( r.x(), r.y(), r.width(), r.height(), penColor ); | 
|---|
|  | 642 | } | 
|---|
|  | 643 |  | 
|---|
|  | 644 | inline void QPainter::drawRoundRect( const QRect &r, int xRnd, int yRnd ) | 
|---|
|  | 645 | { | 
|---|
|  | 646 | drawRoundRect( r.x(), r.y(), r.width(), r.height(), xRnd, yRnd ); | 
|---|
|  | 647 | } | 
|---|
|  | 648 |  | 
|---|
|  | 649 | inline void QPainter::drawEllipse( const QRect &r ) | 
|---|
|  | 650 | { | 
|---|
|  | 651 | drawEllipse( r.x(), r.y(), r.width(), r.height() ); | 
|---|
|  | 652 | } | 
|---|
|  | 653 |  | 
|---|
|  | 654 | inline void QPainter::drawArc( const QRect &r, int a, int alen ) | 
|---|
|  | 655 | { | 
|---|
|  | 656 | drawArc( r.x(), r.y(), r.width(), r.height(), a, alen ); | 
|---|
|  | 657 | } | 
|---|
|  | 658 |  | 
|---|
|  | 659 | inline void QPainter::drawPie( const QRect &r, int a, int alen ) | 
|---|
|  | 660 | { | 
|---|
|  | 661 | drawPie( r.x(), r.y(), r.width(), r.height(), a, alen ); | 
|---|
|  | 662 | } | 
|---|
|  | 663 |  | 
|---|
|  | 664 | inline void QPainter::drawChord( const QRect &r, int a, int alen ) | 
|---|
|  | 665 | { | 
|---|
|  | 666 | drawChord( r.x(), r.y(), r.width(), r.height(), a, alen ); | 
|---|
|  | 667 | } | 
|---|
|  | 668 |  | 
|---|
|  | 669 | inline void QPainter::drawPixmap( const QPoint &p, const QPixmap &pm, | 
|---|
|  | 670 | const QRect &sr ) | 
|---|
|  | 671 | { | 
|---|
|  | 672 | drawPixmap( p.x(), p.y(), pm, sr.x(), sr.y(), sr.width(), sr.height() ); | 
|---|
|  | 673 | } | 
|---|
|  | 674 |  | 
|---|
|  | 675 | inline void QPainter::drawImage( const QPoint &p, const QImage &pm, | 
|---|
|  | 676 | const QRect &sr, int conversionFlags ) | 
|---|
|  | 677 | { | 
|---|
|  | 678 | drawImage( p.x(), p.y(), pm, | 
|---|
|  | 679 | sr.x(), sr.y(), sr.width(), sr.height(), conversionFlags ); | 
|---|
|  | 680 | } | 
|---|
|  | 681 |  | 
|---|
|  | 682 | inline void QPainter::drawTiledPixmap( const QRect &r, const QPixmap &pm, | 
|---|
|  | 683 | const QPoint &sp ) | 
|---|
|  | 684 | { | 
|---|
|  | 685 | drawTiledPixmap( r.x(), r.y(), r.width(), r.height(), pm, sp.x(), sp.y() ); | 
|---|
|  | 686 | } | 
|---|
|  | 687 |  | 
|---|
|  | 688 | inline void QPainter::drawTiledPixmap( const QRect &r, const QPixmap &pm ) | 
|---|
|  | 689 | { | 
|---|
|  | 690 | drawTiledPixmap( r.x(), r.y(), r.width(), r.height(), pm, 0, 0 ); | 
|---|
|  | 691 | } | 
|---|
|  | 692 |  | 
|---|
|  | 693 | inline void QPainter::fillRect( const QRect &r, const QBrush &brush ) | 
|---|
|  | 694 | { | 
|---|
|  | 695 | fillRect( r.x(), r.y(), r.width(), r.height(), brush ); | 
|---|
|  | 696 | } | 
|---|
|  | 697 |  | 
|---|
|  | 698 | inline void QPainter::eraseRect( int x, int y, int w, int h ) | 
|---|
|  | 699 | { | 
|---|
|  | 700 | fillRect( x, y, w, h, backgroundColor() ); | 
|---|
|  | 701 | } | 
|---|
|  | 702 |  | 
|---|
|  | 703 | inline void QPainter::eraseRect( const QRect &r ) | 
|---|
|  | 704 | { | 
|---|
|  | 705 | fillRect( r.x(), r.y(), r.width(), r.height(), backgroundColor() ); | 
|---|
|  | 706 | } | 
|---|
|  | 707 |  | 
|---|
|  | 708 | inline void QPainter::drawText( const QPoint &p, const QString &s, int len, TextDirection dir ) | 
|---|
|  | 709 | { | 
|---|
|  | 710 | drawText( p.x(), p.y(), s, 0, len, dir ); | 
|---|
|  | 711 | } | 
|---|
|  | 712 |  | 
|---|
|  | 713 | inline void QPainter::drawText( const QPoint &p, const QString &s, int pos, int len, TextDirection dir ) | 
|---|
|  | 714 | { | 
|---|
|  | 715 | drawText( p.x(), p.y(), s, pos, len, dir ); | 
|---|
|  | 716 | } | 
|---|
|  | 717 |  | 
|---|
|  | 718 | inline void QPainter::drawText( int x, int y, int w, int h, int tf, | 
|---|
|  | 719 | const QString& str, int len, QRect *br, QTextParag **i ) | 
|---|
|  | 720 | { | 
|---|
|  | 721 | QRect r(x, y, w, h); | 
|---|
|  | 722 | drawText( r, tf, str, len, br, i ); | 
|---|
|  | 723 | } | 
|---|
|  | 724 |  | 
|---|
|  | 725 | inline void QPainter::drawTextItem( const QPoint& p, const QTextItem &ti, int textflags ) | 
|---|
|  | 726 | { | 
|---|
|  | 727 | drawTextItem( p.x(), p.y(), ti, textflags ); | 
|---|
|  | 728 | } | 
|---|
|  | 729 |  | 
|---|
|  | 730 | inline QRect QPainter::boundingRect( int x, int y, int w, int h, int tf, | 
|---|
|  | 731 | const QString& str, int len, QTextParag **i ) | 
|---|
|  | 732 | { | 
|---|
|  | 733 | QRect r(x, y, w, h); | 
|---|
|  | 734 | return boundingRect( r, tf, str, len, i ); | 
|---|
|  | 735 | } | 
|---|
|  | 736 |  | 
|---|
|  | 737 | #if defined(Q_WS_QWS) | 
|---|
|  | 738 | inline QGfx * QPainter::internalGfx() | 
|---|
|  | 739 | { | 
|---|
|  | 740 | return gfx; | 
|---|
|  | 741 | } | 
|---|
|  | 742 | #endif | 
|---|
|  | 743 |  | 
|---|
|  | 744 | #endif // QPAINTER_H | 
|---|