pingdotgg / pingdotgg/t3code

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

Open
#8,671 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing how the packaged Linux AppImage launches its Electron renderer and where Chromium feature flags can be supplied. Reproduce with Terminus at 16px, then verify that the packaged app uses the FreeType backend and matches native Pango/FreeType bitmap rendering without relying on the antialiasing switches.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, linux, typescript
Domain
desktop, release
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
64/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.