Remove the now unnecessary default ctor from wxGDIPlusContext and
wxGDIPlusMeasuringContext and add a ctor taking just wxGraphicsRenderer that
can be useful to the derived classes instead.
Merge Init() and SetDefaults() and initialize everything at once in the new
Init() now.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69356
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height );
wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd );
wxGDIPlusContext( wxGraphicsRenderer* renderer, Graphics* gr);
wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height );
wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd );
wxGDIPlusContext( wxGraphicsRenderer* renderer, Graphics* gr);
+ wxGDIPlusContext(wxGraphicsRenderer* renderer);
virtual ~wxGDIPlusContext();
virtual ~wxGDIPlusContext();
wxDouble m_fontScaleRatio;
wxDouble m_fontScaleRatio;
-private:
- void Init();
- void SetDefaults();
+ // Used from ctors (including those in the derived classes) and takes
+ // ownership of the graphics pointer that must be non-NULL.
+ void Init(Graphics* graphics, int width, int height);
virtual void DoDrawText(const wxString& str, wxDouble x, wxDouble y)
{ DoDrawFilledText(str, x, y, wxNullGraphicsBrush); }
virtual void DoDrawFilledText(const wxString& str, wxDouble x, wxDouble y,
virtual void DoDrawText(const wxString& str, wxDouble x, wxDouble y)
{ DoDrawFilledText(str, x, y, wxNullGraphicsBrush); }
virtual void DoDrawFilledText(const wxString& str, wxDouble x, wxDouble y,
wxGDIPlusMeasuringContext( wxGraphicsRenderer* renderer ) : wxGDIPlusContext( renderer , m_hdc = GetDC(NULL), 1000, 1000 )
{
}
wxGDIPlusMeasuringContext( wxGraphicsRenderer* renderer ) : wxGDIPlusContext( renderer , m_hdc = GetDC(NULL), 1000, 1000 )
{
}
- wxGDIPlusMeasuringContext()
- {
- }
virtual ~wxGDIPlusMeasuringContext()
{
virtual ~wxGDIPlusMeasuringContext()
{
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height )
: wxGraphicsContext(renderer)
{
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height )
: wxGraphicsContext(renderer)
{
- Init();
- m_context = new Graphics( hdc);
- m_width = width;
- m_height = height;
- SetDefaults();
+ Init(new Graphics(hdc), width, height);
}
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, const wxDC& dc )
: wxGraphicsContext(renderer)
{
}
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, const wxDC& dc )
: wxGraphicsContext(renderer)
{
wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl );
HDC hdc = (HDC) msw->GetHDC();
wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl );
HDC hdc = (HDC) msw->GetHDC();
-
- m_context = new Graphics(hdc);
wxSize sz = dc.GetSize();
wxSize sz = dc.GetSize();
- m_width = sz.x;
- m_height = sz.y;
+ Init(new Graphics(hdc), sz.x, sz.y);
}
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd )
: wxGraphicsContext(renderer)
{
}
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd )
: wxGraphicsContext(renderer)
{
- Init();
- m_enableOffset = true;
- m_context = new Graphics( hwnd);
RECT rect = wxGetWindowRect(hwnd);
RECT rect = wxGetWindowRect(hwnd);
- m_width = rect.right - rect.left;
- m_height = rect.bottom - rect.top;
- SetDefaults();
+ Init(new Graphics(hwnd), rect.right - rect.left, rect.bottom - rect.top);
+ m_enableOffset = true;
}
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, Graphics* gr )
: wxGraphicsContext(renderer)
{
}
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, Graphics* gr )
: wxGraphicsContext(renderer)
{
- Init();
- m_context = gr;
- SetDefaults();
-wxGDIPlusContext::wxGDIPlusContext() : wxGraphicsContext(NULL)
+wxGDIPlusContext::wxGDIPlusContext(wxGraphicsRenderer* renderer)
+ : wxGraphicsContext(renderer)
+ // Derived class must call Init() later but just set m_context to NULL for
+ // safety to avoid crashing in our dtor if Init() ends up not being called.
+ m_context = NULL;
-void wxGDIPlusContext::Init()
+void wxGDIPlusContext::Init(Graphics* graphics, int width, int height)
- m_state2= 0;
- m_height = 0;
- m_width = 0;
+ m_state2 = 0;
+ m_width = width;
+ m_height = height;
-void wxGDIPlusContext::SetDefaults()
-{
m_context->SetTextRenderingHint(TextRenderingHintSystemDefault);
m_context->SetPixelOffsetMode(PixelOffsetModeHalf);
m_context->SetSmoothingMode(SmoothingModeHighQuality);
m_context->SetTextRenderingHint(TextRenderingHintSystemDefault);
m_context->SetPixelOffsetMode(PixelOffsetModeHalf);
m_context->SetSmoothingMode(SmoothingModeHighQuality);