From 299f4543e3c0e3d61fd0eedea81fc838fcc66f68 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Fri, 19 Feb 2021 20:18:22 +0100 Subject: [PATCH] Apply anti-alias mode to fonts with Direct2D See #19049. --- src/msw/graphicsd2d.cpp | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/msw/graphicsd2d.cpp b/src/msw/graphicsd2d.cpp index 40ae046df6..23544af95f 100644 --- a/src/msw/graphicsd2d.cpp +++ b/src/msw/graphicsd2d.cpp @@ -933,20 +933,6 @@ D2D1_COLOR_F wxD2DConvertColour(wxColour colour) colour.Alpha() / 255.0f); } -D2D1_ANTIALIAS_MODE wxD2DConvertAntialiasMode(wxAntialiasMode antialiasMode) -{ - switch (antialiasMode) - { - case wxANTIALIAS_NONE: - return D2D1_ANTIALIAS_MODE_ALIASED; - case wxANTIALIAS_DEFAULT: - return D2D1_ANTIALIAS_MODE_PER_PRIMITIVE; - } - - wxFAIL_MSG("unknown antialias mode"); - return D2D1_ANTIALIAS_MODE_ALIASED; -} - #if wxD2D_DEVICE_CONTEXT_SUPPORTED bool wxD2DCompositionModeSupported(wxCompositionMode compositionMode) { @@ -4170,8 +4156,7 @@ void wxD2DContext::SetClipLayer(ID2D1Geometry* clipGeometry) LayerData ld; ld.type = CLIP_LAYER; - ld.params = D2D1::LayerParameters(D2D1::InfiniteRect(), clipGeometry, - wxD2DConvertAntialiasMode(m_antialias)); + ld.params = D2D1::LayerParameters(D2D1::InfiniteRect(), clipGeometry, GetRenderTarget()->GetAntialiasMode()); ld.layer = clipLayer; ld.geometry = clipGeometry; // We need to store CTM to be able to re-apply @@ -4390,7 +4375,27 @@ bool wxD2DContext::SetAntialiasMode(wxAntialiasMode antialias) return true; } - GetRenderTarget()->SetAntialiasMode(wxD2DConvertAntialiasMode(antialias)); + D2D1_ANTIALIAS_MODE antialiasMode; + D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode; + switch ( antialias ) + { + case wxANTIALIAS_DEFAULT: + antialiasMode = D2D1_ANTIALIAS_MODE_PER_PRIMITIVE; + textAntialiasMode = D2D1_TEXT_ANTIALIAS_MODE_DEFAULT; + break; + + case wxANTIALIAS_NONE: + antialiasMode = D2D1_ANTIALIAS_MODE_ALIASED; + textAntialiasMode = D2D1_TEXT_ANTIALIAS_MODE_ALIASED; + break; + + default: + wxFAIL_MSG("Unknown antialias mode"); + return false; + } + + GetRenderTarget()->SetAntialiasMode(antialiasMode); + GetRenderTarget()->SetTextAntialiasMode(textAntialiasMode); m_antialias = antialias; return true; @@ -4736,6 +4741,8 @@ void wxD2DContext::EnsureInitialized() { m_cachedRenderTarget = m_renderTargetHolder->GetD2DResource(); GetRenderTarget()->GetTransform(&m_initTransform); + GetRenderTarget()->SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE); + GetRenderTarget()->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_DEFAULT); GetRenderTarget()->BeginDraw(); } else