Move scroll_y to userdata

This commit is contained in:
twinaphex 2015-12-10 14:50:43 +01:00
parent f4695c7547
commit 686bcf723d
3 changed files with 31 additions and 27 deletions

View File

@ -107,6 +107,7 @@ typedef struct mui_handle
} categories; } categories;
gfx_font_raster_block_t list_block; gfx_font_raster_block_t list_block;
float scroll_y;
} mui_handle_t; } mui_handle_t;
static void mui_context_reset_textures(mui_handle_t *mui, const char *iconpath) static void mui_context_reset_textures(mui_handle_t *mui, const char *iconpath)
@ -333,7 +334,7 @@ static void mui_draw_scrollbar(unsigned width, unsigned height, float *coord_col
total_height = height - header_height - mui->tabs_height; total_height = height - header_height - mui->tabs_height;
scrollbar_margin = mui->scrollbar_width; scrollbar_margin = mui->scrollbar_width;
scrollbar_height = total_height / (content_height / total_height); scrollbar_height = total_height / (content_height / total_height);
y = total_height * menu->scroll_y / content_height; y = total_height * mui->scroll_y / content_height;
/* apply a margin on the top and bottom of the scrollbar for aestetic */ /* apply a margin on the top and bottom of the scrollbar for aestetic */
scrollbar_height -= scrollbar_margin * 2; scrollbar_height -= scrollbar_margin * 2;
@ -427,13 +428,13 @@ static void mui_render(void *data)
int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS); int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS);
float old_accel_val, new_accel_val; float old_accel_val, new_accel_val;
unsigned new_pointer_val = unsigned new_pointer_val =
(pointer_y - mui->line_height + menu->scroll_y - 16) (pointer_y - mui->line_height + mui->scroll_y - 16)
/ mui->line_height; / mui->line_height;
menu_input_ctl(MENU_INPUT_CTL_POINTER_ACCEL_READ, &old_accel_val); menu_input_ctl(MENU_INPUT_CTL_POINTER_ACCEL_READ, &old_accel_val);
menu_input_ctl(MENU_INPUT_CTL_POINTER_PTR, &new_pointer_val); menu_input_ctl(MENU_INPUT_CTL_POINTER_PTR, &new_pointer_val);
menu->scroll_y -= old_accel_val / 60.0; mui->scroll_y -= old_accel_val / 60.0;
new_accel_val = old_accel_val * 0.96; new_accel_val = old_accel_val * 0.96;
@ -445,28 +446,28 @@ static void mui_render(void *data)
int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS); int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS);
unsigned new_pointer_val = unsigned new_pointer_val =
(mouse_y - mui->line_height + menu->scroll_y - 16) (mouse_y - mui->line_height + mui->scroll_y - 16)
/ mui->line_height; / mui->line_height;
menu_input_ctl(MENU_INPUT_CTL_MOUSE_PTR, &new_pointer_val); menu_input_ctl(MENU_INPUT_CTL_MOUSE_PTR, &new_pointer_val);
} }
if (menu->scroll_y < 0) if (mui->scroll_y < 0)
menu->scroll_y = 0; mui->scroll_y = 0;
bottom = menu_entries_get_end() * mui->line_height bottom = menu_entries_get_end() * mui->line_height
- height + header_height + mui->tabs_height; - height + header_height + mui->tabs_height;
if (menu->scroll_y > bottom) if (mui->scroll_y > bottom)
menu->scroll_y = bottom; mui->scroll_y = bottom;
if (menu_entries_get_end() * mui->line_height if (menu_entries_get_end() * mui->line_height
< height - header_height - mui->tabs_height) < height - header_height - mui->tabs_height)
menu->scroll_y = 0; mui->scroll_y = 0;
if (menu_entries_get_end() < height / mui->line_height) if (menu_entries_get_end() < height / mui->line_height)
menu_entries_set_start(0); menu_entries_set_start(0);
else else
menu_entries_set_start(menu->scroll_y / mui->line_height); menu_entries_set_start(mui->scroll_y / mui->line_height);
} }
static void mui_render_label_value(mui_handle_t *mui, static void mui_render_label_value(mui_handle_t *mui,
@ -595,7 +596,7 @@ static void mui_render_menu_list(mui_handle_t *mui,
if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection)) if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection))
continue; continue;
y = header_height - menu->scroll_y + (mui->line_height * i); y = header_height - mui->scroll_y + (mui->line_height * i);
if ((y - (int)mui->line_height) > (int)height if ((y - (int)mui->line_height) > (int)height
|| ((y + (int)mui->line_height) < 0)) || ((y + (int)mui->line_height) < 0))
@ -796,7 +797,7 @@ static void mui_frame(void)
/* highlighted entry */ /* highlighted entry */
mui_render_quad(0, mui_render_quad(0,
header_height - menu->scroll_y + mui->line_height * header_height - mui->scroll_y + mui->line_height *
selection, width, mui->line_height, selection, width, mui->line_height,
width, height, width, height,
&lightblue_bg[0]); &lightblue_bg[0]);
@ -1084,12 +1085,13 @@ static void mui_navigation_set(bool scroll)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
float scroll_pos = mui_get_scroll(); float scroll_pos = mui_get_scroll();
mui_handle_t *mui = menu ? (mui_handle_t*)menu->userdata : NULL;
if (!menu || !scroll) if (!mui || !scroll)
return; return;
menu_animation_push(10, scroll_pos, menu_animation_push(10, scroll_pos,
&menu->scroll_y, EASING_IN_OUT_QUAD, -1, NULL); &mui->scroll_y, EASING_IN_OUT_QUAD, -1, NULL);
} }
static void mui_list_set_selection(file_list_t *list) static void mui_list_set_selection(file_list_t *list)
@ -1100,11 +1102,12 @@ static void mui_list_set_selection(file_list_t *list)
static void mui_navigation_clear(bool pending_push) static void mui_navigation_clear(bool pending_push)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
if (!menu) mui_handle_t *mui = menu ? (mui_handle_t*)menu->userdata : NULL;
if (!mui)
return; return;
menu_entries_set_start(0); menu_entries_set_start(0);
menu->scroll_y = 0; mui->scroll_y = 0;
} }
static void mui_navigation_set_last(void) static void mui_navigation_set_last(void)
@ -1121,10 +1124,11 @@ static void mui_populate_entries(const char *path,
const char *label, unsigned i) const char *label, unsigned i)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
if (!menu) mui_handle_t *mui = menu ? (mui_handle_t*)menu->userdata : NULL;
if (!mui)
return; return;
menu->scroll_y = mui_get_scroll(); mui->scroll_y = mui_get_scroll();
} }
static void mui_context_reset(void) static void mui_context_reset(void)

