diff options
| author | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2026-01-10 14:57:32 -0800 |
|---|---|---|
| committer | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2026-01-10 14:57:32 -0800 |
| commit | 15f3f7f7a7428e97b483ba3c3d0f146e6f77f1e7 (patch) | |
| tree | 176894060388d0a6b200315554aafe98aeb195f3 | |
| parent | e370163b4a8f7e02901ec4f004a965ee5e7e4942 (diff) | |
| download | mpv-iptv-menu-15f3f7f7a7428e97b483ba3c3d0f146e6f77f1e7.tar.gz mpv-iptv-menu-15f3f7f7a7428e97b483ba3c3d0f146e6f77f1e7.tar.xz | |
respect scroll margin on page up/down
| -rw-r--r-- | main.lua | 12 | ||||
| -rw-r--r-- | state.lua | 9 |
2 files changed, 14 insertions, 7 deletions
@@ -118,12 +118,14 @@ end local function cursor_page_up() set_cursor( - state:menu().cursor - osd_menu_lines(), {keep_offset = true}) + state:menu().cursor - osd_menu_lines(), + {keep_offset = true, margin = config.scroll_margin}) end local function cursor_page_down() set_cursor( - state:menu().cursor + osd_menu_lines(), {keep_offset = true}) + state:menu().cursor + osd_menu_lines(), + {keep_offset = true, margin = config.scroll_margin}) end local function cursor_to_object(id) @@ -180,12 +182,14 @@ end local function move_option_page_up() move_option( - state:menu().cursor - osd_menu_lines(), {keep_offset = true}) + state:menu().cursor - osd_menu_lines(), + {keep_offset = true, margin = config.scroll_margin}) end local function move_option_page_down() move_option( - state:menu().cursor + osd_menu_lines(), {keep_offset = true}) + state:menu().cursor + osd_menu_lines(), + {keep_offset = true, margin = config.scroll_margin}) end local function sort_options(options) @@ -92,14 +92,17 @@ function menu_mt:set_cursor(pos, lines, opts) goto update end + if opts and opts.margin then + margin = math.min(opts.margin, math.floor((lines - 1) / 2)) + end + if opts and opts.centre then top = pos - math.floor((lines - 1) / 2) elseif opts and opts.keep_offset then top = top + pos - self.cursor - elseif opts and opts.margin then + elseif margin > 0 then margin = math.max(0, math.min( - opts.margin, - math.floor((lines - 1) / 2), + margin, self.cursor - self.view_top, self.view_top + lines - 1 - self.cursor)) end |
