summaryrefslogtreecommitdiff
path: root/main.lua
diff options
context:
space:
mode:
authorDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2026-01-20 01:19:36 -0800
committerDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2026-01-20 01:26:08 -0800
commit50021f8d850b81e7ec27b0e048dafb693fb49a6c (patch)
treeaba9c1ac75903e86640633efbf2e378b5cccef1c /main.lua
parent0793df89e4a018c6abe662181a564ec137b2487a (diff)
downloadmpv-iptv-menu-50021f8d850b81e7ec27b0e048dafb693fb49a6c.tar.gz
mpv-iptv-menu-50021f8d850b81e7ec27b0e048dafb693fb49a6c.tar.xz
support clicking in scrollbar to move cursor/view
Diffstat (limited to 'main.lua')
-rw-r--r--main.lua62
1 files changed, 51 insertions, 11 deletions
diff --git a/main.lua b/main.lua
index 9e8a888..1f93058 100644
--- a/main.lua
+++ b/main.lua
@@ -1044,18 +1044,24 @@ local function process_mouse_click(ev)
return
end
- local line = osd:get_mouse_line(mouse_state.pos)
- if line then
- line = line - (osd.lines - osd:menu_lines(state))
+ local area
+ local val = osd:mouse_scrollbar_ratio(mouse_state.pos)
+ if val then
+ area = 'scrollbar'
+ else
+ local line = osd:mouse_menu_line(mouse_state.pos)
+ if line then
+ area = 'menu'
+ val = line - (osd.lines - osd:menu_lines(state))
+ end
end
- local key, dbl = handle_mouse_click(ev, line)
- return key, dbl, line
+ local key, dbl = handle_mouse_click(ev, area == 'menu' and val or nil)
+ return key, dbl, area, val
end
-local function mouse_click_left(ev)
- local key, dbl, line = process_mouse_click(ev)
- if not key or not line or line == 0 then
+local function mouse_click_left_menu(dbl, line)
+ if line == 0 then
return
end
@@ -1091,9 +1097,32 @@ local function mouse_click_left(ev)
end
end
-local function mouse_click_right(ev)
- local key, dbl, line = process_mouse_click(ev)
- if not key or not dbl or not line or line < 1 then
+local function mouse_click_left_scrollbar(dbl, ratio)
+ if not dbl then
+ return
+ end
+
+ -- set_cursor handles out-of-bounds moves (when ratio == 1)
+ set_cursor(
+ math.floor(ratio * #state:menu().options) + 1,
+ {centre = true})
+end
+
+local function mouse_click_left(ev)
+ local key, dbl, area, val = process_mouse_click(ev)
+ if not key then
+ return
+ end
+
+ if area == 'menu' then
+ return mouse_click_left_menu(dbl, val)
+ elseif area == 'scrollbar' then
+ return mouse_click_left_scrollbar(dbl, val)
+ end
+end
+
+local function mouse_click_right_menu(dbl, line)
+ if not dbl or line < 1 then
return
end
@@ -1106,6 +1135,17 @@ local function mouse_click_right(ev)
open_option_info(menu.options[pos])
end
+local function mouse_click_right(ev)
+ local key, dbl, area, val = process_mouse_click(ev)
+ if not key then
+ return
+ end
+
+ if area == 'menu' then
+ return mouse_click_right_menu(dbl, val)
+ end
+end
+
local function reload_data()
if state.depth > 1 then
osd:flash_error('Can only reload data from root menu')