Skip to content

Implement shared typography and retained UI render integration #8

Description

@zoeyrose

Outcome

Provide one accessible, scale-aware typography/UI rendering foundation for client and editor while keeping product layouts in their repositories.

Scope and invariants

  • Integrate a retained/immediate Rust UI layer with wgpu through Atrinik-owned semantic components and theme roles; validate the chosen egui path during implementation.
  • Own font discovery/bundling, shaping/rasterization, fallback, glyph atlases, scale-aware caches, clipping, color/contrast roles, and device recreation.
  • Define logical pixels, viewport scale, text scale, focus/semantics hooks, and input/render coordinate agreement with SDL3 platform adapters.
  • Expose reusable low-level controls needed by both apps without importing game session or editor document state.
  • Support offscreen UI fixtures and deterministic clocks/animations.

Acceptance criteria

  • Text/control fixtures render at multiple UI/DPI scales, languages/scripts selected for project support, clipped/long content, missing glyphs, device recreation, and multiple viewports.
  • Keyboard/controller focus and accessibility semantics are testable by consumers and agree with rendered geometry.
  • Theme/semantic roles support client accessibility issue without hard-coded gameplay RGB literals.
  • Glyph/UI caches have bounded memory/invalidation metrics.
  • Client/editor can build independent product layouts on the same released integration.

Dependencies and parallelization

Depends on #5/#6. Client controls/settings and editor chrome can prototype against semantic component contracts in parallel.

Licensing

Rendering code, shaders, tests, and newly authored fixtures are MIT. Reuse from atrinik/classic sources is allowed only through the audited approved-grantor grant; all other behavior is independently implemented. Bundled assets require exact compatible licenses and notices.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions