console.lua: improve hovered line calculation

- Don't do anything if clicking on the top counter, the input line or
  the new line between the items and the input line

- Don't scroll upwards when hovering the counter

- Don't redraw before clicking to avoid quickly updating the overlay
  before closing it with touch input, where the item you touch can be
  different from the one that was highlighted
This commit is contained in:
Guido Cella 2024-10-14 20:01:37 +02:00 committed by Kacper Michajłow
parent b0f1830a8e
commit 0f74b1bc2d
1 changed files with 18 additions and 8 deletions

View File

@ -781,7 +781,7 @@ local function handle_enter()
clear() clear()
end end
local function highlight_hovered_line() local function determine_hovered_item()
local height = mp.get_property_native('osd-height') local height = mp.get_property_native('osd-height')
if height == 0 then if height == 0 then
return return
@ -795,10 +795,12 @@ local function highlight_hovered_line()
local clicked_line = math.floor(y / height * max_lines + .5) local clicked_line = math.floor(y / height * max_lines + .5)
local offset = first_match_to_print - 1 local offset = first_match_to_print - 1
local min_line = 1
max_lines = calculate_max_log_lines() max_lines = calculate_max_log_lines()
-- Subtract 1 line for the position counter. -- Subtract 1 line for the position counter.
if first_match_to_print > 1 or offset + max_lines < #matches then if first_match_to_print > 1 or offset + max_lines < #matches then
min_line = 2
offset = offset - 1 offset = offset - 1
end end
@ -807,18 +809,26 @@ local function highlight_hovered_line()
max_lines = #matches max_lines = #matches
end end
if selected_match ~= offset + clicked_line if clicked_line >= min_line and clicked_line <= max_lines then
and clicked_line > 0 and clicked_line <= max_lines then return offset + clicked_line
selected_match = offset + clicked_line
update()
end end
end end
local function bind_mouse() local function bind_mouse()
mp.add_forced_key_binding('MOUSE_MOVE', '_console_mouse_move', highlight_hovered_line) mp.add_forced_key_binding('MOUSE_MOVE', '_console_mouse_move', function()
local item = determine_hovered_item()
if item and item ~= selected_match then
selected_match = item
update()
end
end)
mp.add_forced_key_binding('MBTN_LEFT', '_console_mbtn_left', function() mp.add_forced_key_binding('MBTN_LEFT', '_console_mbtn_left', function()
highlight_hovered_line() local item = determine_hovered_item()
handle_enter() if item then
selected_match = item
handle_enter()
end
end) end)
end end