From 4b0732269d8df8d397c5a6cb46ce8da3d2d5cda7 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Wed, 20 Apr 2016 20:54:48 +0200 Subject: [PATCH] Fixed determining Direct2D graphics context size (wxMSW). Determine actual size of wxD2DContext instance and initialize respective data members to report proper size of wxGraphicsContext created by wxGraphicsRenderer::CreateContextFromNativeContext / CreateContextFromNativeWindow. Closes #17502. --- src/msw/graphicsd2d.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/msw/graphicsd2d.cpp b/src/msw/graphicsd2d.cpp index 49e2fa2471..34082a7d6f 100644 --- a/src/msw/graphicsd2d.cpp +++ b/src/msw/graphicsd2d.cpp @@ -2960,6 +2960,9 @@ wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dF m_renderTargetHolder(new wxD2DHwndRenderTargetResourceHolder(hwnd, direct2dFactory)) #endif { + RECT r = wxGetWindowRect(hwnd); + m_width = r.right - r.left; + m_height = r.bottom - r.top; Init(); } @@ -2968,6 +2971,8 @@ wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dF wxGraphicsContext(renderer), m_direct2dFactory(direct2dFactory), m_renderTargetHolder(new wxD2DDCRenderTargetResourceHolder(direct2dFactory, hdc, dcSize, alphaMode)) { + m_width = dcSize.GetWidth(); + m_height = dcSize.GetHeight(); Init(); } @@ -2976,6 +2981,8 @@ wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dF wxGraphicsContext(renderer), m_direct2dFactory(direct2dFactory), m_renderTargetHolder(new wxD2DImageRenderTargetResourceHolder(&image, direct2dFactory)) { + m_width = image.GetWidth(); + m_height = image.GetHeight(); Init(); } #endif // wxUSE_IMAGE @@ -2984,6 +2991,8 @@ wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dF wxGraphicsContext(renderer), m_direct2dFactory(direct2dFactory) { m_renderTargetHolder = *((wxSharedPtr*)nativeContext); + m_width = 0; + m_height = 0; Init(); } @@ -3626,21 +3635,15 @@ wxD2DRenderer::~wxD2DRenderer() wxGraphicsContext* wxD2DRenderer::CreateContext(const wxWindowDC& dc) { - int width, height; - dc.GetSize(&width, &height); - - return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), wxSize(width, height)); + return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), dc.GetSize()); } wxGraphicsContext* wxD2DRenderer::CreateContext(const wxMemoryDC& dc) { - int width, height; - dc.GetSize(&width, &height); - wxBitmap bmp = dc.GetSelectedBitmap(); wxASSERT_MSG( bmp.IsOk(), wxS("Should select a bitmap before creating wxGraphicsContext") ); - return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), wxSize(width, height), + return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), dc.GetSize(), bmp.HasAlpha() ? D2D1_ALPHA_MODE_PREMULTIPLIED : D2D1_ALPHA_MODE_IGNORE); }