18#include <QtCore/qvarlengtharray.h>
19#include <QtGui/private/qtguiglobal_p.h>
20#include "QtGui/qbrush.h"
21#include "QtGui/qcolorspace.h"
22#include "QtGui/qcolortransform.h"
23#include "QtGui/qfont.h"
24#include "QtGui/qpen.h"
25#include "QtGui/qregion.h"
26#include "QtGui/qpainter.h"
27#include "QtGui/qpainterpath.h"
28#include "QtGui/qpaintengine.h"
30#include <private/qpen_p.h>
38class QEmulationPaintEngine;
53inline bool qpen_fast_equals(
const QPen &a,
const QPen &b) {
return data_ptr(a) == data_ptr(b); }
62inline bool qbrush_fast_equals(
const QBrush &a,
const QBrush &b) {
return data_ptr(a) == data_ptr(b); }
65inline bool qbrush_has_transform(
const QBrush &b) {
return data_ptr(b)->transform.type() > QTransform::TxNone; }
114 QPainterState(
const QPainterState *s);
115 virtual ~QPainterState();
116 void init(QPainter *p);
123 QBrush bgBrush = Qt::white;
125 QPainterPath clipPath;
126 Qt::ClipOperation clipOperation = Qt::NoClip;
127 QPainter::RenderHints renderHints;
128 QList<QPainterClipInfo> clipInfo;
129 QTransform worldMatrix;
131 QTransform redirectionMatrix;
132 int wx = 0, wy = 0, ww = 0, wh = 0;
133 int vx = 0, vy = 0, vw = 0, vh = 0;
140 Qt::BGMode bgMode = Qt::TransparentMode;
141 QPainter *painter =
nullptr;
142 Qt::LayoutDirection layoutDirection;
143 QPainter::CompositionMode composition_mode = QPainter::CompositionMode_SourceOver;
144 uint emulationSpecifier = 0;
145 uint changeFlags = 0;
159 Q_DECLARE_PUBLIC(QPainter)
172 template <
typename T,
std::size_t N = 8>
192 dummyState = std::make_unique<QPainterDummyState>();
193 return dummyState.get();
199 void updateState(std::unique_ptr<QPainterState> &state) { updateState(state.get()); }
206#if !defined(QT_NO_RAWFONT)
208 QFontEngine *fontEngine,
bool overline =
false,
bool underline =
false,
209 bool strikeOut =
false);
219 return painter->d_ptr.get();
227 void initFrom(
const QPaintDevice *device);
236 if (pe && pe->autoDestruct())
void setSystemViewport(const QRegion ®ion)
void setSystemTransform(const QTransform &xform)
QPaintDevice * currentClipDevice
QTransform systemTransform
static QPaintEnginePrivate * get(QPaintEngine *paintEngine)
virtual void systemStateChanged()
void setSystemTransformAndViewport(const QTransform &xform, const QRegion ®ion)
void drawBoxTextItem(const QPointF &p, const QTextItemInt &ti)
virtual Qt::HANDLE nativeHandle()
virtual QPaintEngine * aggregateEngine()
QPainterClipInfo(const QRectF &r, Qt::ClipOperation op, const QTransform &m)
QPainterClipInfo(const QRegion &r, Qt::ClipOperation op, const QTransform &m)
Qt::ClipOperation operation
QPainterClipInfo(const QPainterPath &p, Qt::ClipOperation op, const QTransform &m)
void drawOpaqueBackground(const QPainterPath &path, DrawOperation operation)
void updateEmulationSpecifier(QPainterState *s)
QPaintDevice * original_device
QPainterDummyState * fakeState() const
QPaintEngineEx * extended
QPaintDevice * helper_device
void initFrom(const QPaintDevice *device)
static constexpr qsizetype NDPtrs
SmallStack< std::unique_ptr< QPainterState > > savedStates
static QPainterPrivate * get(QPainter *painter)
std::unique_ptr< QPaintEngine, QPaintEngineDestructor > engine
void updateState(QPainterState *state)
std::unique_ptr< QEmulationPaintEngine > emulationEngine
void draw_helper(const QPainterPath &path, DrawOperation operation=StrokeAndFillDraw)
void drawTextItem(const QPointF &p, const QTextItem &_ti, QTextEngine *textEngine)
void drawStretchedGradient(const QPainterPath &path, DrawOperation operation)
void updateState(std::unique_ptr< QPainterState > &state)
QTransform hidpiScaleTransform() const
void detachPainterPrivate(QPainter *q)
QTransform viewTransform() const
qreal effectiveDevicePixelRatio() const
std::unique_ptr< QPainterDummyState > dummyState
std::unique_ptr< QPainterState > state
void updateStateImpl(QPainterState *state)
static bool attachPainterPrivate(QPainter *q, QPaintDevice *pdev)
void drawGlyphs(const QPointF &decorationPosition, const quint32 *glyphArray, QFixedPoint *positionArray, int glyphCount, QFontEngine *fontEngine, bool overline=false, bool underline=false, bool strikeOut=false)
QVarLengthArray< std::unique_ptr< QPainterPrivate >, NDPtrs > d_ptrs
friend class QPaintEngine
\inmodule QtCore\reentrant
Q_DECLARE_TYPEINFO(QT_PointF, Q_PRIMITIVE_TYPE)
Q_GUI_EXPORT void qt_draw_tile(QPaintEngine *gc, qreal x, qreal y, qreal w, qreal h, const QPixmap &pixmap, qreal xOffset, qreal yOffset)
void qt_fill_tile(QPixmap *tile, const QPixmap &pixmap)
Q_DECLARE_TYPEINFO(QT_Point, Q_PRIMITIVE_TYPE)
static QPaintEngine * qt_polygon_recursion
qreal qpen_widthf(const QPen &p)
Qt::BrushStyle qbrush_style(const QBrush &b)
bool qpen_fast_equals(const QPen &a, const QPen &b)
Qt::PenStyle qpen_style(const QPen &p)
const QColor & qbrush_color(const QBrush &b)
const void * data_ptr(const QTransform &t)
QString qt_generate_brush_key(const QBrush &brush)
Q_DECLARE_TYPEINFO(QPainterClipInfo, Q_RELOCATABLE_TYPE)
Qt::PenCapStyle qpen_capStyle(const QPen &p)
Qt::PenJoinStyle qpen_joinStyle(const QPen &p)
QBrush qpen_brush(const QPen &p)
bool qbrush_fast_equals(const QBrush &a, const QBrush &b)
bool qtransform_fast_equals(const QTransform &a, const QTransform &b)
Q_GUI_EXPORT void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivate::DrawOperation operation)
bool qbrush_has_transform(const QBrush &b)
void operator()(QPaintEngine *pe) const noexcept