patch 9.1.2127: MS-Windows: DirectX renders font too small

Problem:  MS-Windows: DirectX renders font too small in comparison to
          the GDI rendering (Linwei, after v9.1.2125)
Solution: Implement proper font clipping (Yasuhiro Matsumoto)

related: #19254
closes:  #19304

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yasuhiro Matsumoto
2026-02-02 10:23:27 +00:00
committed by Christian Brabandt
parent c50be218cd
commit fccd6f9b14
2 changed files with 14 additions and 3 deletions
+12 -3
View File
@@ -820,9 +820,6 @@ DWriteContext::CreateTextFormatFromLOGFONT(const LOGFONTW &logFont,
fontSize = fontSize * float(fontMetrics.designUnitsPerEm)
/ float(fontMetrics.ascent + fontMetrics.descent);
}
// Scale by ascent ratio to match GDI rendering size
fontSize = ceil(fontSize * float(fontMetrics.ascent) / float(fontMetrics.designUnitsPerEm));
}
// The text format includes a locale name. Ideally, this would be the
@@ -1055,6 +1052,15 @@ DWriteContext::DrawText(const WCHAR *text, int len,
SetDrawingMode(DM_DIRECTX);
// Apply clipping if ETO_CLIPPED is specified
if ((fuOptions & ETO_CLIPPED) && lprc != NULL)
{
mRT->PushAxisAlignedClip(
D2D1::RectF(FLOAT(lprc->left), FLOAT(lprc->top),
FLOAT(lprc->right), FLOAT(lprc->bottom)),
D2D1_ANTIALIAS_MODE_ALIASED);
}
hr = mDWriteFactory->CreateTextLayout(text, len, mTextFormat,
FLOAT(w), FLOAT(h), &textLayout);
@@ -1080,6 +1086,9 @@ DWriteContext::DrawText(const WCHAR *text, int len,
}
SafeRelease(&textLayout);
if ((fuOptions & ETO_CLIPPED) && lprc != NULL)
mRT->PopAxisAlignedClip();
}
void
+2
View File
@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2127,
/**/
2126,
/**/