summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qpainter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/painting/qpainter.cpp')
-rw-r--r--src/gui/painting/qpainter.cpp33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 3b64a8ecf73..a3f9f069b69 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -1527,14 +1527,14 @@ void QPainterPrivate::initFrom(const QPaintDevice *device)
Q_Q(QPainter);
device->initPainter(q);
+}
- if (extended) {
- extended->penChanged();
- } else if (engine) {
- engine->setDirty(QPaintEngine::DirtyPen);
- engine->setDirty(QPaintEngine::DirtyBrush);
- engine->setDirty(QPaintEngine::DirtyFont);
- }
+void QPainterPrivate::setEngineDirtyFlags(QSpan<const QPaintEngine::DirtyFlags> flags)
+{
+ if (!engine)
+ return;
+ for (const QPaintEngine::DirtyFlags f : flags)
+ engine->setDirty(f);
}
/*!
@@ -1801,14 +1801,16 @@ bool QPainter::begin(QPaintDevice *pd)
d->engine->setActive(begun);
}
- // Copy painter properties from original paint device,
- // required for QPixmap::grabWidget()
- if (d->original_device->devType() == QInternal::Widget) {
+ switch (d->original_device->devType()) {
+ case QInternal::Widget:
d->initFrom(d->original_device);
- } else {
+ break;
+
+ default:
d->state->layoutDirection = Qt::LayoutDirectionAuto;
// make sure we have a font compatible with the paintdevice
d->state->deviceFont = d->state->font = QFont(d->state->deviceFont, device());
+ break;
}
QRect systemRect = d->engine->systemRect();
@@ -1834,6 +1836,15 @@ bool QPainter::begin(QPaintDevice *pd)
d->state->emulationSpecifier = 0;
+ switch (d->original_device->devType()) {
+ case QInternal::Widget:
+ // for widgets we've aleady initialized the painter above
+ break;
+ default:
+ d->initFrom(d->original_device);
+ break;
+ }
+
return true;
}