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