Lysa UI  0.0
Lysa UI —UI components for the Lysa Engine
Lysa UI overview

Lysa UI is a user interface library for the Lysa Engine offering a hybrid system with retained-mode components drawn using an immediate-mode vector renderer.

Overview

Lysa UI provides a widget-based UI framework built on top of the Lysa Engine. It organizes interface elements into a hierarchy of typed widgets contained within virtual UI windows, all managed by a central WindowManager. Each widget participates in the engine's event system for input handling, focus management, and rendering callbacks.

Features

  • Alignment System: Powerful stacking and placement system via the Alignment enum, place children at corners, centers, edges, or fill their parent entirely.
  • Widget Hierarchy: Parent–child widget trees with padding, border, and overlap support.
    • create<T>() and add<T>() template helpers on both Widget and Window.
    • Recursive removeAll() and individual remove() for dynamic UI updates.
  • Widget Types:
    • Widget : transparent base widget; all other types derive from it.
    • Panel : rectangular widget with a background only.
    • Popup : Panel placed at fixed (x, y) coordinates and always drawn on top of sibling widgets.
    • Box : rectangular widget with a border and a background.
    • Frame : Box with an optional title string and configurable title color.
    • Button : clickable Box that fires UIEvent::OnClick.
    • ToggleButton : two-state (checked/unchecked) clickable button.
    • CheckWidget : abstract base for all two-state widgets.
    • CheckBox : two-state box displaying a CheckMark when checked.
    • RadioButton : two-state button drawn with two circles, exclusive between the siblings sharing its group index.
    • CheckMark / CrossMark : check and cross marks drawn inside their own rectangle.
    • Arrow : arrow head pointing right, left, up or down.
    • Text : single-line text display with configurable color and font scale.
    • TextEdit : single-line editable text field with cursor and selection support.
    • RichTextArea : read-only area displaying word-wrapped text marked up with BBCode
    • Image : displays a lysa::Image resource with optional color tint and auto-sizing.
    • Line / HLine / VLine : horizontal or vertical divider lines.
    • ScrollBar / HScrollBar / VScrollBar : range-based scroll bars.
    • ScrollBox : scrollable container with automatic horizontal and vertical scroll bars; content is added to an inner Box.
    • TreeView : hierarchical list widget with expand/collapse, scroll support and single or multiple item selection.
    • Menu : vertical list of text items, with optional keyboard shortcuts, leading widgets and separator lines.
    • TabBar : horizontal bar of tabs; draws and selects the tabs, without managing what they display.
    • TabContainer : container displaying one widget at a time, selected with a TabBar placed above or below the displayed widgets.
    • FoldableContainer : container folding and unfolding its content with a clickable title bar, adjusting its own height to its state.
    • List : abstract base for list-of-widgets containers; fires OnInsertItem, OnRemoveItem, and OnSelectItem.
    • ListBox : scrollable list of arbitrary widgets with keyboard navigation and a configurable selection highlight (Selection).
    • ProgressBar / HProgressBar / VProgressBar : horizontal or vertical progress bar with optional percentage or raw-value text overlay.
    • ValueSelect : abstract base for range-bound numeric widgets (ScrollBar, ProgressBar).
  • Dialogs: ModalDialog is a Window displaying a DialogBox centered above its parent. TextInputDialog asks the user for a single line of text and validates it with a caller-supplied callback, ColorModalDialog wraps a ColorPicker.
  • Window Management: WindowManager manages multiple virtual Window objects overlaid on a single RenderingWindow, with focus, resize, and z-ordering support. It also owns the default style, font and font scale inherited by the windows that do not set their own.
  • Embedded font: a default font is compiled into the library, displaying text requires no font resource and no configuration.
  • Styling: Two built-in Style implementations : StyleClassic a 3D raised/lowered/flat classic vector look ("Classic" as in Windows 95 "classic" 3D style, since this style was first written in 1996...), and StyleMaterial, a Material Design inspired flat look.
  • Event System: All widget interactions are routed through the engine's EventManager using UIEvent signal constants (OnClick, OnTextChange, OnValueChange, OnInsertItem, OnRemoveItem, OnSelectItem, and more).
  • Lua Scripting: All widget types expose their full API to Lua when compiled with LUA_BINDINGS=ON.

Architecture

This project is licensed under the MIT NON-AI License.