• src/syncterm/scripts/ui_app.wren ui_demo.wren ui_draw.wren ui_draw_tes

    From Deucе@VERT to Git commit to main/sbbs/master on Wednesday, April 29, 2026 15:28:49
    https://gitlab.synchro.net/main/sbbs/-/commit/fb6b3e39933b4ce9deaebcaa
    Added Files:
    src/syncterm/scripts/ui_app.wren ui_demo.wren ui_draw.wren ui_draw_test.wren ui_list.wren ui_list_test.wren ui_pane.wren ui_style.wren ui_style_test.wren ui_widget.wren ui_widget_test.wren
    Modified Files:
    src/syncterm/CMakeLists.txt GNUmakefile menu.c menu.h src/syncterm/scripts/syncterm.wren wrentest.wren src/syncterm/term.c wren_bind.c wren_bind_internal.h wren_bind_screen.c wren_bind_screen.h wren_host.c wren_host_internal.h
    Log Message:
    SyncTERM: pure-Wren UI library (Surface compositing, ListView, Pane, App)

    Full set of new scripts/ui_*.wren modules plus the C-side Surface
    foreign that backs them. Cells collapses into Surface — a single
    w×h cell-buffer that's both a linear Sequence (count/[i]/iter) and
    a 2D grid (cellAt/putRect/fill). Per-widget Surfaces composite
    into the App's screen-sized backbuffer for a single putRect blit
    per frame, eliminating the flicker the direct-screen-write path
    showed.

    App owns mouse/cursor lifecycle: saves and restores the terminal's
    mouse-event mask + CustomCursor on entry/exit, replaces the mask
    with exactly the events the UI wants (button-1 click+drag, wheel
    up/down), parks the hardware cursor on the focused leaf's
    cursorPos, applies CustomCursor.none unless cursorVisible is set
    (text inputs to come).

    ListView: Surface-backed rendering, scrollbar with proper thumb-
    position math, mouse drag follows endY, scroll wheel by 3 rows,
    hover ignored. Cursor pos tracks the selected row.

    Ctrl+S menu gets a "Wren Console" entry that synthesizes the
    Ctrl+\` keypress through wren_host_dispatch_key — works on
    ANSI/curses backends that can't capture the binding directly.

    Build: filter *_test.wren, *_demo.wren, and wrentest.wren out of
    the embedded scripts so user builds don't carry developer tooling.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net