diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index e6e1b2ef0b..7c56f06486 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -273,8 +273,8 @@ static void glui_render(void) (menu_input->pointer.y - glui->line_height + menu->scroll_y - 16) / glui->line_height; - if (menu_input->pointer.dragging) - menu->scroll_y -= menu_input->pointer.dy; + menu->scroll_y -= menu_input->pointer.accel / 60.0; + menu_input->pointer.accel = menu_input->pointer.accel * 0.96; } if (settings->menu.mouse.enable) diff --git a/menu/menu_input.c b/menu/menu_input.c index 0ac1e95b5b..4bbae686e1 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -895,11 +895,17 @@ static int menu_input_pointer_post_iterate(menu_file_list_cbs_t *cbs, else if (abs(menu_input->pointer.x - menu_input->pointer.start_x) > 3 || abs(menu_input->pointer.y - menu_input->pointer.start_y) > 3) { + float s; menu_input->pointer.dragging = true; menu_input->pointer.dx = menu_input->pointer.x - menu_input->pointer.old_x; menu_input->pointer.dy = menu_input->pointer.y - menu_input->pointer.old_y; menu_input->pointer.old_x = menu_input->pointer.x; menu_input->pointer.old_y = menu_input->pointer.y; + + s = menu_input->pointer.dy / disp->animation->delta_time * 1000000.0; + menu_input->pointer.accel = (menu_input->pointer.accel0 + menu_input->pointer.accel1 + s) / 3; + menu_input->pointer.accel0 = menu_input->pointer.accel1; + menu_input->pointer.accel1 = menu_input->pointer.accel; } } else diff --git a/menu/menu_input.h b/menu/menu_input.h index 0f6e80993f..1d80986752 100644 --- a/menu/menu_input.h +++ b/menu/menu_input.h @@ -151,6 +151,9 @@ typedef struct menu_input int16_t old_y; int16_t start_x; int16_t start_y; + float accel; + float accel0; + float accel1; bool pressed[2]; bool oldpressed[2]; bool dragging;