terminal icon indicating copy to clipboard operation
terminal copied to clipboard

Block Elements not rendering correctly with AtlasEngine enabled

Open Dan-Albrecht opened this issue 3 years ago • 5 comments

Windows Terminal version

1.16.2642.0

Windows build number

10.0.22000.0

Other Software

No response

Steps to reproduce

In PowerShell with the default Cascadia Mono font, run: Write-Host "`u{2595}`u{2594}`n`u{2595}`u{2581}"

Expected Behavior

In version 1.15.2525.0 or 1.16.2642.0 with AtlasEngine disabled: image

Actual Behavior

The top is cut off: image

Dan-Albrecht avatar Sep 28 '22 18:09 Dan-Albrecht

Might be same underlying issue as #14022

Dan-Albrecht avatar Sep 28 '22 18:09 Dan-Albrecht

Note to self/team: The block character scaling technique in _getCachedGlyphLayout is inherently flawed as I realized yesterday. What it does is:

  • Get the glyph's advance width/height
  • Resize to match the cell size

This doesn't work with fonts that use side bearings for block characters. A better way would be to assume that all fonts that define any block character also probably define the U+2588 Full Block character. That way we can do:

  • Get the font's full block glyph
  • Get the actual size including side bearings of the full block
  • Resize to match the cell size but apply the scale to the given glyph instead

lhecker avatar Sep 28 '22 19:09 lhecker

@lhecker, while I agree your change is correctly called righer-er, I think we need a even-more-righter followup as my issue is not resolved. I'm built from source at bfd480b. U+2594 seems to be causing problems and doesn't seem to be in the torture test.

Write-Host "`u{2595}`u{2594}`n`u{2595}`u{2581}"
Write-Host "`nXXX`n`u{2594}`nXXX`n"

Atlas Off: image

Atlas On: image

Dan-Albrecht avatar Oct 19 '22 01:10 Dan-Albrecht

@Dan-Albrecht Somewhat "late" in the development cycle I changed the algorithm so that it doesn't touch characters found in the given user font. My intention was that glyphs in the user's font remain untouched. If we don't do that this leads to other display issues (incorrect alginment, etc.). U+2594 is part of Cascadia Mono and so it won't get "adjusted" to fit the cell and I forgot to re-test it as part of the PR, focusing only on Consolas, etc.

Not sure what to do about this issue now: I should try to see if it helps to round up ascend/descend after all. But I'm not certain we can merge that - people have complained in the past when I did that. Otherwise we'll either have to wait for the next big AtlasEngine update which brings support for overlapping glyphs, or support for line height adjustments (which I'm submitting tomorrow).

lhecker avatar Oct 19 '22 03:10 lhecker

:tada:This issue was addressed in #14099, which has now been successfully released as Windows Terminal Preview v1.16.3463.0 and v1.16.3464.0.:tada:

Handy links:

ghost avatar Dec 14 '22 20:12 ghost