fix: inspector font/formatting, FreeType-only backend on Apple

Resolves the parity items of docs/rewrite/notes/review-rv17-codex.md
(final-Z20.md):
- FreeType-only font backend is also available on Apple targets
  (discovery-free, embedded emoji fonts); ghostty_surface_quicklook_font
  returns null for every backend except plain CoreText like Zig.
- The +list-fonts test keys off the font crate's selected backend
  (HAS_DISCOVERY), correct under feature unification and on Apple.
- Inspector font: 32 px rasterized with FreeType (dear-imgui freetype)
  like Ghostty; a new `visual-parity.sh inspector` scenario shows 0.031%
  differing pixels (hover highlight) vs the original on Linux. Windows,
  Apple and wasm keep stb_truetype at 32 px (registered as a deliberate
  deviation).
- Inspector DCS/APC descriptions follow Zig 0.15.2's formatting
  (checked by running Zig), incl. the terminal.Parser.Action prefix.
- The ImGui demo window appears only in dev-profile builds, mirroring
  Zig's .Debug-only gate.

Test Plan:
- cargo test --workspace --no-fail-fast (3582 passed)
- just check-macos (both, also with --features font-backend-freetype)
- scripts/visual-parity.sh inspector
This commit is contained in:
ddidderr committed 2026-10-12 16:23:54 +02:00
1 parent 75fd25d1f1
commit e536b603b2
18 files changed
+267 -83

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
# Z20: RV17 P3 fixes (uncommitted)
1. FreeType-only on Apple: `ghostty-font/build.rs` honours `font-backend-freetype` on every non-wasm
target (`coretext` cfgs off, so the embedded-emoji fallback applies, as in Zig `Discover == void`);
`backend.rs` OPTIONS and the `harfbuzz-sys/coretext` feature (now only for the coretext features,
because the SDK headers are needed otherwise). New test `selected_backend_matches_build_cfgs`.
`ghostty_surface_quicklook_font` now answers only for plain `.coretext` as in Zig
(`ghostty_font::face::quicklook_font_raw`). `scripts/macos-crosscheck.sh` takes
`MACOS_CHECK_FEATURES`; clippy passes on both Apple targets with and without the feature.
2. `cli/list_fonts.rs` test follows `ghostty_font::options.backend` / `HAS_DISCOVERY`.
3. Inspector: 32 px (`FONT_SIZE`), FreeType through `dear-imgui-rs/freetype` on non-Windows, non-Apple,
non-wasm targets (registered deviation elsewhere: stb_truetype). `setup` lost its scale parameter
(Zig has none). Visual check: new scenario `scripts/visual-parity.sh inspector` (ctrl+shift+i via
xdotool, production build vs /usr/bin/ghostty 1.3.1). The window position differs between runs, so the
tabs + table region was compared at the best-aligned offset (95,134): 0.031 % of pixels differ
(max channel delta 14); the list rows differ only by the hover highlight (pointer position).
4. DCS/APC descriptions follow Zig 0.15.2 `printValue(any)`; prefix is `terminal.Parser.Action`
(was `parser.Parser.Action`), checked by running Zig 0.15.2 (`{ 36, 32 }`, `{ }` for empty slices).
5. Demo window gate: `ghostty_debug_build` cfg from `PROFILE == "debug"` (`ghostty-inspector/build.rs`).
6. Metal buffer: `metal_layout::grown_buffer_bytes` + test; DEVIANT_FIXES row 34 (commit bab49ee).