From 66c1e7990b7ac332b7bac0fc475e3591b64fd4f7 Mon Sep 17 00:00:00 2001 From: cancel Date: Tue, 11 Dec 2018 01:46:11 +0900 Subject: [PATCH] Fix mouse hitting when scrolled --- tui_main.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/tui_main.c b/tui_main.c index c8cdda7..7308d7d 100644 --- a/tui_main.c +++ b/tui_main.c @@ -994,10 +994,29 @@ void app_move_cursor_relative(App_state* a, Isz delta_y, Isz delta_x) { a->is_draw_dirty = true; } +Usz confine_scrolled_mouse_hit(Usz field_len, Usz visual_coord, + int scroll_offset) { + if (field_len == 0) + return 0; + if (scroll_offset < 0) { + if ((Usz)(-scroll_offset) <= visual_coord) { + visual_coord -= (Usz)(-scroll_offset); + } else { + visual_coord = 0; + } + } else { + visual_coord += (Usz)scroll_offset; + } + if (visual_coord > field_len) + visual_coord = field_len - 1; + return visual_coord; +} + void app_jump_cursor_to(App_state* a, Usz y, Usz x) { - a->tui_cursor.y = y; - a->tui_cursor.x = x; - tui_cursor_confine(&a->tui_cursor, a->field.height, a->field.width); + a->tui_cursor.y = + confine_scrolled_mouse_hit(a->field.height, y, a->grid_scroll_y); + a->tui_cursor.x = + confine_scrolled_mouse_hit(a->field.width, x, a->grid_scroll_x); a->is_draw_dirty = true; }