mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 13:14:04 +00:00
commit
3876ee3fe3
@ -233,12 +233,8 @@ static int mouse_post_iterate(menu_file_list_cbs_t *cbs, unsigned action)
|
|||||||
if (!driver.menu->mouse.enable)
|
if (!driver.menu->mouse.enable)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (driver.menu->mouse.dy)
|
if (driver.menu->mouse.ptr <= menu_list_get_size(driver.menu->menu_list)-1)
|
||||||
{
|
menu_navigation_set(driver.menu, driver.menu->mouse.ptr, false);
|
||||||
unsigned mouse_ptr = driver.menu->mouse.y / 11 - 2 + driver.menu->begin;
|
|
||||||
if (mouse_ptr <= menu_list_get_size(driver.menu->menu_list)-1)
|
|
||||||
menu_navigation_set(driver.menu, mouse_ptr, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (driver.menu->mouse.left)
|
if (driver.menu->mouse.left)
|
||||||
{
|
{
|
||||||
|
@ -149,6 +149,67 @@ static void glui_render_background(bool force_transparency)
|
|||||||
gl->coords.color = gl->white_color_ptr;
|
gl->coords.color = gl->white_color_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void glui_draw_cursor(float x, float y)
|
||||||
|
{
|
||||||
|
gl_t *gl = NULL;
|
||||||
|
glui_handle_t *glui = NULL;
|
||||||
|
|
||||||
|
if (!driver.menu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
glui = (glui_handle_t*)driver.menu->userdata;
|
||||||
|
|
||||||
|
if (!glui)
|
||||||
|
return;
|
||||||
|
|
||||||
|
GLfloat color[] = {
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
};
|
||||||
|
|
||||||
|
gl = (gl_t*)driver_video_resolve(NULL);
|
||||||
|
|
||||||
|
if (!gl)
|
||||||
|
return;
|
||||||
|
|
||||||
|
glViewport(x - 5, gl->win_height - y, 11, 11);
|
||||||
|
|
||||||
|
static const GLfloat vertex[] = {
|
||||||
|
0, 0,
|
||||||
|
1, 0,
|
||||||
|
0, 1,
|
||||||
|
1, 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const GLfloat tex_coord[] = {
|
||||||
|
0, 1,
|
||||||
|
1, 1,
|
||||||
|
0, 0,
|
||||||
|
1, 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct gl_coords coords;
|
||||||
|
coords.vertices = 4;
|
||||||
|
coords.vertex = vertex;
|
||||||
|
coords.tex_coord = tex_coord;
|
||||||
|
coords.lut_tex_coord = tex_coord;
|
||||||
|
|
||||||
|
coords.color = color;
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
gl->shader->use(gl, GL_SHADER_STOCK_BLEND);
|
||||||
|
gl->shader->set_coords(&coords);
|
||||||
|
gl->shader->set_mvp(gl, &gl->mvp_no_rot);
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
|
gl->coords.color = gl->white_color_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
static void glui_get_message(const char *message)
|
static void glui_get_message(const char *message)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
@ -214,7 +275,7 @@ static void glui_frame(void)
|
|||||||
const char *dir = NULL;
|
const char *dir = NULL;
|
||||||
const char *label = NULL;
|
const char *label = NULL;
|
||||||
unsigned menu_type = 0;
|
unsigned menu_type = 0;
|
||||||
size_t begin = 0, end;
|
size_t end;
|
||||||
gl_t *gl = (gl_t*)driver_video_resolve(NULL);
|
gl_t *gl = (gl_t*)driver_video_resolve(NULL);
|
||||||
glui_handle_t *glui = NULL;
|
glui_handle_t *glui = NULL;
|
||||||
|
|
||||||
@ -237,22 +298,26 @@ static void glui_frame(void)
|
|||||||
glui->term_width = (gl->win_width - glui->margin * 2) / glui->glyph_width;
|
glui->term_width = (gl->win_width - glui->margin * 2) / glui->glyph_width;
|
||||||
glui->term_height = (gl->win_height - glui->margin * 2) / glui->line_height - 2;
|
glui->term_height = (gl->win_height - glui->margin * 2) / glui->line_height - 2;
|
||||||
|
|
||||||
|
driver.menu->mouse.ptr = (driver.menu->mouse.y - glui->margin) /
|
||||||
|
glui->line_height - 2 + driver.menu->begin;
|
||||||
|
|
||||||
glViewport(0, 0, gl->win_width, gl->win_height);
|
glViewport(0, 0, gl->win_width, gl->win_height);
|
||||||
|
|
||||||
|
if (driver.menu->mouse.wheeldown && driver.menu->begin
|
||||||
|
< menu_list_get_size(driver.menu->menu_list) - glui->term_height)
|
||||||
|
driver.menu->begin++;
|
||||||
|
|
||||||
if (driver.menu->selection_ptr >= glui->term_height / 2)
|
if (driver.menu->mouse.wheelup && driver.menu->begin > 0)
|
||||||
begin = driver.menu->selection_ptr - glui->term_height / 2;
|
driver.menu->begin--;
|
||||||
end = (driver.menu->selection_ptr + glui->term_height <=
|
|
||||||
menu_list_get_size(driver.menu->menu_list)) ?
|
|
||||||
driver.menu->selection_ptr + glui->term_height :
|
|
||||||
menu_list_get_size(driver.menu->menu_list);
|
|
||||||
|
|
||||||
/* Do not scroll if all items are visible. */
|
/* Do not scroll if all items are visible. */
|
||||||
if (menu_list_get_size(driver.menu->menu_list) <= glui->term_height)
|
if (menu_list_get_size(driver.menu->menu_list) <= glui->term_height)
|
||||||
begin = 0;
|
driver.menu->begin = 0;
|
||||||
|
|
||||||
if (end - begin > glui->term_height)
|
end = (driver.menu->begin + glui->term_height <=
|
||||||
end = begin + glui->term_height;
|
menu_list_get_size(driver.menu->menu_list)) ?
|
||||||
|
driver.menu->begin + glui->term_height :
|
||||||
|
menu_list_get_size(driver.menu->menu_list);
|
||||||
|
|
||||||
glui_render_background(false);
|
glui_render_background(false);
|
||||||
|
|
||||||
@ -288,7 +353,7 @@ static void glui_frame(void)
|
|||||||
x = glui->margin;
|
x = glui->margin;
|
||||||
y = glui->margin + glui->line_height * 2;
|
y = glui->margin + glui->line_height * 2;
|
||||||
|
|
||||||
for (i = begin; i < end; i++, y += glui->line_height)
|
for (i = driver.menu->begin; i < end; i++, y += glui->line_height)
|
||||||
{
|
{
|
||||||
char message[PATH_MAX], type_str[PATH_MAX],
|
char message[PATH_MAX], type_str[PATH_MAX],
|
||||||
entry_title_buf[PATH_MAX], type_str_buf[PATH_MAX],
|
entry_title_buf[PATH_MAX], type_str_buf[PATH_MAX],
|
||||||
@ -356,6 +421,9 @@ static void glui_frame(void)
|
|||||||
glui->box_message[0] = '\0';
|
glui->box_message[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (driver.menu->mouse.enable)
|
||||||
|
glui_draw_cursor(driver.menu->mouse.x, driver.menu->mouse.y);
|
||||||
|
|
||||||
gl_set_viewport(gl, gl->win_width, gl->win_height, false, false);
|
gl_set_viewport(gl, gl->win_width, gl->win_height, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -497,6 +565,40 @@ static void glui_context_reset(void *data)
|
|||||||
printf("%d\n", glui->bg);
|
printf("%d\n", glui->bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void glui_navigation_clear(void *data, bool pending_push)
|
||||||
|
{
|
||||||
|
driver.menu->begin = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void glui_navigation_set(void *data, bool scroll)
|
||||||
|
{
|
||||||
|
glui_handle_t *glui = NULL;
|
||||||
|
|
||||||
|
menu_handle_t *menu = (menu_handle_t*)data;
|
||||||
|
|
||||||
|
if (!menu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
glui = (glui_handle_t*)menu->userdata;
|
||||||
|
|
||||||
|
if (!glui)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!scroll)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (driver.menu->selection_ptr < glui->term_height/2)
|
||||||
|
driver.menu->begin = 0;
|
||||||
|
else if (driver.menu->selection_ptr >= glui->term_height/2
|
||||||
|
&& driver.menu->selection_ptr <
|
||||||
|
menu_list_get_size(driver.menu->menu_list) - glui->term_height/2)
|
||||||
|
driver.menu->begin = driver.menu->selection_ptr - glui->term_height/2;
|
||||||
|
else if (driver.menu->selection_ptr >=
|
||||||
|
menu_list_get_size(driver.menu->menu_list) - glui->term_height/2)
|
||||||
|
driver.menu->begin = menu_list_get_size(driver.menu->menu_list)
|
||||||
|
- glui->term_height;
|
||||||
|
}
|
||||||
|
|
||||||
menu_ctx_driver_t menu_ctx_glui = {
|
menu_ctx_driver_t menu_ctx_glui = {
|
||||||
NULL,
|
NULL,
|
||||||
glui_get_message,
|
glui_get_message,
|
||||||
@ -510,10 +612,10 @@ menu_ctx_driver_t menu_ctx_glui = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
glui_navigation_clear,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
glui_navigation_set,
|
||||||
NULL,
|
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -320,6 +320,8 @@ static void rgui_render(void)
|
|||||||
if (!rgui)
|
if (!rgui)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
driver.menu->mouse.ptr = driver.menu->mouse.y / 11 - 2 + driver.menu->begin;
|
||||||
|
|
||||||
if (driver.menu->mouse.wheeldown && driver.menu->begin
|
if (driver.menu->mouse.wheeldown && driver.menu->begin
|
||||||
< menu_list_get_size(driver.menu->menu_list) - RGUI_TERM_HEIGHT)
|
< menu_list_get_size(driver.menu->menu_list) - RGUI_TERM_HEIGHT)
|
||||||
driver.menu->begin++;
|
driver.menu->begin++;
|
||||||
|
@ -127,6 +127,7 @@ typedef struct
|
|||||||
bool oldright;
|
bool oldright;
|
||||||
bool wheelup;
|
bool wheelup;
|
||||||
bool wheeldown;
|
bool wheeldown;
|
||||||
|
unsigned ptr;
|
||||||
} mouse;
|
} mouse;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
Loading…
x
Reference in New Issue
Block a user