Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions modules/juce_graphics/juce_graphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 20 additions & 1 deletion modules/juce_graphics/native/juce_DirectX_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down