Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qpaintengine.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QPAINTENGINE_H
6#define QPAINTENGINE_H
7
8#include <QtGui/qtguiglobal.h>
9#include <QtCore/qnamespace.h>
10#include <QtCore/qobjectdefs.h>
11#include <QtCore/qscopedpointer.h>
12#include <QtGui/qpainter.h>
13
15
16
17class QFontEngine;
18class QLineF;
19class QPaintDevice;
20class QPaintEnginePrivate;
21class QPainterPath;
22class QPointF;
23class QPolygonF;
24class QRectF;
25struct QGlyphLayout;
26class QTextItemInt;
27class QPaintEngineState;
28
29class Q_GUI_EXPORT QTextItem {
30public:
31 enum RenderFlag {
32 RightToLeft = 0x1,
33 Overline = 0x10,
34 Underline = 0x20,
35 StrikeOut = 0x40,
36
37 Dummy = 0xffffffff
38 };
39 Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
40 qreal descent() const;
41 qreal ascent() const;
42 qreal width() const;
43
44 RenderFlags renderFlags() const;
45 QString text() const;
46 QFont font() const;
47};
48Q_DECLARE_TYPEINFO(QTextItem, Q_PRIMITIVE_TYPE);
49
50
51class Q_GUI_EXPORT QPaintEngine
52{
53 Q_DECLARE_PRIVATE(QPaintEngine)
54public:
55 enum PaintEngineFeature {
56 PrimitiveTransform = 0x00000001, // Can transform primitives brushes
57 PatternTransform = 0x00000002, // Can transform pattern brushes
58 PixmapTransform = 0x00000004, // Can transform pixmaps
59 PatternBrush = 0x00000008, // Can fill with pixmaps and standard patterns
60 LinearGradientFill = 0x00000010, // Can fill gradient areas
61 RadialGradientFill = 0x00000020, // Can render radial gradients
62 ConicalGradientFill = 0x00000040, // Can render conical gradients
63 AlphaBlend = 0x00000080, // Can do source over alpha blend
64 PorterDuff = 0x00000100, // Can do general porter duff compositions
65 PainterPaths = 0x00000200, // Can fill, outline and clip paths
66 Antialiasing = 0x00000400, // Can antialias lines
67 BrushStroke = 0x00000800, // Can render brush based pens
68 ConstantOpacity = 0x00001000, // Can render at constant opacity
69 MaskedBrush = 0x00002000, // Can fill with textures that has an alpha channel or mask
70 PerspectiveTransform = 0x00004000, // Can do perspective transformations
71 BlendModes = 0x00008000, // Can do extended Porter&Duff composition
72 ObjectBoundingModeGradients = 0x00010000, // Can do object bounding mode gradients
73 RasterOpModes = 0x00020000, // Can do logical raster operations
74 PaintOutsidePaintEvent = 0x20000000, // Engine is capable of painting outside paint events
75 /* 0x10000000, // Used for emulating
76 QGradient::StretchToDevice,
77 defined in qpainter.cpp
78
79 0x40000000, // Used internally for emulating opaque backgrounds
80 */
81
82 AllFeatures = 0xffffffff // For convenience
83 };
85
86 enum DirtyFlag {
87 DirtyPen = 0x0001,
88 DirtyBrush = 0x0002,
90 DirtyFont = 0x0008,
95 DirtyClipPath = 0x0100,
96 DirtyHints = 0x0200,
99 DirtyOpacity = 0x1000,
100
101 AllDirty = 0xffff
102 };
103 Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
104
111
112 explicit QPaintEngine(PaintEngineFeatures features=PaintEngineFeatures());
113 virtual ~QPaintEngine();
114
115 bool isActive() const { return active; }
116 void setActive(bool newState) { active = newState; }
117
118 virtual bool begin(QPaintDevice *pdev) = 0;
119 virtual bool end() = 0;
120
121 virtual void updateState(const QPaintEngineState &state) = 0;
122
123 virtual void drawRects(const QRect *rects, int rectCount);
124 virtual void drawRects(const QRectF *rects, int rectCount);
125
126 virtual void drawLines(const QLine *lines, int lineCount);
127 virtual void drawLines(const QLineF *lines, int lineCount);
128
129 virtual void drawEllipse(const QRectF &r);
130 virtual void drawEllipse(const QRect &r);
131
132 virtual void drawPath(const QPainterPath &path);
133
134 virtual void drawPoints(const QPointF *points, int pointCount);
135 virtual void drawPoints(const QPoint *points, int pointCount);
136
137 virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
138 virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);
139
140 virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0;
141 virtual void drawTextItem(const QPointF &p, const QTextItem &textItem);
142 virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);
143 virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
144 Qt::ImageConversionFlags flags = Qt::AutoColor);
145
146 void setPaintDevice(QPaintDevice *device);
147 QPaintDevice *paintDevice() const;
148
149 void setSystemClip(const QRegion &baseClip);
150 QRegion systemClip() const;
151
152 void setSystemRect(const QRect &rect);
153 QRect systemRect() const;
154
155
156 virtual QPoint coordinateOffset() const;
157
178 virtual Type type() const = 0;
179
180 inline void fix_neg_rect(int *x, int *y, int *w, int *h);
181
182 inline bool testDirty(DirtyFlags df);
183 inline void setDirty(DirtyFlags df);
184 inline void clearDirty(DirtyFlags df);
185
186 bool hasFeature(PaintEngineFeatures feature) const { return bool(gccaps & feature); }
187
188 QPainter *painter() const;
189
190 void syncState();
191 inline bool isExtended() const { return extended; }
192
193 virtual QPixmap createPixmap(QSize size);
194 virtual QPixmap createPixmapFromImage(QImage image, Qt::ImageConversionFlags flags = Qt::AutoColor);
195
196protected:
197 QPaintEngine(QPaintEnginePrivate &data, PaintEngineFeatures devcaps=PaintEngineFeatures());
198
199 QPaintEngineState *state;
201
205
206 QScopedPointer<QPaintEnginePrivate> d_ptr;
207
208private:
209 void setAutoDestruct(bool autoDestr) { selfDestruct = autoDestr; }
210 bool autoDestruct() const { return selfDestruct; }
212
213 friend class QPainterReplayer;
214 friend class QFontEngineBox;
215 friend class QFontEngineMac;
216 friend class QFontEngineWin;
217 friend class QMacPrintEngine;
219 friend class QFontEngineQPF2;
220 friend class QPainter;
221 friend class QPainterPrivate;
222 friend class QWidget;
223 friend class QWidgetPrivate;
224 friend class QWin32PaintEngine;
226 friend class QMacCGContext;
229};
230
231
232class Q_GUI_EXPORT QPaintEngineState
233{
234public:
235 QPaintEngine::DirtyFlags state() const { return dirtyFlags; }
236
237 QPen pen() const;
238 QBrush brush() const;
239 QPointF brushOrigin() const;
240 QBrush backgroundBrush() const;
241 Qt::BGMode backgroundMode() const;
242 QFont font() const;
243 QTransform transform() const;
244
245 Qt::ClipOperation clipOperation() const;
246 QRegion clipRegion() const;
247 QPainterPath clipPath() const;
248 bool isClipEnabled() const;
249
250 QPainter::RenderHints renderHints() const;
251 QPainter::CompositionMode compositionMode() const;
252 qreal opacity() const;
253
254 QPainter *painter() const;
255
256 bool brushNeedsResolving() const;
257 bool penNeedsResolving() const;
258
259protected:
260 friend class QPaintEngine;
261 friend class QRasterPaintEngine;
262 friend class QWidget;
263 friend class QPainter;
264 friend class QPainterPrivate;
265 friend class QMacPrintEnginePrivate;
266
267 QPaintEngine::DirtyFlags dirtyFlags;
268};
269
270//
271// inline functions
272//
273
274inline void QPaintEngine::fix_neg_rect(int *x, int *y, int *w, int *h)
275{
276 if (*w < 0) {
277 *w = -*w;
278 *x -= *w - 1;
279 }
280 if (*h < 0) {
281 *h = -*h;
282 *y -= *h - 1;
283 }
284}
285
286inline bool QPaintEngine::testDirty(DirtyFlags df) {
287 Q_ASSERT(state);
288 return bool(state->dirtyFlags & df);
289}
290
291inline void QPaintEngine::setDirty(DirtyFlags df) {
292 Q_ASSERT(state);
293 state->dirtyFlags |= df;
294}
295
296inline void QPaintEngine::clearDirty(DirtyFlags df)
297{
298 Q_ASSERT(state);
299 state->dirtyFlags &= ~df;
300}
301
302Q_DECLARE_OPERATORS_FOR_FLAGS(QTextItem::RenderFlags)
303Q_DECLARE_OPERATORS_FOR_FLAGS(QPaintEngine::PaintEngineFeatures)
304Q_DECLARE_OPERATORS_FOR_FLAGS(QPaintEngine::DirtyFlags)
305
306QT_END_NAMESPACE
307
308#endif // QPAINTENGINE_H
The QPaintEngineState class provides information about the active paint engine's current state....
\inmodule QtGui
virtual QPixmap createPixmap(QSize size)
friend class QPainter
void setSystemRect(const QRect &rect)
void setActive(bool newState)
Sets the active state of the paint engine to state.
virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode)
This is an overloaded member function, provided for convenience. It differs from the above function o...
virtual QPixmap createPixmapFromImage(QImage image, Qt::ImageConversionFlags flags=Qt::AutoColor)
friend class QWidgetPrivate
QRect systemRect() const
QPaintEngine(PaintEngineFeatures features=PaintEngineFeatures())
Creates a paint engine with the featureset specified by caps.
friend class QFontEngineQPF2
friend class QMacCGContext
virtual void drawTextItem(const QPointF &p, const QTextItem &textItem)
This function draws the text item textItem at position p.
virtual void drawLines(const QLineF *lines, int lineCount)
The default implementation splits the list of lines in lines into lineCount separate calls to drawPat...
PolygonDrawMode
\value OddEvenMode The polygon should be drawn using OddEven fill rule.
virtual void drawPoints(const QPointF *points, int pointCount)
Draws the first pointCount points in the buffer points.
virtual void drawRects(const QRectF *rects, int rectCount)
Draws the first rectCount rectangles in the buffer rects.
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags=Qt::AutoColor)
Reimplement this function to draw the part of the image specified by the sr rectangle in the given re...
QPainter * painter() const
Returns the paint engine's painter.
void fix_neg_rect(int *x, int *y, int *w, int *h)
void setPaintDevice(QPaintDevice *device)
virtual QPoint coordinateOffset() const
virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode)
Reimplement this virtual function to draw the polygon defined by the pointCount first points in point...
void setDirty(DirtyFlags df)
void setSystemClip(const QRegion &baseClip)
QPaintEngineState * state
friend class QPainterReplayer
friend class QX11GLPlatformPixmap
PaintEngineFeatures gccaps
void clearDirty(DirtyFlags df)
bool hasFeature(PaintEngineFeatures feature) const
Returns true if the paint engine supports the specified feature; otherwise returns false.
virtual void drawEllipse(const QRectF &r)
Reimplement this function to draw the largest ellipse that can be contained within rectangle rect.
QRegion systemClip() const
bool isExtended() const
QPaintDevice * paintDevice() const
Returns the device that this engine is painting on, if painting is active; otherwise returns \nullptr...
bool testDirty(DirtyFlags df)
virtual void updateState(const QPaintEngineState &state)=0
Reimplement this function to update the state of a paint engine.
DirtyFlag
\value DirtyPen The pen is dirty and needs to be updated.
Type
\value X11 \value Windows \value MacPrinter \value CoreGraphics \macos's Quartz2D (CoreGraphics) \val...
virtual Type type() const =0
Reimplement this function to return the paint engine \l{Type}.
void drawPath(const QPainterPath &path)
Draws the given painter path using the current pen for outline and the current brush for filling.
bool begin(QPaintDevice *)
Begins painting the paint device and returns true if successful; otherwise returns false.
void drawRects(const QRectF *rects, int rectCount)
Draws the first rectCount of the given rectangles using the current pen and brush.
friend class QFontEngine
Definition qpainter.h:433
void drawLines(const QLineF *lines, int lineCount)
Draws the first lineCount lines in the array lines using the current pen.
friend class QFontEngineMac
Definition qpainter.h:436
friend class QWin32PaintEngine
Definition qpainter.h:441
friend class QWin32PaintEnginePrivate
Definition qpainter.h:442
friend class QWidget
Definition qpainter.h:432
friend class QFontEngineWin
Definition qpainter.h:437
void drawEllipse(const QRectF &r)
Draws the ellipse defined by the given rectangle.
bool end()
Ends painting.
void drawPoints(const QPointF *points, int pointCount)
Draws the first pointCount points in the array points using the current pen's color.
bool isActive() const
Returns true if begin() has been called and end() has not yet been called; otherwise returns false.
\inmodule QtCore\reentrant
Definition qpoint.h:232
The QPolygonF class provides a list of points using floating point precision.
Definition qpolygon.h:97
Q_DECLARE_FLAGS(InitFlags, InitFlag)
Internal QTextItem.
\inmodule QtGui
uint is_closing
Definition qwidget.h:82
QPalette pal
Definition qwidget.h:91
uint focus_policy
Definition qwidget.h:80
uint in_show
Definition qwidget.h:83
uint unused
Definition qwidget.h:89
uint fstrut_dirty
Definition qwidget.h:85
QRect wrect
Definition qwidget.h:93
QRect crect
Definition qwidget.h:90
uint in_destructor
Definition qwidget.h:88
uint sizehint_forced
Definition qwidget.h:81
uint in_set_window_state
Definition qwidget.h:84
Qt::WindowFlags window_flags
Definition qwidget.h:78
QFont fnt
Definition qwidget.h:92
uint window_modality
Definition qwidget.h:87
uint window_state
Definition qwidget.h:79
WId winid
Definition qwidget.h:76
uint context_menu_policy
Definition qwidget.h:86
uint widget_attributes
Definition qwidget.h:77
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
QVarLengthFlatMap< QWindows11Style::Icon, QIcon, 16 > m_standardIcons
The QWindows11Style class provides a look and feel suitable for applications on Microsoft Windows 11.
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
QWindows11Style()
Constructs a QWindows11Style object.
bool eventFilter(QObject *obj, QEvent *event) override
void unpolish(QWidget *widget) override
void polish(QWidget *widget) override
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const override
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
void unpolish(QApplication *app) override
QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const override
QWindows11Style(QWindows11StylePrivate &dd)
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
void polish(QPalette &pal) override
int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
int styleHint(StyleHint hint, const QStyleOption *opt=nullptr, const QWidget *widget=nullptr, QStyleHintReturn *returnData=nullptr) const override
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget=nullptr) const override
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
void polish(QApplication *app) override
~QWindows11Style() override
Destructor.
HBITMAP buffer(int w=0, int h=0)
static int fixedPixelMetric(QStyle::PixelMetric pm)
static HDC hdcForWidgetBackingStore(const QWidget *widget)
static QBackingStore * backingStoreForWidget(const QWidget *widget)
bool swapAlphaChannel(const QRect &rect, bool allPixels=false)
bool drawBackgroundThruNativeBuffer(QWindowsThemeData &QWindowsThemeData, qreal aditionalDevicePixelRatio, qreal correctionFactor)
static HWND winId(const QWidget *widget)
void init(bool force=false)
static bool isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget)
bool drawBackgroundDirectly(HDC dc, QWindowsThemeData &QWindowsThemeData, qreal aditionalDevicePixelRatio)
static bool isItemViewDelegateLineEdit(const QWidget *widget)
static bool useVista(bool update=false)
bool fixAlphaChannel(const QRect &rect)
void cleanup(bool force=false)
bool isTransparent(QWindowsThemeData &QWindowsThemeData)
bool hasAlphaChannel(const QRect &rect)
QRegion region(QWindowsThemeData &QWindowsThemeData)
bool drawBackground(QWindowsThemeData &QWindowsThemeData, qreal correctionFactor=1)
static HTHEME createTheme(int theme, const QWidget *widget)
static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option=nullptr, const QWidget *widget=nullptr)
static QString themeName(int theme)
The QWindowsVistaStyle class provides a look and feel suitable for applications on Microsoft Windows ...
QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const override
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override
int styleHint(StyleHint hint, const QStyleOption *opt=nullptr, const QWidget *widget=nullptr, QStyleHintReturn *returnData=nullptr) const override
SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget=nullptr) const override
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
void polish(QWidget *widget) override
int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget=nullptr) const override
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const override
\reimp
~QWindowsVistaStyle() override
Destructor.
void polish(QPalette &pal) override
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget=nullptr) const override
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
QWindowsVistaStyle(QWindowsVistaStylePrivate &dd)
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const override
void unpolish(QWidget *widget) override
WinFontIconEngine(const QString &glyph, const QFont &font)
QString string() const override
void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override
Uses the given painter to paint the icon with the required mode and state into the rectangle rect.
QString key() const override
\variable QIconEngine::ScaledPixmapArgument::size
QIconEngine * clone() const override
Reimplement this method to return a clone of this icon engine.
void setScale(double scale)
Combined button and popup list for selecting options.
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
WINUI3Color
@ dividerStrokeDefault
@ fillControlAltSecondary
@ fillControlTertiary
@ frameColorStrongDisabled
@ textOnAccentPrimary
@ fillControlDefault
@ controlStrokeSecondary
@ frameColorStrong
@ surfaceStroke
@ fillControlDisabled
@ fillMicaAltSecondary
@ subtleHighlightColor
@ textPrimary
@ controlFillSolid
@ fillAccentSecondary
@ frameColorLight
@ subtlePressedColor
@ fillMicaAltDefault
@ textDisabled
@ fillControlSecondary
@ textSecondary
@ controlStrokeOnAccentSecondary
@ fillAccentDefault
@ textOnAccentSecondary
@ focusFrameOuterStroke
@ textOnAccentDisabled
@ fillControlAltQuarternary
@ fillControlInputActive
@ menuPanelFill
@ controlStrongFill
@ fillMicaAltTransparent
@ controlStrokePrimary
@ fillAccentDisabled
@ fillControlAltTertiary
@ fillControlAltDisabled
@ focusFrameInnerStroke
@ fillAccentTertiary
bool operator==(const ThemeMapKey &k1, const ThemeMapKey &k2)
@ UnknownAlpha
size_t qHash(const ThemeMapKey &key)
AlphaChannelType alphaType
ThemeMapKey(const QWindowsThemeData &data)
ThemeMapKey()=default