зеркало из https://github.com/microsoft/terminal.git
Clip text to within the row we expect (#4671)
## Summary of the Pull Request Adjusts `DrawGlyphRun` method inside DirectX renderer to restrict text to be clipped within the boundaries of the row. ## PR Checklist * [x] Closes #1703 * [x] I work here. * [x] No tests. * [x] No docs. * [x] I am core contributor. ## Detailed Description of the Pull Request / Additional comments For whatever reason, some of these shade glyphs near U+2591 tend to extend way above the height of where we expect they should. This didn't look like a problem in conhost because it clipped every draw inside the bounds. This therefore applies the same clip logic as people don't really expect text to pour out of the box. It could, theoretically, get us into trouble later should someone attempt zalgo text. But doing zalgo text is more of a silliness that varies in behavior across rendering platforms anyway. ## Validation Steps Performed - Ran the old conhost GDI renderer and observed - Ran the new Terminal DX renderer and observed - Made the code change - Observed that the height and approximate display characteristics of the U+2591 shade and neighboring characters now matches with the conhost GDI style to stay within its lane.
This commit is contained in:
Родитель
4420950337
Коммит
671110c88a
|
@ -1465,6 +1465,12 @@ Global
|
||||||
{024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x64.Build.0 = Release|x64
|
{024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x64.Build.0 = Release|x64
|
||||||
{024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x86.ActiveCfg = Release|Win32
|
{024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x86.Build.0 = Release|Win32
|
{024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32
|
||||||
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64
|
||||||
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|ARM64.Build.0 = AuditMode|ARM64
|
||||||
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|x64.ActiveCfg = Release|x64
|
||||||
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|x86.ActiveCfg = AuditMode|Win32
|
||||||
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|x86.Build.0 = AuditMode|Win32
|
||||||
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM64.Build.0 = Debug|ARM64
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||||
|
|
|
@ -272,6 +272,13 @@ using namespace Microsoft::Console::Render;
|
||||||
|
|
||||||
rect.right = std::accumulate(advancesSpan.cbegin(), advancesSpan.cend(), rect.right);
|
rect.right = std::accumulate(advancesSpan.cbegin(), advancesSpan.cend(), rect.right);
|
||||||
|
|
||||||
|
// Clip all drawing in this glyph run to where we expect.
|
||||||
|
d2dContext->PushAxisAlignedClip(rect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||||
|
// Ensure we pop it on the way out
|
||||||
|
auto popclip = wil::scope_exit([&d2dContext]() noexcept {
|
||||||
|
d2dContext->PopAxisAlignedClip();
|
||||||
|
});
|
||||||
|
|
||||||
d2dContext->FillRectangle(rect, drawingContext->backgroundBrush);
|
d2dContext->FillRectangle(rect, drawingContext->backgroundBrush);
|
||||||
|
|
||||||
// Now go onto drawing the text.
|
// Now go onto drawing the text.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче