diff options
Diffstat (limited to 'src/gui/painting/qpainter.cpp')
-rw-r--r-- | src/gui/painting/qpainter.cpp | 33 |
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; } |