Only update scrubber if not currently dragging

custom
ailurux 1 year ago
parent 665679b885
commit d25e5860c7
  1. 5
      lib/luavgl/src/lvgl.lua
  2. 10
      lib/luavgl/src/widgets/slider.c
  3. 11
      lua/playing.lua

@ -1098,6 +1098,11 @@ end
function slider:value()
end
--- get whether slider is dragged or not
--- @return boolean
function slider:is_dragged()
end
---
--- Switch widget
---@class Switch:Object

@ -73,9 +73,19 @@ static int luavgl_slider_tostring(lua_State *L) {
return 1;
}
static int luavgl_slider_is_dragged(lua_State *L) {
lv_obj_t *obj = luavgl_to_obj(L, 1);
bool is_dragged = lv_slider_is_dragged(obj);
lv_group_t * g = lv_obj_get_group(obj);
bool editing = lv_group_get_editing(g);
lua_pushboolean(L, editing || is_dragged);
return 1;
}
static const luaL_Reg luavgl_slider_methods[] = {
{"set", luavgl_slider_set},
{"value", luavgl_slider_value},
{"is_dragged", luavgl_slider_is_dragged},
{NULL, NULL},
};

@ -112,13 +112,17 @@ return function(opts)
}
playlist:Object({ w = 3, h = 1 }) -- spacer
local scrubber = screen.root:Bar {
local scrubber = screen.root:Slider {
w = lvgl.PCT(100),
h = 5,
range = { min = 0, max = 100 },
value = 0,
}
scrubber:onevent(lvgl.EVENT.RELEASED, function()
playback.position:set(scrubber:value())
end)
local controls = screen.root:Object {
flex = {
flex_direction = "row",
@ -147,8 +151,7 @@ return function(opts)
local play_pause_btn = controls:Button {}
play_pause_btn:onClicked(function()
--playback.playing:set(not playback.playing:get())
playback.position:set(playback.position:get() + 5)
playback.playing:set(not playback.playing:get())
end)
play_pause_btn:focus()
local play_pause_img = play_pause_btn:Image { src = img.pause }
@ -183,7 +186,9 @@ return function(opts)
cur_time:set {
text = format_time(pos)
}
if not scrubber:is_dragged() then
scrubber:set { value = pos }
end
end),
playback.track:bind(function(track)
if not track then return end

Loading…
Cancel
Save