A lightweight, retained-mode UI toolkit for OpenFL — for building tools, editors, settings screens and in-game interfaces in Haxe.
SmiðrUI is a widget toolkit that draws on OpenFL's display list. Every widget is an
openfl.display.Sprite that repaints only when it is invalidated — there is no
per-frame update loop — so a whole screen of controls costs almost nothing when nothing is changing.
Themes and locale are read at paint time, so swapping either re-skins the entire tree at once.
It targets both desktop and mobile (touch scrolling, long-press, and the platform soft keyboard) and ships an optional bridge for HaxeFlixel, so you can drop a UI over a running game with correct viewport, cursor and input handling.
Repaints on invalidate only — no per-frame work. A dirty set flushes once per frame.
Swap palettes at runtime; widgets follow theme slots through UIFill / UITheme.
Buttons to dockable panels, data grids, tree views, colour pickers, calendars and more.
Touch scroll with fling, long-press-as-right-click, and soft-keyboard (IME) text input.
smidr.flixel.FlxSmidr handles viewport matching, cursor and input arbitration.
Widgets resolve text through UILocale, so a language swap refreshes every label.
Install it, add it to your project.xml, then attach a root and add widgets:
haxelib git smidr https://github.com/MeguminBOT/SmidrUI.git
import openfl.display.Sprite;
import smidr.UIRoot;
import smidr.widgets.UIButton;
import smidr.widgets.UIPanel;
class Main extends Sprite {
public function new() {
super();
var ui = new UIRoot();
ui.attach(this);
var panel = new UIPanel(260, 120, PANEL);
panel.x = panel.y = 40;
ui.content.addChild(panel);
var btn = new UIButton("Click me", 180, 34, () -> trace("clicked"), true);
btn.x = 60; btn.y = 60;
ui.content.addChild(btn);
}
}