Skip to content

Linux AppImage renders embedded bitmap fonts as outlines instead of using native strikes #8671

Description

@normalnormie

Summary

On Linux, the packaged T3 Code AppImage does not render the embedded bitmap
strikes of fonts such as Terminus.

At a supported native size—Terminus at 16px—the AppImage appears to reconstruct
the glyphs from vector outlines. This produces malformed or inconsistent pixels
in compact interface text such as “No projects yet”.

This is not fixed by disabling antialiasing or subpixel positioning alone.

Before and after

These are 8× nearest-neighbor enlargements of the same 16px text captured from
the packaged AppImage. No interpolation was applied.

Before: current AppImage rendering After: FreeType backend
Before After

Steps to reproduce

  1. Install Terminus TTF.
  2. Launch the Linux AppImage.
  3. Open Settings → Appearance.
  4. Select Terminus for the interface font.
  5. Set the interface size to 16px.
  6. Inspect compact UI text such as “No projects yet”, particularly stems and
    intersections in letters such as t, j, and y.

Expected behavior

At a size for which the font provides an embedded bitmap strike, Chromium should
render that strike without reconstructing or resampling the glyph outline.

Actual behavior

The packaged Electron renderer produces a different glyph mask:

  • Current AppImage: 118×12 bounding box, 290 foreground pixels.
  • Native Terminus bitmap: 118×13 bounding box, 240 foreground pixels.

After selecting Chromium’s FreeType backend, the AppImage produces a 118×13,
240-pixel mask that is pixel-for-pixel identical to native Pango/FreeType
rendering.

Technical findings

Chromium has an existing report stating that monochrome EBDT/EBLC bitmap strikes
do not render with the Fontations backend:

https://issues.chromium.org/issues/441128457

Launching the AppImage with the following feature selection fixes the embedded
bitmap rendering:

--enable-features=FontDataServiceLinux:typeface/Freetype
--disable-features=FontationsLinuxSystemFonts

For a completely aliased pixel-font mode, these switches also prevent coverage
and positioning effects:

--enable-blink-features=NoFontAntialiasing
--disable-font-subpixel-positioning

The FreeType backend selection is the part that fixes the malformed glyphs.
The antialiasing switches alone do not.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions