Fix acquiring HDC from wxGCDC with non-GDI+ graphics context

HDC can be acquired/released only when wxGCDC is associated with GDI+
graphics context.

Closes #19207.
This commit is contained in:
Artur Wieczorek
2021-06-24 19:22:56 +02:00
parent 36f84d0257
commit ffc7c036f1
2 changed files with 7 additions and 13 deletions

View File

@@ -306,6 +306,9 @@ public:
it changes them, so it is safe to assume that the same pen, brush and colours it changes them, so it is safe to assume that the same pen, brush and colours
that were active before the call to this function are still in effect after it. that were active before the call to this function are still in effect after it.
@note Under wxMSW drawing on wxGCDC is possible only if it's associated with
GDI+ wxGraphicsContext.
@library{wxcore} @library{wxcore}
@category{gdi} @category{gdi}
*/ */

View File

@@ -3013,13 +3013,9 @@ WXHDC wxGCDC::AcquireHDC()
if ( !gc ) if ( !gc )
return NULL; return NULL;
#if wxUSE_CAIRO
// we can't get the HDC if it is not a GDI+ context // we can't get the HDC if it is not a GDI+ context
wxGraphicsRenderer* r1 = gc->GetRenderer(); wxCHECK_MSG(gc->GetRenderer() == wxGraphicsRenderer::GetGDIPlusRenderer(), NULL,
wxGraphicsRenderer* r2 = wxGraphicsRenderer::GetCairoRenderer(); "can't get HDC because this is not GDI+ context");
if (r1 == r2)
return NULL;
#endif
Graphics * const g = static_cast<Graphics *>(gc->GetNativeContext()); Graphics * const g = static_cast<Graphics *>(gc->GetNativeContext());
return g ? g->GetHDC() : NULL; return g ? g->GetHDC() : NULL;
@@ -3033,13 +3029,8 @@ void wxGCDC::ReleaseHDC(WXHDC hdc)
wxGraphicsContext * const gc = GetGraphicsContext(); wxGraphicsContext * const gc = GetGraphicsContext();
wxCHECK_RET( gc, "can't release HDC because there is no wxGraphicsContext" ); wxCHECK_RET( gc, "can't release HDC because there is no wxGraphicsContext" );
#if wxUSE_CAIRO wxCHECK_RET(gc->GetRenderer() == wxGraphicsRenderer::GetGDIPlusRenderer(),
// we can't get the HDC if it is not a GDI+ context "can't release HDC because this is not GDI+ context");
wxGraphicsRenderer* r1 = gc->GetRenderer();
wxGraphicsRenderer* r2 = wxGraphicsRenderer::GetCairoRenderer();
if (r1 == r2)
return;
#endif
Graphics * const g = static_cast<Graphics *>(gc->GetNativeContext()); Graphics * const g = static_cast<Graphics *>(gc->GetNativeContext());
wxCHECK_RET( g, "can't release HDC because there is no Graphics" ); wxCHECK_RET( g, "can't release HDC because there is no Graphics" );