yazi/yazi-plugin/preset/components/rail.lua
2026-06-26 14:34:28 +08:00

49 lines
1.1 KiB
Lua

Rail = {}
function Rail:new(id, area, chunks)
return setmetatable({
_id = id,
_area = area,
_chunks = chunks,
}, { __index = self })
end
function Rail:reflow() return { self } end
function Rail:redraw()
return {
ui.Bar(ui.Edge.LEFT):area(self._area):symbol(th.mgr.border_symbol):style(th.mgr.border_style),
}
end
-- Mouse events
function Rail:click(event, up) end
function Rail:scroll(event, step) end
function Rail:touch(event, step) end
function Rail:drag(event)
if event.type ~= "legacy" then
return
end
local c, x, parent, current, preview = self._chunks, 0, 0, 0, 0
if self._id == "rail-left" then
x = math.min(event.x, c[2].right - 2)
parent = math.max(1, x - c[1].x)
current = math.max(1, c[1].w + c[2].w - parent)
preview = math.max(1, c[3].w)
else
x = math.max(event.x, c[2].x + 2)
preview = math.max(1, c[3].right - x)
current = math.max(1, c[2].w + c[3].w - preview)
parent = math.max(1, c[1].w)
end
local r = rt.mgr.ratio
if r[1] ~= parent or r[2] ~= current or r[3] ~= preview then
rt.mgr.ratio = { parent, current, preview }
ui.render()
end
end