10
10
#ifndef QWT_PAINTER_H
11
11
#define QWT_PAINTER_H
13
#include "qwt_global.h"
13
15
#include <qpoint.h>
16
#include "qwt_global.h"
17
#include "qwt_layout_metrics.h"
18
#include "qwt_polygon.h"
26
class QwtDoubleInterval;
28
#if QT_VERSION < 0x040000
30
class QSimpleRichText;
33
33
class QTextDocument;
37
// Warning: QCOORD_MIN, QCOORD_MAX are wrong on X11.
38
#define QWT_COORD_MAX 16384
39
#define QWT_COORD_MIN (-QWT_COORD_MAX - 1)
41
#define QWT_COORD_MAX 2147483647
42
#define QWT_COORD_MIN -QWT_COORD_MAX - 1
46
37
\brief A collection of QPainter workarounds
48
1) Clipping to coordinate system limits (Qt3 only)
50
On X11 pixel coordinates are stored in shorts. Qt
51
produces overruns when mapping QCOORDS to shorts.
53
2) Scaling to device metrics
55
QPainter scales fonts, line and fill patterns to the metrics
56
of the paint device. Other values like the geometries of rects, points
57
remain device independend. To enable a device independent widget
58
implementation, QwtPainter adds scaling of these geometries.
59
(Unfortunately QPainter::scale scales both types of paintings,
60
so the objects of the first type would be scaled twice).
63
39
class QWT_EXPORT QwtPainter
66
static void setMetricsMap(const QPaintDevice *layout,
67
const QPaintDevice *device);
68
static void setMetricsMap(const QwtMetricsMap &);
69
static void resetMetricsMap();
70
static const QwtMetricsMap &metricsMap();
72
static void setDeviceClipping(bool);
73
static bool deviceClipping();
74
static const QRect &deviceClipRect();
76
static void setClipRect(QPainter *, const QRect &);
78
static void drawText(QPainter *, int x, int y,
80
static void drawText(QPainter *, const QPoint &,
82
static void drawText(QPainter *, int x, int y, int w, int h,
83
int flags, const QString &);
84
static void drawText(QPainter *, const QRect &,
85
int flags, const QString &);
42
static void setPolylineSplitting( bool );
43
static bool polylineSplitting();
45
static void setRoundingAlignment( bool );
46
static bool roundingAlignment();
47
static bool roundingAlignment(QPainter *);
49
static void drawText( QPainter *, double x, double y, const QString & );
50
static void drawText( QPainter *, const QPointF &, const QString & );
51
static void drawText( QPainter *, double x, double y, double w, double h,
52
int flags, const QString & );
53
static void drawText( QPainter *, const QRectF &,
54
int flags, const QString & );
87
56
#ifndef QT_NO_RICHTEXT
88
#if QT_VERSION < 0x040000
89
static void drawSimpleRichText(QPainter *, const QRect &,
90
int flags, QSimpleRichText &);
92
static void drawSimpleRichText(QPainter *, const QRect &,
93
int flags, QTextDocument &);
97
static void drawRect(QPainter *, int x, int y, int w, int h);
98
static void drawRect(QPainter *, const QRect &rect);
99
static void fillRect(QPainter *, const QRect &, const QBrush &);
101
static void drawEllipse(QPainter *, const QRect &);
102
static void drawPie(QPainter *, const QRect & r, int a, int alen);
104
static void drawLine(QPainter *, int x1, int y1, int x2, int y2);
105
static void drawLine(QPainter *, const QPoint &p1, const QPoint &p2);
106
static void drawPolygon(QPainter *, const QwtPolygon &pa);
107
static void drawPolyline(QPainter *, const QwtPolygon &pa);
108
static void drawPoint(QPainter *, int x, int y);
110
#if QT_VERSION < 0x040000
111
static void drawRoundFrame(QPainter *, const QRect &,
112
int width, const QColorGroup &cg, bool sunken);
114
static void drawRoundFrame(QPainter *, const QRect &,
115
int width, const QPalette &, bool sunken);
117
static void drawFocusRect(QPainter *, QWidget *);
118
static void drawFocusRect(QPainter *, QWidget *, const QRect &);
120
static void drawColorBar(QPainter *painter,
121
const QwtColorMap &, const QwtDoubleInterval &,
122
const QwtScaleMap &, Qt::Orientation, const QRect &);
124
#if QT_VERSION < 0x040000
125
static void setSVGMode(bool on);
126
static bool isSVGMode();
129
static QPen scaledPen(const QPen &);
57
static void drawSimpleRichText( QPainter *, const QRectF &,
58
int flags, const QTextDocument & );
61
static void drawRect( QPainter *, double x, double y, double w, double h );
62
static void drawRect( QPainter *, const QRectF &rect );
63
static void fillRect( QPainter *, const QRectF &, const QBrush & );
65
static void drawEllipse( QPainter *, const QRectF & );
66
static void drawPie( QPainter *, const QRectF & r, int a, int alen );
68
static void drawLine( QPainter *, double x1, double y1, double x2, double y2 );
69
static void drawLine( QPainter *, const QPointF &p1, const QPointF &p2 );
70
static void drawLine( QPainter *, const QLineF & );
72
static void drawPolygon( QPainter *, const QPolygonF &pa );
73
static void drawPolyline( QPainter *, const QPolygonF &pa );
74
static void drawPolyline( QPainter *, const QPointF *, int pointCount );
76
static void drawPoint( QPainter *, double x, double y );
77
static void drawPoint( QPainter *, const QPointF & );
79
static void drawPath( QPainter *, const QPainterPath & );
80
static void drawImage( QPainter *, const QRectF &, const QImage & );
81
static void drawPixmap( QPainter *, const QRectF &, const QPixmap & );
83
static void drawRoundedFrame( QPainter *,
84
const QRectF &, double xRadius, double yRadius,
85
const QPalette &, int lineWidth, int frameStyle );
87
static void drawFocusRect( QPainter *, QWidget * );
88
static void drawFocusRect( QPainter *, QWidget *, const QRect & );
90
static void drawColorBar( QPainter *painter,
91
const QwtColorMap &, const QwtInterval &,
92
const QwtScaleMap &, Qt::Orientation, const QRectF & );
94
static bool isAligning( QPainter *painter );
132
static void drawColoredArc(QPainter *, const QRect &,
133
int peak, int arc, int intervall, const QColor &c1, const QColor &c2);
135
static bool d_deviceClipping;
136
static QwtMetricsMap d_metricsMap;
137
#if QT_VERSION < 0x040000
138
static bool d_SVGMode;
97
static bool d_polylineSplitting;
98
static bool d_roundingAlignment;
142
//! Wrapper for QPainter::drawLine()
143
inline void QwtPainter::drawLine(QPainter *painter,
144
const QPoint &p1, const QPoint &p2)
146
drawLine(painter, p1.x(), p1.y(), p2.x(), p2.y());
150
Returns whether device clipping is enabled. On X11 the default
151
is enabled, otherwise it is disabled.
152
\sa QwtPainter::setDeviceClipping()
154
inline bool QwtPainter::deviceClipping()
156
return d_deviceClipping;
101
//! Wrapper for QPainter::drawPoint()
102
inline void QwtPainter::drawPoint( QPainter *painter, double x, double y )
104
QwtPainter::drawPoint( painter, QPointF( x, y ) );
107
//! Wrapper for QPainter::drawLine()
108
inline void QwtPainter::drawLine( QPainter *painter,
109
double x1, double y1, double x2, double y2 )
111
QwtPainter::drawLine( painter, QPointF( x1, y1 ), QPointF( x2, y2 ) );
114
//! Wrapper for QPainter::drawLine()
115
inline void QwtPainter::drawLine( QPainter *painter, const QLineF &line )
117
QwtPainter::drawLine( painter, line.p1(), line.p2() );
121
Returns whether line splitting for the raster paint engine is enabled.
122
\sa setPolylineSplitting()
124
inline bool QwtPainter::polylineSplitting()
126
return d_polylineSplitting;
130
Returns whether coordinates should be rounded, before they are painted
131
to a paint engine that floors to integer values. For other paint engines
132
this ( Pdf, SVG ), this flag has no effect.
134
\sa setRoundingAlignment(), isAligning()
136
inline bool QwtPainter::roundingAlignment()
138
return d_roundingAlignment;
142
\return roundingAlignment() && isAligning(painter);
143
\param painter Painter
145
inline bool QwtPainter::roundingAlignment(QPainter *painter)
147
return d_roundingAlignment && isAligning(painter);