From b8e82accbe13c673694fd1abb8e4744c75068790 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Wed, 16 Mar 2016 21:42:06 +0100 Subject: [PATCH] Allow creating wxCairoContext from native window (wxMSW). Implemented new wxCairoContext ctor to allow creating Cairo context in wxCairoRenderer::CreateContextFromNativeWindow. --- src/generic/graphicc.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index 2aa701358d..8618313770 100644 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -400,6 +400,7 @@ public: #endif #ifdef __WXMSW__ wxCairoContext( wxGraphicsRenderer* renderer, HDC context ); + wxCairoContext(wxGraphicsRenderer* renderer, HWND hWnd); #endif wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context ); wxCairoContext( wxGraphicsRenderer* renderer, wxWindow *window); @@ -1921,7 +1922,19 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, HDC handle ) m_width = m_height = 0; } -#endif + +wxCairoContext::wxCairoContext(wxGraphicsRenderer* renderer, HWND hWnd) + : wxGraphicsContext(renderer) + , m_mswWindowHDC(hWnd) +{ + // See remarks for wxWindowBase::GetContentScaleFactor + double scaleY = ::GetDeviceCaps((HDC)m_mswWindowHDC, LOGPIXELSY) / 96.0f; + m_enableOffset = scaleY <= 1.0; + + m_mswSurface = cairo_win32_surface_create((HDC)m_mswWindowHDC); + Init(cairo_create(m_mswSurface)); +} +#endif // __WXMSW__ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context ) @@ -2574,8 +2587,11 @@ wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext(void * conte wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeWindow( void * window ) { + ENSURE_LOADED_OR_RETURN(NULL); #ifdef __WXGTK__ return new wxCairoContext(this, static_cast(window)); +#elif defined(__WXMSW__) + return new wxCairoContext(this, static_cast(window)); #else wxUnusedVar(window); return NULL;