From ff1c12376ba2a99be50d34f0c6a7ac9afd725b10 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 1 Jun 2020 11:54:45 +0200 Subject: [PATCH] QPainter: replace manual memory management [4/5]: emulationEngine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/gui/painting/qpainter.cpp | 27 +++++++-------------------- src/gui/painting/qpainter_p.h | 2 +- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 6a0d431a50..82a96960a8 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -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(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); diff --git a/src/gui/painting/qpainter_p.h b/src/gui/painting/qpainter_p.h index c369922756..09de84f2b2 100644 --- a/src/gui/painting/qpainter_p.h +++ b/src/gui/painting/qpainter_p.h @@ -272,7 +272,7 @@ public: }; std::unique_ptr engine; - QEmulationPaintEngine *emulationEngine = nullptr; + std::unique_ptr emulationEngine; QPaintEngineEx *extended = nullptr; QBrush colorBrush; // for fill with solid color };