From 6aac94a2dfb3ff3a895b95da8b3b97017819ebbe Mon Sep 17 00:00:00 2001 From: Alice Grey Date: Sat, 20 Feb 2021 13:29:14 -0600 Subject: [PATCH 1/2] Add menu wrap around Menu's now wrap around in both directions --- rwatch/ui/layer/menu_layer.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rwatch/ui/layer/menu_layer.c b/rwatch/ui/layer/menu_layer.c index 54c64458..cb69762d 100644 --- a/rwatch/ui/layer/menu_layer.c +++ b/rwatch/ui/layer/menu_layer.c @@ -107,8 +107,19 @@ static MenuIndex get_next_index(MenuLayer *menu_layer, bool up) MenuIndex index = menu_layer->selected; if (!has_next_index(menu_layer, &index, up)) + { + if(index.row == 0) + { + index.row = get_num_rows(menu_layer, index.section) - (uint16_t) 1; + return index; + } + if(index.row == get_num_rows(menu_layer, index.section) - (uint16_t) 1) + { + index.row = 0; + return index; + } return index; - + } if (up && index.row == 0) { --index.section; From 9687977caf9f114e578274e59f7bcf39b4d2f8a3 Mon Sep 17 00:00:00 2001 From: Alice Grey Date: Sat, 20 Feb 2021 19:13:03 -0600 Subject: [PATCH 2/2] Don't infinite scroll if button is being held --- Apps/System/tests/menu_simple_test.c | 4 ++-- rwatch/ui/action_menu.c | 4 ++-- rwatch/ui/layer/menu_layer.c | 14 +++++++++----- rwatch/ui/layer/menu_layer.h | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Apps/System/tests/menu_simple_test.c b/Apps/System/tests/menu_simple_test.c index 12e262e5..c904be6b 100644 --- a/Apps/System/tests/menu_simple_test.c +++ b/Apps/System/tests/menu_simple_test.c @@ -84,12 +84,12 @@ static void _menu_select_callback(ClickRecognizerRef recognizer, void *context) static void _menu_next_callback(ClickRecognizerRef recognizer, void *context) { - menu_layer_set_selected_next(s_menu_layer, false, s_row_align, true); + menu_layer_set_selected_next(s_menu_layer, recognizer, false, s_row_align, true); } static void _menu_prev_callback(ClickRecognizerRef recognizer, void *context) { - menu_layer_set_selected_next(s_menu_layer, true, s_row_align, true); + menu_layer_set_selected_next(s_menu_layer, recognizer, true, s_row_align, true); } static void _menu_exit_callback(ClickRecognizerRef recognizer, void* context) diff --git a/rwatch/ui/action_menu.c b/rwatch/ui/action_menu.c index 158d0561..b6d2a18c 100644 --- a/rwatch/ui/action_menu.c +++ b/rwatch/ui/action_menu.c @@ -219,14 +219,14 @@ static void _action_menu_select_prev(ClickRecognizerRef recognizer, void *contex { ActionMenu *action_menu = (ActionMenu*)context; if (!action_menu->is_frozen) - menu_layer_set_selected_next(action_menu->menu_layer, true, MenuRowAlignCenter, true); + menu_layer_set_selected_next(action_menu->menu_layer, recognizer, true, MenuRowAlignCenter, true); } static void _action_menu_select_next(ClickRecognizerRef recognizer, void *context) { ActionMenu *action_menu = (ActionMenu*)context; if (!action_menu->is_frozen) - menu_layer_set_selected_next(action_menu->menu_layer, false, MenuRowAlignCenter, true); + menu_layer_set_selected_next(action_menu->menu_layer, recognizer, false, MenuRowAlignCenter, true); } static void _action_menu_activate_item(ClickRecognizerRef recognizer, void *context) diff --git a/rwatch/ui/layer/menu_layer.c b/rwatch/ui/layer/menu_layer.c index cb69762d..9f6a47e4 100644 --- a/rwatch/ui/layer/menu_layer.c +++ b/rwatch/ui/layer/menu_layer.c @@ -102,12 +102,16 @@ static bool has_next_index(const MenuLayer *menu_layer, const MenuIndex *index, || (!up && (index->section < menu_layer->end_index.section || index->row < menu_layer->end_index.row - 1)); } -static MenuIndex get_next_index(MenuLayer *menu_layer, bool up) +static MenuIndex get_next_index(MenuLayer *menu_layer, ClickRecognizerRef ref, bool up) { MenuIndex index = menu_layer->selected; if (!has_next_index(menu_layer, &index, up)) { + if (click_recognizer_is_repeating(ref)) + { + return index; + } if(index.row == 0) { index.row = get_num_rows(menu_layer, index.section) - (uint16_t) 1; @@ -135,9 +139,9 @@ static MenuIndex get_next_index(MenuLayer *menu_layer, bool up) return index; } -void menu_layer_set_selected_next(MenuLayer *menu_layer, bool up, MenuRowAlign scroll_align, bool animated) +void menu_layer_set_selected_next(MenuLayer *menu_layer, ClickRecognizerRef ref, bool up, MenuRowAlign scroll_align, bool animated) { - menu_layer_set_selected_index(menu_layer, get_next_index(menu_layer, up), scroll_align, animated); + menu_layer_set_selected_index(menu_layer, get_next_index(menu_layer, ref, up), scroll_align, animated); } static MenuCellSpan *_get_cell_span(MenuLayer *menu_layer, const MenuIndex *index) @@ -371,11 +375,11 @@ static void scroll_click_handler(ClickRecognizerRef ref, MenuLayer *menu_layer) { bool up = click_recognizer_get_button_id(ref) == BUTTON_ID_UP; if (!click_recognizer_is_repeating(ref)) { - menu_layer_set_selected_next(menu_layer, up, MenuRowAlignCenter, ANIMATE_ON_CLICK); + menu_layer_set_selected_next(menu_layer, ref, up, MenuRowAlignCenter, ANIMATE_ON_CLICK); menu_layer_scroll_repeat_prepare(menu_layer); } else { if (menu_layer_scroll_repeat(menu_layer)) - menu_layer_set_selected_next(menu_layer, up, MenuRowAlignCenter, ANIMATE_ON_CLICK); + menu_layer_set_selected_next(menu_layer, ref, up, MenuRowAlignCenter, ANIMATE_ON_CLICK); } } diff --git a/rwatch/ui/layer/menu_layer.h b/rwatch/ui/layer/menu_layer.h index cdbe88ac..3f2aaa60 100644 --- a/rwatch/ui/layer/menu_layer.h +++ b/rwatch/ui/layer/menu_layer.h @@ -151,7 +151,7 @@ typedef enum MenuRowAlignBottom, } MenuRowAlign; -void menu_layer_set_selected_next(MenuLayer *menu_layer, bool up, MenuRowAlign scroll_align, +void menu_layer_set_selected_next(MenuLayer *menu_layer,ClickRecognizerRef ref, bool up, MenuRowAlign scroll_align, bool animated); void menu_layer_set_selected_index(MenuLayer *menu_layer, MenuIndex index,