mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-12 18:58:36 -07:00
Improve browser wrap around behavior
This commit is contained in:
@@ -423,13 +423,29 @@ static bool archive_view_input(InputEvent* event, void* context) {
|
|||||||
scroll_speed = model->button_held_for_ticks > 9 ? 4 : 2;
|
scroll_speed = model->button_held_for_ticks > 9 ? 4 : 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(model->button_held_for_ticks < -1) {
|
||||||
|
model->button_held_for_ticks = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(event->key == InputKeyUp) {
|
if(event->key == InputKeyUp) {
|
||||||
if(model->item_idx < scroll_speed) {
|
if(model->item_idx < scroll_speed) {
|
||||||
model->button_held_for_ticks = 0;
|
// Would wrap around
|
||||||
model->item_idx = model->item_cnt - 1;
|
if(model->item_idx == 0) {
|
||||||
file_list_rollover(model);
|
// Is first item
|
||||||
|
if(model->button_held_for_ticks > 0) {
|
||||||
|
// Was holding, so wait a second to roll over
|
||||||
|
model->button_held_for_ticks = -1;
|
||||||
|
} else {
|
||||||
|
// Wasn't holding / done waiting, roll over now
|
||||||
|
model->item_idx = model->item_cnt - 1;
|
||||||
|
file_list_rollover(model);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Not first item, jump to first
|
||||||
|
model->item_idx = 0;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// No wrap around
|
||||||
model->item_idx =
|
model->item_idx =
|
||||||
((model->item_idx - scroll_speed) + model->item_cnt) %
|
((model->item_idx - scroll_speed) + model->item_cnt) %
|
||||||
model->item_cnt;
|
model->item_cnt;
|
||||||
@@ -444,12 +460,24 @@ static bool archive_view_input(InputEvent* event, void* context) {
|
|||||||
model->scroll_counter = 0;
|
model->scroll_counter = 0;
|
||||||
model->button_held_for_ticks += 1;
|
model->button_held_for_ticks += 1;
|
||||||
} else if(event->key == InputKeyDown) {
|
} else if(event->key == InputKeyDown) {
|
||||||
int32_t count = model->item_cnt;
|
if(model->item_idx + scroll_speed >= (int32_t)model->item_cnt) {
|
||||||
if(model->item_idx + scroll_speed >= count) {
|
// Would wrap around
|
||||||
model->button_held_for_ticks = 0;
|
if(model->item_idx == (int32_t)model->item_cnt - 1) {
|
||||||
model->item_idx = 0;
|
// Is last item
|
||||||
file_list_rollover(model);
|
if(model->button_held_for_ticks > 0) {
|
||||||
|
// Was holding, so wait a second to roll over
|
||||||
|
model->button_held_for_ticks = -1;
|
||||||
|
} else {
|
||||||
|
// Wasn't holding / done waiting, roll over now
|
||||||
|
model->item_idx = 0;
|
||||||
|
file_list_rollover(model);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Not last item, jump to last
|
||||||
|
model->item_idx = model->item_cnt - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// No wrap around
|
||||||
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
|
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
|
||||||
}
|
}
|
||||||
if(archive_is_file_list_load_required(model)) {
|
if(archive_is_file_list_load_required(model)) {
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ typedef struct {
|
|||||||
int32_t list_offset;
|
int32_t list_offset;
|
||||||
size_t scroll_counter;
|
size_t scroll_counter;
|
||||||
|
|
||||||
uint32_t button_held_for_ticks;
|
int32_t button_held_for_ticks;
|
||||||
} ArchiveBrowserViewModel;
|
} ArchiveBrowserViewModel;
|
||||||
|
|
||||||
void archive_browser_set_callback(
|
void archive_browser_set_callback(
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ typedef struct {
|
|||||||
bool hide_ext;
|
bool hide_ext;
|
||||||
size_t scroll_counter;
|
size_t scroll_counter;
|
||||||
|
|
||||||
uint32_t button_held_for_ticks;
|
int32_t button_held_for_ticks;
|
||||||
} FileBrowserModel;
|
} FileBrowserModel;
|
||||||
|
|
||||||
static const Icon* BrowserItemIcons[] = {
|
static const Icon* BrowserItemIcons[] = {
|
||||||
@@ -677,13 +677,29 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
|
|||||||
scroll_speed = model->button_held_for_ticks > 9 ? 5 : 3;
|
scroll_speed = model->button_held_for_ticks > 9 ? 5 : 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(model->button_held_for_ticks < -1) {
|
||||||
|
model->button_held_for_ticks = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(event->key == InputKeyUp) {
|
if(event->key == InputKeyUp) {
|
||||||
if(model->item_idx < scroll_speed) {
|
if(model->item_idx < scroll_speed) {
|
||||||
model->button_held_for_ticks = 0;
|
// Would wrap around
|
||||||
model->item_idx = model->item_cnt - 1;
|
if(model->item_idx == 0) {
|
||||||
browser_list_rollover(model);
|
// Is first item
|
||||||
|
if(model->button_held_for_ticks > 0) {
|
||||||
|
// Was holding, so wait a second to roll over
|
||||||
|
model->button_held_for_ticks = -1;
|
||||||
|
} else {
|
||||||
|
// Wasn't holding / done waiting, roll over now
|
||||||
|
model->item_idx = model->item_cnt - 1;
|
||||||
|
file_list_rollover(model);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Not first item, jump to first
|
||||||
|
model->item_idx = 0;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// No wrap around
|
||||||
model->item_idx =
|
model->item_idx =
|
||||||
((model->item_idx - scroll_speed) + model->item_cnt) %
|
((model->item_idx - scroll_speed) + model->item_cnt) %
|
||||||
model->item_cnt;
|
model->item_cnt;
|
||||||
@@ -703,10 +719,23 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
|
|||||||
model->button_held_for_ticks += 1;
|
model->button_held_for_ticks += 1;
|
||||||
} else if(event->key == InputKeyDown) {
|
} else if(event->key == InputKeyDown) {
|
||||||
if(model->item_idx + scroll_speed >= (int32_t)model->item_cnt) {
|
if(model->item_idx + scroll_speed >= (int32_t)model->item_cnt) {
|
||||||
model->button_held_for_ticks = 0;
|
// Would wrap around
|
||||||
model->item_idx = 0;
|
if(model->item_idx == (int32_t)model->item_cnt - 1) {
|
||||||
browser_list_rollover(model);
|
// Is last item
|
||||||
|
if(model->button_held_for_ticks > 0) {
|
||||||
|
// Was holding, so wait a second to roll over
|
||||||
|
model->button_held_for_ticks = -1;
|
||||||
|
} else {
|
||||||
|
// Wasn't holding / done waiting, roll over now
|
||||||
|
model->item_idx = 0;
|
||||||
|
file_list_rollover(model);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Not last item, jump to last
|
||||||
|
model->item_idx = model->item_cnt - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// No wrap around
|
||||||
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
|
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user