1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

Direct2D: Effect revert of 14d5276 removing ClearType Antialiasing

This adds Windows ClearType font antialiasing back as a disabled-by-default option "JUCE_ENABLE_DIRECT2D_CLEARTYPE_FONT_SMOOTHING" in the juce_graphics module.
This commit is contained in:
Janus Thorborg 2026-01-03 18:32:27 +01:00
parent 2ea448ffcc
commit 8a7db025ef
2 changed files with 31 additions and 1 deletions

View file

@ -87,6 +87,17 @@
#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0
#endif
/** Config: JUCE_ENABLE_DIRECT2D_CLEARTYPE_FONT_SMOOTHING
Setting this flag will *enable* Windows ClearType subpixel font antialiasing when using
the Direct2D renderer, if preferred by the end user. This is off by default due to
issues with transparency, certain compositions and transformations so make sure the
output looks acceptable for your use cases.
*/
#ifndef JUCE_ENABLE_DIRECT2D_CLEARTYPE_FONT_SMOOTHING
#define JUCE_ENABLE_DIRECT2D_CLEARTYPE_FONT_SMOOTHING 0
#endif
#ifndef JUCE_INCLUDE_PNGLIB_CODE
#define JUCE_INCLUDE_PNGLIB_CODE 1
#endif

View file

@ -270,7 +270,26 @@ ComSmartPtr<ID2D1DeviceContext1> Direct2DDeviceContext::create (ComSmartPtr<ID2D
return {};
}
result->SetTextAntialiasMode (D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE);
#if JUCE_ENABLE_DIRECT2D_CLEARTYPE_FONT_SMOOTHING
const auto textAntialiasing = [&]
{
BOOL smoothingEnabled{};
SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &smoothingEnabled, 0);
if (!smoothingEnabled)
return D2D1_TEXT_ANTIALIAS_MODE_ALIASED;
UINT smoothingKind{};
SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smoothingKind, 0);
return smoothingKind == FE_FONTSMOOTHINGCLEARTYPE ? D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE
: D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE;
}();
result->SetTextAntialiasMode(textAntialiasing);
#else
result->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE);
#endif
result->SetAntialiasMode (D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
result->SetUnitMode (D2D1_UNIT_MODE_PIXELS);