Skip to content

ui: visual modernization — theme layer + first-impression pass (the DeslanStudio upgrade) #43

Description

@InauguralPhysicist

Motivation: Tidepool looks extremely outdated — the same 90s-app problem DeslanStudio had before its upgrade train. DeslanStudio went from that to modern with three concrete moves; Tidepool gets the same treatment.

1. Theme layer (the core of the visual upgrade). Tidepool has no theme module — it runs lib/ui default chrome with ad-hoc inline colors (title.color is [220, 220, 240], per-widget one-offs). Build src/theme.eigs on the DeslanStudio pattern (src/client/theme.eigs there):

  • A coherent named palette (TP_COLORS) — ocean/tidepool aesthetic: deep-water dark bg, aqua/teal accents, kelp/coral secondary colors — replacing scattered RGB literals.
  • Mapped onto lib/ui's theme keys (bg, panel_bg, btn_bg/hover/pressed, slider, tab, menu, tooltip, focus_ring, selection…).
  • Applied in place, field by field, BEFORE widget construction — copy DeslanStudio's ds_theme_apply exactly. Trap documented in their theme.eigs header: set_theme REPLACES the theme wholesale and nulls every sizing/shade key (font_scale, char_w/h, radius, hover_shade…); panel/toolbar constructors bake theme colors at construction time.
  • Per-widget accent tints via the bg/text_color fields (upstream PR #596; live in our pinned v0.34.0, no forward-compat dance needed) — color-code the load-bearing actions the way DeslanStudio tinted Play green / Record red.

2. First-impression pass (DeslanStudio #6/#7 analog): title screen, screen fit, empty/loading states, HUD readability. The hand-rolled HUD in renderer.eigs and the pause/title surfaces adopt the themed toolkit where widgets fit; whatever stays canvas-drawn reads its colors from TP_COLORS, so the whole app shifts palette together.

3. Toolkit-adoption + workaround audit (supporting, not the headline): the diet overlay and editor already use ui.panel/ui.label/ui.button; sweep the remaining hand-rolled key handling/modal surfaces through the toolkit (DeslanStudio #22#25 pattern). Toolkit gaps the game surfaces (e.g. HUD-style widgets, gradients) go upstream and bank in GAPS.md — no local forks.

Acceptance:

  • Before/after screenshots via the desktop-gui-qa flow — the "after" must read as a modern app, which is the point of the issue.
  • Suite green (test_gfx, test_input, test_regressions); headless asserts pin the themed fields (DeslanStudio pins its tints in test_shell.eigs).
  • Real-flow click/key verification (popup click-trap classes).
  • No RGB literals left in UI code paths that TP_COLORS should own.

Owner: eigenscript-stdlib-applied-engineer (Tidepool axis), with eigenscript-ui-toolkit-engineer picking up upstream lib/ui gaps.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions