From 06f450af228c5ae0dd1140a998a24854ed341522 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Fri, 21 Oct 2022 11:56:33 +0200 Subject: [PATCH] dialog:: lists keep the mouse better --- dialogs.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/dialogs.cpp b/dialogs.cpp index 2d80dc26..da15ab5c 100644 --- a/dialogs.cpp +++ b/dialogs.cpp @@ -656,8 +656,8 @@ EX namespace dialog { inlist = false; list_ends_at = tothei; draw_list_slider(dcenter + fwidth / 2 - dfsize/2, list_starts_at); - if(mousex >= dcenter + fwidth /2 - dfsize && mousey >= list_starts_at && mousey < list_ends_at) - getcstat = PSEUDOKEY_LIST_SLIDER, inslider = true, slider_x = mousey; + if(mousex >= dcenter + fwidth /2 - dfsize && mousey >= list_starts_at && mousey < list_ends_at) + getcstat = PSEUDOKEY_LIST_SLIDER; if(list_left > 0) { list_skip -= list_left; list_skip -= list_more_skip; @@ -816,6 +816,16 @@ EX namespace dialog { } EX void handleNavigation(int &sym, int &uni) { + if(sym == PSEUDOKEY_LIST_SLIDER) invslider = true; + if(invslider) { + uni = sym = 0; + int max = list_full_size - list_actual_size; + list_skip = (max * (mousey - list_starts_at)) / list_actual_size; + if(list_skip < 0) list_skip = 0; + if(list_skip > max) list_skip = max; + highlight_text = "//missing"; + return; + } if(uni == '\n' || uni == '\r' || DIRECTIONKEY == SDLK_KP5) { for(int i=0; i