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 5ab6dba4a4
commit 132f7c27ba
18 files changed
+267 -83

No files matched your search

+19 -11
View File
@@ -134,20 +134,28 @@ pub fn run(args: &[impl AsRef<[u8]>]) -> Result<u8, Error> {
#[cfg(test)]
mod tests {
/// Keyed off the font crate's actually selected backend, not this
/// crate's own feature flag: cargo feature unification can enable
/// `ghostty-font/font-backend-freetype` without the CLI forwarding
/// feature, and on Apple targets the default backend (CoreText) has
/// discovery.
///
/// Without a discovery mechanism (the `freetype` font backend, Zig
/// `Discover == void`) `+list-fonts` prints the compile-time-option
/// message and exits with 1, after parsing the arguments.
#[cfg(feature = "font-backend-freetype")]
#[test]
fn freetype_backend_reports_no_discovery() {
const { assert!(!ghostty_font::HAS_DISCOVERY) };
assert_eq!(super::run(&[] as &[&[u8]]).expect("run"), 1);
assert!(super::NO_DISCOVERY_MESSAGE.ends_with("try again."));
}
#[cfg(not(feature = "font-backend-freetype"))]
#[test]
fn default_backend_has_discovery() {
const { assert!(ghostty_font::HAS_DISCOVERY) };
fn discovery_presence_follows_selected_backend() {
let backend = ghostty_font::options.backend;
assert_eq!(
ghostty_font::HAS_DISCOVERY,
backend.has_fontconfig() || backend.has_coretext()
);
if ghostty_font::HAS_DISCOVERY {
assert_ne!(backend, ghostty_font::Backend::Freetype);
} else {
assert_eq!(backend, ghostty_font::Backend::Freetype);
assert_eq!(super::run(&[] as &[&[u8]]).expect("run"), 1);
assert!(super::NO_DISCOVERY_MESSAGE.ends_with("try again."));
}
}
}