Tier 2b of #699 (VS Code visual-parity audit) — the half of the original #701 that
cannot start yet. Split out so Tier 2a (#701, line-number and breadcrumb dimming)
could be dispatched immediately instead of waiting behind this.
Two items, blocked for two different reasons.
UI_FONT_FAMILY = "Segoe UI, Ubuntu, Droid Sans, Sans" (src/gtk/mod.rs:64). On
Linux neither Segoe UI nor Droid Sans resolves, so it falls through to generic Sans
(DejaVu Sans) — wider, with a taller x-height, than what VS Code lands on at the same
nominal size. Put the real system UI font first (system-ui / Cantarell / Ubuntu)
ahead of the generic fallback. Default ui_font_size = 10 pt
(src/core/settings.rs:728) ≈ 13.3 px at 96 dpi against VS Code's 13 px — check
whether the size still needs a nudge once the family is right, rather than changing
both blind.
Do not start this before quadraui#624 lands. vimcode feeds UI_FONT_FAMILY into
GtkBackend::set_ui_font (src/gtk/mod.rs:2144), and at the currently pinned rev that
field is read by exactly two primitives — draw_dialog and draw_rich_text_popup.
Every other chrome surface (tab bar, breadcrumb, file tree, status bar, menu bar)
paints with the shared editor Pango layout. Changing the family today would alter
dialogs and popups and nothing else, i.e. it would look done and change none of the
surfaces this epic is about — the same failure shape as #700 item 1, which shipped as
a no-op for exactly this class of reason.
Per the Platform-Neutrality Rule the workaround (building our own Pango layout in
src/gtk/) is not an option.
This item is inherently visual — attach a before/after screenshot to the PR, in
addition to whatever assertion is practical.
2. Panel separator borders — NEEDS SCOPING FIRST
VS Code Dark Modern draws a 1 px #2B2B2B line between activity bar / sidebar /
editor. vimcode's panes share a background value and butt together, so the sidebar
reads as part of the editor.
Before writing any code, establish where the line can be painted. vimcode composes
these panes itself, so a naive fix is a cr.rectangle in src/gtk/mod.rs — which the
Platform-Neutrality Rule forbids, and which would leave TUI unfixed. Determine whether
quadraui exposes a shared seam/border facility (Split/SplitLayout and the
border_fg family in quadraui/src/theme.rs are the places to look). If it does, add
the vimcode theme token and route through it. If it does not, do not implement —
file a quadraui issue and link it here, the same path #623/#624/#625 took.
Report which of the two it turned out to be in the PR or a comment, even if the answer
is "filed a quadraui issue and stopped".
Acceptance
GtkDriver (src/gtk/testing.rs), asserting on rendered pixels:
- item 1: chrome glyph extents change when
UI_FONT_FAMILY changes, on a surface
that is not a dialog — a tab label or status-bar segment. This assertion is
impossible to satisfy before quadraui#624; that is the point of it.
- item 2: the pixel column between sidebar and editor is the border colour, not
the sidebar background.
Depends on
Files
src/gtk/mod.rs
src/render.rs
src/core/settings.rs
src/gtk/testing.rs (tests)
Tier 2b of #699 (VS Code visual-parity audit) — the half of the original #701 that
cannot start yet. Split out so Tier 2a (#701, line-number and breadcrumb dimming)
could be dispatched immediately instead of waiting behind this.
Two items, blocked for two different reasons.
1. UI font stack — BLOCKED on JDonaghy/quadraui#624
UI_FONT_FAMILY = "Segoe UI, Ubuntu, Droid Sans, Sans"(src/gtk/mod.rs:64). OnLinux neither Segoe UI nor Droid Sans resolves, so it falls through to generic
Sans(DejaVu Sans) — wider, with a taller x-height, than what VS Code lands on at the same
nominal size. Put the real system UI font first (
system-ui/ Cantarell / Ubuntu)ahead of the generic fallback. Default
ui_font_size = 10pt(
src/core/settings.rs:728) ≈ 13.3 px at 96 dpi against VS Code's 13 px — checkwhether the size still needs a nudge once the family is right, rather than changing
both blind.
Do not start this before quadraui#624 lands. vimcode feeds
UI_FONT_FAMILYintoGtkBackend::set_ui_font(src/gtk/mod.rs:2144), and at the currently pinned rev thatfield is read by exactly two primitives —
draw_dialoganddraw_rich_text_popup.Every other chrome surface (tab bar, breadcrumb, file tree, status bar, menu bar)
paints with the shared editor Pango layout. Changing the family today would alter
dialogs and popups and nothing else, i.e. it would look done and change none of the
surfaces this epic is about — the same failure shape as #700 item 1, which shipped as
a no-op for exactly this class of reason.
Per the Platform-Neutrality Rule the workaround (building our own Pango layout in
src/gtk/) is not an option.This item is inherently visual — attach a before/after screenshot to the PR, in
addition to whatever assertion is practical.
2. Panel separator borders — NEEDS SCOPING FIRST
VS Code Dark Modern draws a 1 px
#2B2B2Bline between activity bar / sidebar /editor. vimcode's panes share a background value and butt together, so the sidebar
reads as part of the editor.
Before writing any code, establish where the line can be painted. vimcode composes
these panes itself, so a naive fix is a
cr.rectangleinsrc/gtk/mod.rs— which thePlatform-Neutrality Rule forbids, and which would leave TUI unfixed. Determine whether
quadraui exposes a shared seam/border facility (
Split/SplitLayoutand theborder_fgfamily inquadraui/src/theme.rsare the places to look). If it does, addthe vimcode theme token and route through it. If it does not, do not implement —
file a quadraui issue and link it here, the same path #623/#624/#625 took.
Report which of the two it turned out to be in the PR or a comment, even if the answer
is "filed a quadraui issue and stopped".
Acceptance
GtkDriver(src/gtk/testing.rs), asserting on rendered pixels:UI_FONT_FAMILYchanges, on a surfacethat is not a dialog — a tab label or status-bar segment. This assertion is
impossible to satisfy before quadraui#624; that is the point of it.
the sidebar background.
Depends on
Files
src/gtk/mod.rssrc/render.rssrc/core/settings.rssrc/gtk/testing.rs(tests)