QPainter: replace manual memory management [4/5]: emulationEngine

Use unique_ptr to indicate ownership.

The QPainter dtor is now empty, = default it.

As a drive-by, fix a non-sensical if (p) p = nullptr;

Change-Id: I5c811eb7de6abf8a9f279cf3630d5f86db6b3864
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
bb10
Marc Mutz 2020-06-01 11:54:45 +02:00
parent e71b9fb465
commit ff1c12376b
2 changed files with 8 additions and 21 deletions

View File

@ -206,29 +206,24 @@ void QPainterPrivate::checkEmulation()
return;
if (doEmulation) {
if (extended != emulationEngine) {
if (extended != emulationEngine.get()) {
if (!emulationEngine)
emulationEngine = new QEmulationPaintEngine(extended);
extended = emulationEngine;
emulationEngine = std::make_unique<QEmulationPaintEngine>(extended);
extended = emulationEngine.get();
extended->setState(state.get());
}
} else if (emulationEngine == extended) {
} else if (emulationEngine.get() == extended) {
extended = emulationEngine->real_engine;
}
}
QPainterPrivate::QPainterPrivate(QPainter *painter)
: q_ptr(painter), txinv(0), inDestructor(false)
{
}
QPainterPrivate::~QPainterPrivate()
{
delete emulationEngine;
}
= default;
QTransform QPainterPrivate::viewTransform() const
{
@ -346,7 +341,6 @@ void QPainterPrivate::detachPainterPrivate(QPainter *q)
if (emulationEngine) {
extended = emulationEngine->real_engine;
delete emulationEngine;
emulationEngine = nullptr;
}
}
@ -1918,15 +1912,8 @@ bool QPainter::end()
}
d->engine.reset();
if (d->emulationEngine) {
delete d->emulationEngine;
d->emulationEngine = nullptr;
}
if (d->extended) {
d->extended = nullptr;
}
d->emulationEngine = nullptr;
d->extended = nullptr;
qt_cleanup_painter_state(d);

View File

@ -272,7 +272,7 @@ public:
};
std::unique_ptr<QPaintEngine, QPaintEngineDestructor> engine;
QEmulationPaintEngine *emulationEngine = nullptr;
std::unique_ptr<QEmulationPaintEngine> emulationEngine;
QPaintEngineEx *extended = nullptr;
QBrush colorBrush; // for fill with solid color
};