Over the past few days I've been porting a GUI library I've written in Lua, it's been a pretty successful and struggle free move over to Leadwerks which has excited me over the future of my time with Leadwerks.
I'll give a rundown of what features I've implemented.
- Text entry panels with carrat positioning and text clipping.
- Labels with multi-line wrapping.
- Scroll panels with mousewheel support.
- Panel hierarchy with parent-child clipping.
- Button and hover events, keytouch events and focus events.
- Panel order of precedence via shardui.paintOver(myPanel)
- Tool tips for those vague looking buttons.
- Scissor rect support - shardui.scrissorStart(x, y, w, h) shardui.scissorEnd()
- Simple way of creating your own unique UI items.
- Skin system.
To give an idea of how it's used I'll show a bit of code.
-- In App.start after you've created your graphics context you simple load the ui lib. import "Scripts/shardui/shard.lua"; -- This will include all sub files and folders -- in App.loop - After world rendering so the UI is ontop. shardui.think(); -- Always before paint. shardui.paint(); -- And that's it, the UI lib has been loaded successfully. -- Now to create a panel ( do not create panels in App.loop, they only need to be made once. ); myPanel = shardui.createPanel("ShardFrame") -- second argument to this would be the panel to parent it too, you'll see later on. myPanel:SetPos(100, 100); -- x, y positioning myPanel:SetSize(400, 500); myPanel:SetTitle("TestPanel"); myPanel:SetVisible(true); -- visibility toggling. myPanel:EnableDragging(true); -- Enable dragging by grabbing the title bar.
-- Now we'll add a label in the panel.
myLabel = shardui.createPanel("ShardLabel", myPanel) -- myPanel is the parent panel. myLabel:SetPos(2, 22); -- Relative positioning to parents positiong. myLabel:SetSize(100, 20); myLabel:SetMaxWidth(100); -- max width, it will line wrap if it's longer than 100 pixels. myLabel:SetColor(ColorL(255, 100, 100, 255)); -- If you don't like the skins color but don't want to create a skin, use this. myLabel:SetText("Hello Leadwerks Community");
A console with lua script support I created with the library.