Skip to content

Commit f63ec29

Browse files
committed
Bugfix
Fixed program only using relative path Fixed list not sending scroll events Added observer to scrollbar's :attach method Fixed vertical sliders
1 parent cf38107 commit f63ec29

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

src/elements/List.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ function List:mouse_scroll(direction, x, y)
167167

168168
offset = math.min(maxOffset, math.max(0, offset + direction))
169169
self.set("offset", offset)
170+
self:fireEvent("mouse_scroll", direction, x, y)
170171
return true
171172
end
172173
return false

src/elements/Program.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ end
4343
---@private
4444
function BasaltProgram:run(path, width, height)
4545
self.window = window.create(self.program:getBaseFrame():getTerm(), 1, 1, width, height, false)
46-
local pPath = shell.resolveProgram(path)
46+
local pPath = shell.resolveProgram(path) or fs.exists(path) and path or nil
4747
if(pPath~=nil)then
4848
if(fs.exists(pPath)) then
4949
local file = fs.open(pPath, "r")
@@ -68,7 +68,7 @@ function BasaltProgram:run(path, width, height)
6868
self.coroutine = coroutine.create(function()
6969
local program = load(content, "@/" .. path, nil, env)
7070
if program then
71-
local result = program(path, table.unpack(self.args))
71+
local result = program(table.unpack(self.args))
7272
return result
7373
end
7474
end)

src/elements/Scrollbar.lua

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ function ScrollBar:attach(element, config)
7676
self.set("attachedProperty", config.property)
7777
self.set("minValue", config.min or 0)
7878
self.set("maxValue", config.max or 100)
79+
element:observe(config.property, function(_, value)
80+
if value then
81+
local min = self.get("minValue")
82+
local max = self.get("maxValue")
83+
if min == max then return end
84+
85+
self.set("value", math.floor(
86+
(value - min) / (max - min) * 100 + 0.5
87+
))
88+
end
89+
end)
7990
return self
8091
end
8192

src/elements/Slider.lua

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
local VisualElement = require("elements/VisualElement")
2+
local tHex = require("libraries/colorHex")
23

34
--- This is the slider class. It provides a draggable slider control that can be either horizontal or vertical,
45
--- with customizable colors and value ranges.
@@ -11,7 +12,13 @@ Slider.defineProperty(Slider, "step", {default = 1, type = "number", canTriggerR
1112
---@property max number 100 Maximum value for value conversion (maps slider position to this range)
1213
Slider.defineProperty(Slider, "max", {default = 100, type = "number"})
1314
---@property horizontal boolean true Whether the slider is horizontal (false for vertical)
14-
Slider.defineProperty(Slider, "horizontal", {default = true, type = "boolean", canTriggerRender = true})
15+
Slider.defineProperty(Slider, "horizontal", {default = true, type = "boolean", canTriggerRender = true, setter=function(self, value)
16+
if value then
17+
self.set("backgroundEnabled", false)
18+
else
19+
self.set("backgroundEnabled", true)
20+
end
21+
end})
1522
---@property barColor color gray Color of the slider track
1623
Slider.defineProperty(Slider, "barColor", {default = colors.gray, type = "color", canTriggerRender = true})
1724
---@property sliderColor color blue Color of the slider handle
@@ -21,6 +28,7 @@ Slider.defineProperty(Slider, "sliderColor", {default = colors.blue, type = "col
2128
Slider.defineEvent(Slider, "mouse_click")
2229
Slider.defineEvent(Slider, "mouse_drag")
2330
Slider.defineEvent(Slider, "mouse_up")
31+
Slider.defineEvent(Slider, "mouse_scroll")
2432

2533
--- Creates a new Slider instance
2634
--- @shortDescription Creates a new Slider instance
@@ -90,6 +98,7 @@ function Slider:mouse_scroll(direction, x, y)
9098
self:updateRender()
9199
return true
92100
end
101+
return false
93102
end
94103

95104
--- @shortDescription Renders the slider with track and handle
@@ -101,17 +110,18 @@ function Slider:render()
101110
local horizontal = self.get("horizontal")
102111
local step = self.get("step")
103112

104-
local barChar = horizontal and "\140" or ""
113+
local barChar = horizontal and "\140" or " "
105114
local text = string.rep(barChar, horizontal and width or height)
106115

107116
if horizontal then
108117
self:textFg(1, 1, text, self.get("barColor"))
109118
self:textBg(step, 1, " ", self.get("sliderColor"))
110119
else
120+
local bg = self.get("background")
111121
for y = 1, height do
112-
self:textFg(1, y, barChar, self.get("barColor"))
122+
self:textBg(1, y, " ", bg)
113123
end
114-
self:textFg(1, step, "\140", self.get("sliderColor"))
124+
self:textBg(1, step, " ", self.get("sliderColor"))
115125
end
116126
end
117127

0 commit comments

Comments
 (0)