Skip to content

VS Code parity (Tier 2b of #699): GTK UI font stack (blocked on quadraui#624) + panel separator borders #704

Description

@JDonaghy

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). 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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    coordTracked by coord-tui pipelineenhancementNew feature or requeststatus:readyRefined and ready to enter the work pipeline

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions