Files
Basalt2/examples/scrollableFrame.lua
Robert Jelic bfad03cf08 Added scrollableFrame example
Fixed Cursor Bug
Reworked XML
2025-03-03 23:36:42 +01:00

57 lines
1.9 KiB
Lua

local basalt = require("basalt")
local main = basalt.getMainFrame()
-- Vertical scrolling
-- This function gets the overall height of all the children in a container
local function getChildrenHeight(container)
local height = 0
for _, child in ipairs(container.get("children")) do
if(child.get("visible"))then
local newHeight = child.get("y") + child.get("height")
if newHeight > height then
height = newHeight
end
end
end
return height
end
-- Create a new frame
local scrollingFrame = main:addFrame({width = 20, height = 10, x = 2, y = 2, backgroundColor = colors.gray})
-- Add a scroll function to the frame
scrollingFrame:onScroll(function(self, delta)
local offset = math.max(0, math.min(self.get("offsetY") + delta, getChildrenHeight(self) - self.get("height")))
self:setOffsetY(offset)
end)
scrollingFrame:addButton({text = "Button 1", x=2, y = 2})
scrollingFrame:addButton({text = "Button 2", x=2, y = 6})
scrollingFrame:addButton({text = "Button 3", x=2, y = 10})
-- Horizontal scrolling
local function getChildrenWidth(container)
local width = 0
for _, child in ipairs(container.get("children")) do
if(child.get("visible"))then
local newWidth = child.get("x") + child.get("width")
if newWidth > width then
width = newWidth
end
end
end
return width
end
local scrollingFrame2 = main:addFrame({width = 20, height = 10, x = 25, y = 2, backgroundColor = colors.gray})
scrollingFrame2:onScroll(function(self, delta)
local offset = math.max(0, math.min(self.get("offsetX") + delta, getChildrenWidth(self) - self.get("width")))
self:setOffsetX(offset)
end)
scrollingFrame2:addButton({text = "Button 1", x=2, y = 2})
scrollingFrame2:addButton({text = "Button 2", x=13, y = 2})
scrollingFrame2:addButton({text = "Button 3", x=24, y = 2})
basalt.run()