QWT 7.0.1
Loading...
Searching...
No Matches
qwt_painter.h
1/******************************************************************************
2 * Qwt Widget Library
3 * Copyright (C) 1997 Josef Wilgen
4 * Copyright (C) 2002 Uwe Rathmann
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the Qwt License, Version 1.0
8 *
9 * Modified by ChenZongYan in 2024 <czy.t@163.com>
10 * Summary of major modifications (see ChangeLog.md for full history):
11 * 1. CMake build system & C++11 throughout.
12 * 2. Core panner/ zoomer refactored:
13 * - QwtPanner → QwtCachePanner (pixmap-cache version)
14 * - New real-time QwtPlotPanner derived from QwtPicker.
15 * 3. Zoomer supports multi-axis.
16 * 4. Parasite-plot framework:
17 * - QwtFigure, QwtPlotParasiteLayout, QwtPlotTransparentCanvas,
18 * - QwtPlotScaleEventDispatcher, built-in pan/zoom on axis.
19 * 5. New picker: QwtPlotSeriesDataPicker (works with date axis).
20 * 6. Raster & color-map extensions:
21 * - QwtGridRasterData (2-D table + interpolation)
22 * - QwtLinearColorMap::stopColors(), stopPos() API rename.
23 * 7. Bar-chart: expose pen/brush control.
24 * 8. Amalgamated build: single QwtPlot.h / QwtPlot.cpp pair in src-amalgamate.
25 *****************************************************************************/
26
27#ifndef QWT_PAINTER_H
28#define QWT_PAINTER_H
29
30#include "qwt_global.h"
31
32#include <qpalette.h>
33#include <qpolygon.h>
34#include <qpen.h>
35
36class QwtScaleMap;
37class QwtColorMap;
38class QwtInterval;
39
40class QPainter;
41class QBrush;
42class QWidget;
43class QImage;
44class QPixmap;
45class QFontMetrics;
46class QFontMetricsF;
47class QTextDocument;
48class QPainterPath;
49
53class QWT_EXPORT QwtPainter
54{
55public:
56 static void setPolylineSplitting(bool);
57 static bool polylineSplitting();
58
59 static void setRoundingAlignment(bool);
60 static bool roundingAlignment();
61 static bool roundingAlignment(const QPainter*);
62
63 static void drawText(QPainter*, qreal x, qreal y, const QString&);
64 static void drawText(QPainter*, const QPointF&, const QString&);
65 static void drawText(QPainter*, qreal x, qreal y, qreal w, qreal h, int flags, const QString&);
66 static void drawText(QPainter*, const QRectF&, int flags, const QString&);
67
68#ifndef QT_NO_RICHTEXT
69 static void drawSimpleRichText(QPainter*, const QRectF&, int flags, const QTextDocument&);
70#endif
71
72 static void drawRect(QPainter*, qreal x, qreal y, qreal w, qreal h);
73 static void drawRect(QPainter*, const QRectF& rect);
74 static void fillRect(QPainter*, const QRectF&, const QBrush&);
75
76 static void drawEllipse(QPainter*, const QRectF&);
77 static void drawPie(QPainter*, const QRectF& r, int a, int alen);
78
79 static void drawLine(QPainter*, qreal x1, qreal y1, qreal x2, qreal y2);
80 static void drawLine(QPainter*, const QPointF& p1, const QPointF& p2);
81 static void drawLine(QPainter*, const QLineF&);
82
83 static void drawPolygon(QPainter*, const QPolygonF&);
84 static void drawPolyline(QPainter*, const QPolygonF&);
85 static void drawPolyline(QPainter*, const QPointF*, int pointCount);
86
87 static void drawPolygon(QPainter*, const QPolygon&);
88 static void drawPolyline(QPainter*, const QPolygon&);
89 static void drawPolyline(QPainter*, const QPoint*, int pointCount);
90
91 static void drawPoint(QPainter*, const QPoint&);
92 static void drawPoints(QPainter*, const QPolygon&);
93 static void drawPoints(QPainter*, const QPoint*, int pointCount);
94
95 static void drawPoint(QPainter*, qreal x, qreal y);
96 static void drawPoint(QPainter*, const QPointF&);
97 static void drawPoints(QPainter*, const QPolygonF&);
98 static void drawPoints(QPainter*, const QPointF*, int pointCount);
99
100 static void drawPath(QPainter*, const QPainterPath&);
101 static void drawImage(QPainter*, const QRectF&, const QImage&);
102 static void drawPixmap(QPainter*, const QRectF&, const QPixmap&);
103
104 static void drawRoundFrame(QPainter*, const QRectF&, const QPalette&, int lineWidth, int frameStyle);
105
106 static void drawRoundedFrame(QPainter*, const QRectF&, qreal xRadius, qreal yRadius, const QPalette&, int lineWidth, int frameStyle);
107
108 static void drawFrame(QPainter*,
109 const QRectF& rect,
110 const QPalette& palette,
111 QPalette::ColorRole foregroundRole,
112 int lineWidth,
113 int midLineWidth,
114 int frameStyle);
115
116 static void drawFocusRect(QPainter*, const QWidget*);
117 static void drawFocusRect(QPainter*, const QWidget*, const QRect&);
118
119 static void drawColorBar(QPainter*, const QwtColorMap&, const QwtInterval&, const QwtScaleMap&, Qt::Orientation, const QRectF&);
120
121 static bool isAligning(const QPainter*);
122 static bool isX11GraphicsSystem();
123
124 static void fillPixmap(const QWidget*, QPixmap&, const QPoint& offset = QPoint());
125 static void fillRegion(QPainter* painter, const QRegion& region);
126 static void fillBackground(QPainter* painter, QWidget* widget, const QVector< QRectF >& fillRects);
127 static void fillBackground(QPainter* painter, QWidget* canvas);
128
129 static void drawBackgound(QPainter*, const QRectF&, const QWidget*);
130 // 绘制widget的背景
131 static void drawCanvasBackgound(QPainter* painter, QWidget* canvas);
132
133 static void drawStyledBackground(QWidget* w, QPainter* painter);
134
135 static QPixmap backingStore(QWidget*, const QSize&);
136 static qreal devicePixelRatio(const QPaintDevice*);
137
138 static qreal effectivePenWidth(const QPen&);
139
140 static int horizontalAdvance(const QFontMetrics&, const QString&);
141 static qreal horizontalAdvance(const QFontMetricsF&, const QString&);
142
143 static int horizontalAdvance(const QFontMetrics&, QChar);
144 static qreal horizontalAdvance(const QFontMetricsF&, QChar);
145
146 static QFont scaledFont(const QFont&, const QPaintDevice* = nullptr);
147
148 static QWidget* findBackgroundWidget(QWidget* w);
149
150private:
151 static bool m_polylineSplitting;
152 static bool m_roundingAlignment;
153};
154
156inline void QwtPainter::drawPoint(QPainter* painter, qreal x, qreal y)
157{
158 QwtPainter::drawPoint(painter, QPointF(x, y));
159}
160
162inline void QwtPainter::drawPoints(QPainter* painter, const QPolygon& polygon)
163{
164 drawPoints(painter, polygon.data(), polygon.size());
165}
166
168inline void QwtPainter::drawPoints(QPainter* painter, const QPolygonF& polygon)
169{
170 drawPoints(painter, polygon.data(), polygon.size());
171}
172
174inline void QwtPainter::drawLine(QPainter* painter, qreal x1, qreal y1, qreal x2, qreal y2)
175{
176 QwtPainter::drawLine(painter, QPointF(x1, y1), QPointF(x2, y2));
177}
178
180inline void QwtPainter::drawLine(QPainter* painter, const QLineF& line)
181{
182 QwtPainter::drawLine(painter, line.p1(), line.p2());
183}
184
190{
191 return m_polylineSplitting;
192}
193
203{
204 return m_roundingAlignment;
205}
206
211inline bool QwtPainter::roundingAlignment(const QPainter* painter)
212{
213 return m_roundingAlignment && isAligning(painter);
214}
215
220inline qreal QwtPainter::effectivePenWidth(const QPen& pen)
221{
222 const qreal width = pen.widthF();
223 return (width < 1.0) ? 1.0 : width;
224}
225
226#endif
QwtColorMap is used to map values into colors.
Definition qwt_color_map.h:56
A class representing an interval.
Definition qwt_interval.h:40
A collection of QPainter workarounds.
Definition qwt_painter.h:54
static void drawPoints(QPainter *, const QPolygon &)
Wrapper for QPainter::drawPoints()
Definition qwt_painter.h:162
static bool polylineSplitting()
Definition qwt_painter.h:189
static bool isAligning(const QPainter *)
Check if the painter is using a paint engine, that aligns coordinates to integers.
Definition qwt_painter.cpp:260
static qreal effectivePenWidth(const QPen &)
Definition qwt_painter.h:220
static void drawPoint(QPainter *, const QPoint &)
Wrapper for QPainter::drawPoint()
Definition qwt_painter.cpp:632
static bool roundingAlignment()
Check whether coordinates should be rounded, before they are painted to a paint engine that rounds to...
Definition qwt_painter.h:202
static void drawLine(QPainter *, qreal x1, qreal y1, qreal x2, qreal y2)
Wrapper for QPainter::drawLine()
Definition qwt_painter.h:174
A scale map.
Definition qwt_scale_map.h:44