View File

@ -50,6 +50,7 @@ typedef struct
char msgbox[4096]; char msgbox[4096];
unsigned last_width; unsigned last_width;
unsigned last_height; unsigned last_height;
float scroll_y;
} rgui_t; } rgui_t;
#if defined(GEKKO)|| defined(PSP) #if defined(GEKKO)|| defined(PSP)
@ -477,10 +478,10 @@ static void rgui_render(void *data)
if (pointer_dragged) if (pointer_dragged)
{ {
int16_t delta_y = menu_input_pointer_state(MENU_POINTER_DELTA_Y_AXIS); int16_t delta_y = menu_input_pointer_state(MENU_POINTER_DELTA_Y_AXIS);
menu->scroll_y += delta_y; rgui->scroll_y += delta_y;
menu_entries_set_start(-menu->scroll_y / 11 + 2); menu_entries_set_start(-rgui->scroll_y / 11 + 2);
if (menu->scroll_y > 0) if (rgui->scroll_y > 0)
menu->scroll_y = 0; rgui->scroll_y = 0;
} }
} }
@ -735,12 +736,13 @@ static void rgui_set_texture(void)
static void rgui_navigation_clear(bool pending_push) static void rgui_navigation_clear(bool pending_push)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
if (!menu) rgui_t *rgui = menu ? (rgui_t*)menu->userdata : NULL;
if (!rgui)
return; return;
menu_entries_set_start(0); menu_entries_set_start(0);
menu->scroll_y = 0; rgui->scroll_y = 0;
} }
static void rgui_navigation_set(bool scroll) static void rgui_navigation_set(bool scroll)

View File

@ -221,8 +221,6 @@ typedef struct
{ {
void *userdata; void *userdata;
float scroll_y;
bool push_help_screen; bool push_help_screen;
unsigned help_screen_id; unsigned help_screen_id;
menu_help_type_t help_screen_type; menu_help_type_t help_screen_type;