57 lines
1.9 KiB
Lua
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() |