Simplify QPainter ownership in wxQtGraphicsContext

No real changes, just refactor the code to use more explicit
AttachPainter() when giving ownership of a new QPainter object to
wxQtGraphicsContext.

This method also allows to simplify wxQtImageContext as it doesn't need
to handle ownership on its own and can just leave it to the base class.

And m_ownsPainter can now be made private.
This commit is contained in:
Vadim Zeitlin
2019-01-21 19:37:24 +01:00
parent b991dc9d5a
commit 6d91374dff

View File

@@ -648,6 +648,14 @@ class WXDLLIMPEXP_CORE wxQtGraphicsContext : public wxGraphicsContext
} }
protected: protected:
// Use the specified painter and take ownership of it, i.e. it will be
// destroyed in this class dtor.
void AttachPainter(QPainter* painter)
{
m_qtPainter = painter;
m_ownsPainter = true;
}
wxQtGraphicsContext(wxGraphicsRenderer* renderer) wxQtGraphicsContext(wxGraphicsRenderer* renderer)
: wxGraphicsContext(renderer), : wxGraphicsContext(renderer),
m_qtPainter(NULL), m_qtPainter(NULL),
@@ -687,13 +695,6 @@ public:
#endif #endif
wxQtGraphicsContext(wxGraphicsRenderer* renderer, QPainter* painter, bool ownsPainter = true)
: wxGraphicsContext(renderer),
m_qtPainter(painter),
m_ownsPainter(ownsPainter)
{
}
wxQtGraphicsContext(wxGraphicsRenderer* renderer, wxWindow *window) wxQtGraphicsContext(wxGraphicsRenderer* renderer, wxWindow *window)
: wxGraphicsContext(renderer) : wxGraphicsContext(renderer)
{ {
@@ -1054,9 +1055,10 @@ protected:
} }
QPainter* m_qtPainter; QPainter* m_qtPainter;
bool m_ownsPainter;
private: private:
bool m_ownsPainter;
wxDECLARE_NO_COPY_CLASS(wxQtGraphicsContext); wxDECLARE_NO_COPY_CLASS(wxQtGraphicsContext);
}; };
@@ -1064,8 +1066,9 @@ class wxQtMeasuringContext : public wxQtGraphicsContext
{ {
public: public:
wxQtMeasuringContext(wxGraphicsRenderer* renderer) wxQtMeasuringContext(wxGraphicsRenderer* renderer)
: wxQtGraphicsContext(renderer, new QPainter()) : wxQtGraphicsContext(renderer)
{ {
AttachPainter(new QPainter());
} }
}; };
@@ -1078,15 +1081,13 @@ public:
{ {
const wxBitmap wxbitmap(image); const wxBitmap wxbitmap(image);
m_pixmap = *wxbitmap.GetHandle(); m_pixmap = *wxbitmap.GetHandle();
m_qtPainter = new QPainter(&m_pixmap); AttachPainter(new QPainter(&m_pixmap));
m_ownsPainter = false;
} }
~wxQtImageContext() ~wxQtImageContext()
{ {
wxQtBitmapData bitmap(GetRenderer(), &m_pixmap); wxQtBitmapData bitmap(GetRenderer(), &m_pixmap);
m_image = bitmap.DoConvertToImage(); m_image = bitmap.DoConvertToImage();
delete m_qtPainter;
} }
private: private: