static int menu_input_mouse_frame( menu_file_list_cbs_t *cbs, menu_entry_t *entry, uint64_t input_mouse) { menu_input_t *menu_input = menu_input_get_ptr(); menu_list_t *menu_list = menu_list_get_ptr(); menu_navigation_t *nav = menu_navigation_get_ptr(); if (BIT64_GET(input_mouse, MOUSE_ACTION_BUTTON_L)) { if (BIT64_GET(input_mouse, MOUSE_ACTION_BUTTON_L_TOGGLE)) return menu_entry_action(entry, nav->selection_ptr, MENU_ACTION_SELECT); if (BIT64_GET(input_mouse, MOUSE_ACTION_BUTTON_L_SET_NAVIGATION)) menu_navigation_set(nav, menu_input->mouse.ptr, false); } if (BIT64_GET(input_mouse, MOUSE_ACTION_BUTTON_R)) menu_list_pop_stack(menu_list, &nav->selection_ptr); if (BIT64_GET(input_mouse, MOUSE_ACTION_WHEEL_DOWN)) menu_navigation_increment(nav, 1); if (BIT64_GET(input_mouse, MOUSE_ACTION_WHEEL_UP)) menu_navigation_decrement(nav, 1); return 0; }
static int menu_input_mouse_post_iterate(menu_file_list_cbs_t *cbs, const char *path, const char *label, unsigned type, unsigned action) { driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); settings_t *settings = config_get_ptr(); if (!menu) return -1; if (!settings->menu.mouse.enable #ifdef HAVE_OVERLAY || (settings->input.overlay_enable && driver && driver->overlay) #endif ) { menu->mouse.wheeldown = false; menu->mouse.wheelup = false; menu->mouse.oldleft = false; menu->mouse.oldright = false; return 0; } if (menu->mouse.left) { if (!menu->mouse.oldleft) { rarch_setting_t *setting = (rarch_setting_t*)setting_find_setting (menu->list_settings, menu->menu_list->selection_buf->list[menu->navigation.selection_ptr].label); menu->mouse.oldleft = true; #if 0 RARCH_LOG("action OK: %d\n", cbs && cbs->action_ok); RARCH_LOG("action toggle: %d\n", cbs && cbs->action_toggle); if (setting && setting->type) RARCH_LOG("action type: %d\n", setting->type); #endif if (menu->mouse.ptr == menu->navigation.selection_ptr && cbs && cbs->action_toggle && setting && (setting->type == ST_BOOL || setting->type == ST_UINT || setting->type == ST_FLOAT || setting->type == ST_STRING)) return cbs->action_toggle(type, label, MENU_ACTION_RIGHT, true); if (menu->mouse.ptr == menu->navigation.selection_ptr && cbs && cbs->action_ok) return cbs->action_ok(path, label, type, menu->navigation.selection_ptr); else if (menu->mouse.ptr <= menu_list_get_size(menu->menu_list)-1) menu_navigation_set(&menu->navigation, menu->mouse.ptr, false); } } else menu->mouse.oldleft = false; if (menu->mouse.right) { if (!menu->mouse.oldright) { menu->mouse.oldright = true; menu_list_pop_stack(menu->menu_list); } } else menu->mouse.oldright = false; if (menu->mouse.wheeldown) menu_navigation_increment(&menu->navigation, 1); if (menu->mouse.wheelup) menu_navigation_decrement(&menu->navigation, 1); return 0; }