Skip to content

lib/ui: modern widget chrome — per-widget colors (#566 priority), hover feedback on all interactive widgets, document gfx_rrect #594

Description

@InauguralPhysicist

Finding

Same DeslanStudio side-by-side that produced #593: after text, the second first-impression gap is widget chrome — the port's controls read as flat gray rectangles next to the Qt prototype's.

What already exists upstream (verified on main before filing)

So the flat look is no longer a missing-primitive problem. What remains:

Remaining gaps

  1. lib/ui: button has no per-widget color overrides — transport-style color-coded buttons impossible #566 (priority): per-widget button colors. _render_button reads _theme.btn_bg/btn_text unconditionally, so semantic coloring (record-red, play-green, destructive-red) is impossible; DeslanStudio dropped its transport colors over this (PORTING.md F-DS-12). Honor optional bg/text_color dict fields with theme fallback — toggle_button (color_on/color_off) and label already have the per-widget pattern.
  2. Hover feedback is effectively button-only. checkbox and toggle receive hover from dispatch but their render functions ignore it. A theme hover-shade overlay (translucent white/black gfx_rrect over the widget, alpha-blended) gives uniform hover/pressed feedback that also works on custom-colored widgets — a plain color swap to btn_hover would erase a custom bg.
  3. Docs: gfx_rrect and gfx_clip are registered but missing from docs/BUILTINS.md — an undiscoverable primitive reads as absent (the CI gate: every builtin and public stdlib function must be documented (regex_* currently appear nowhere) #393 failure class; downstream keeps believing there is no rounded-rect).

Minimal first slice: (1) plus the hover/pressed shade for buttons; the rest lands incrementally.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions