From 1dad96102a23399ad9d4a9ab824b483c586b73ac Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Thu, 24 Sep 2026 17:26:09 +0300 Subject: [PATCH] feat(ui): ludic.ui is a UI framework - input, controls, render3d backend, the CSS a game needs A game no longer writes a host: - The runtime reads Input itself: focus and keyboard navigation (Tab, arrows, Enter/Space, autofocus), the pointer (hover, :active, click on release, drag), and scroll boxes with the wheel, a draggable scrollbar, clipping and scroll-into-view. - HTML's controls are built in (button, checkbox, radio, range, select, text, key capture), made of plain parts a stylesheet styles, each reporting with on-change and event.value. - ludic.ui/render3d.ludic draws with render3d's overlay: textures, named atlases (icon:NAME), nine-slice border-image, rounded rects and rings, clipping, and a scale. - Hooks for the program's language, sounds and clock (ui_translator, ui_sounds, ui_clock). - ui_dev: hot reload, errors on screen, LUDIC_UI_DUMP. - CSS: - colours as #rgb / #rrggbbaa / rgb() / rgba() / names; - border-radius and outline (following the radius), box-shadow, background-image and a tinted border-image; - group opacity, @keyframes / animation, transition; - :focus, :focus-visible and :focus-within. - HTML mixed content, and boolean attributes. - render3d gains tex_width / tex_height, and the XML reader keeps text runs in order. Co-Authored-By: Claude Opus 5.5 --- LANGUAGE.md | 62 ++++++-- changes/defaults-views-templates.md | 14 ++ examples/library/ui_anim.ludic | 27 ++++ examples/library/ui_controls.ludic | 71 +++++++++ .../library/ui_controls_parts/Settings.lss | 4 + .../library/ui_controls_parts/Settings.ludic | 10 ++ .../library/ui_controls_parts/Settings.xml | 12 ++ examples/library/ui_reload.ludic | 4 +- packages/ludic.render3d/texture.ludic | 22 +++ packages/ludic.ui/anim.ludic | 89 +++++++++++ packages/ludic.ui/attr.ludic | 22 ++- packages/ludic.ui/attr_edge.ludic | 86 +++++++++++ packages/ludic.ui/backend.ludic | 55 ++++--- packages/ludic.ui/build.ludic | 2 +- packages/ludic.ui/build_more.ludic | 2 +- packages/ludic.ui/cascade.ludic | 4 +- packages/ludic.ui/color.ludic | 58 ++++++++ packages/ludic.ui/controls.ludic | 91 ++++++++++++ packages/ludic.ui/controls_build.ludic | 86 +++++++++++ packages/ludic.ui/dev.ludic | 24 +++ packages/ludic.ui/draw.ludic | 138 +++++++++--------- packages/ludic.ui/draw_order.ludic | 48 ++++++ packages/ludic.ui/dump.ludic | 4 +- packages/ludic.ui/elem.ludic | 29 +--- packages/ludic.ui/focus.ludic | 59 ++++++++ packages/ludic.ui/forms.ludic | 49 ------- packages/ludic.ui/frame.ludic | 14 +- packages/ludic.ui/index.ludic | 13 +- packages/ludic.ui/input.ludic | 62 ++++++++ packages/ludic.ui/layout.ludic | 14 +- packages/ludic.ui/link.ludic | 2 +- packages/ludic.ui/native.ludic | 11 +- packages/ludic.ui/node.ludic | 31 +++- packages/ludic.ui/pointer.ludic | 62 ++++---- packages/ludic.ui/render3d.ludic | 79 ++++++++++ packages/ludic.ui/render3d_image.ludic | 57 ++++++++ packages/ludic.ui/scroll.ludic | 84 +++++++++++ packages/ludic.ui/select_match.ludic | 3 + packages/ludic.ui/style.ludic | 5 + packages/ludic.ui/tpl.ludic | 6 +- packages/ludic.ui/tpl_lines.ludic | 25 ++++ packages/ludic.ui/transition.ludic | 31 ++++ packages/ludic.ui/ua.ludic | 4 + runtime/native/xml.ludic | 27 +++- tools/ludic-cli/test.ludic | 2 + 45 files changed, 1386 insertions(+), 218 deletions(-) create mode 100644 examples/library/ui_anim.ludic create mode 100644 examples/library/ui_controls.ludic create mode 100644 examples/library/ui_controls_parts/Settings.lss create mode 100644 examples/library/ui_controls_parts/Settings.ludic create mode 100644 examples/library/ui_controls_parts/Settings.xml create mode 100644 packages/ludic.ui/anim.ludic create mode 100644 packages/ludic.ui/attr_edge.ludic create mode 100644 packages/ludic.ui/color.ludic create mode 100644 packages/ludic.ui/controls.ludic create mode 100644 packages/ludic.ui/controls_build.ludic create mode 100644 packages/ludic.ui/dev.ludic create mode 100644 packages/ludic.ui/draw_order.ludic create mode 100644 packages/ludic.ui/focus.ludic delete mode 100644 packages/ludic.ui/forms.ludic create mode 100644 packages/ludic.ui/input.ludic create mode 100644 packages/ludic.ui/render3d.ludic create mode 100644 packages/ludic.ui/render3d_image.ludic create mode 100644 packages/ludic.ui/scroll.ludic create mode 100644 packages/ludic.ui/transition.ludic create mode 100644 packages/ludic.ui/ua.ludic diff --git a/LANGUAGE.md b/LANGUAGE.md index 764a9dd0..3efda29a 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -423,15 +423,59 @@ applies to both: - `` takes the user's `