/** @copydoc widgetdata::event_func */ static int widget_event(widgetdata *widget, SDL_Event *event) { uint32_t row, col; size_t i; if (EVENT_IS_MOUSE(event) && event->button.button == SDL_BUTTON_LEFT && list_mouse_get_pos(list_skills, event->motion.x, event->motion.y, &row, &col)) { size_t skill_id; skill_id = row * list_skills->cols + col; if (skill_id < skill_list_num) { if (event->type == SDL_MOUSEBUTTONUP) { if (selected_skill != skill_id) { selected_skill = skill_id; widget->redraw = 1; return 1; } } else if (event->type == SDL_MOUSEBUTTONDOWN) { event_dragging_start(skill_list[skill_id]->skill->tag, event->motion.x, event->motion.y); return 1; } } } /* If the list has handled the mouse event, we need to redraw the * widget. */ if (list_skills && list_handle_mouse(list_skills, event)) { widget->redraw = 1; return 1; } for (i = 0; i < BUTTON_NUM; i++) { if (button_event(&buttons[i], event)) { switch (i) { case BUTTON_CLOSE: widget->show = 0; break; case BUTTON_HELP: help_show("skill list"); break; } widget->redraw = 1; return 1; } if (buttons[i].redraw) { widget->redraw = 1; } } return 0; }
/** @copydoc widgetdata::event_func */ static int widget_event(widgetdata *widget, SDL_Event *event) { char buf[MAX_BUF]; size_t i; /* If the list has handled the mouse event, we need to redraw the * widget. */ if (list_party && list_handle_mouse(list_party, event)) { widget->redraw = 1; return 1; } for (i = 0; i < BUTTON_NUM; i++) { if ((cpl.partyname[0] == '\0' && (i == BUTTON_PASSWORD || i == BUTTON_LEAVE || i == BUTTON_CHAT || i == BUTTON_MEMBERS)) || (cpl.partyname[0] != '\0' && (i == BUTTON_FORM))) { continue; } if (button_event(&buttons[i], event)) { switch (i) { case BUTTON_PARTIES: send_command("/party list"); break; case BUTTON_MEMBERS: send_command("/party who"); break; case BUTTON_FORM: snprintf(buf, sizeof(buf), "?MCON /party form "); keybind_process_command(buf); break; case BUTTON_PASSWORD: snprintf(buf, sizeof(buf), "?MCON /party password "); keybind_process_command(buf); break; case BUTTON_LEAVE: send_command("/party leave"); break; case BUTTON_CHAT: snprintf(buf, sizeof(buf), "?MCON /gsay "); keybind_process_command(buf); break; case BUTTON_CLOSE: widget->show = 0; break; case BUTTON_HELP: help_show("spell list"); break; } widget->redraw = 1; return 1; } if (buttons[i].redraw) { widget->redraw = 1; } } return 0; }
/** @copydoc widgetdata::event_func */ static int widget_event(widgetdata *widget, SDL_Event *event) { size_t i; if (list_mplayer) { if (list_handle_mouse(list_mplayer, event)) { widget->redraw = 1; return 1; } else if (scrollbar_event(&scrollbar_progress, event)) { widget->redraw = 1; return 1; } } for (i = 0; i < BUTTON_NUM; i++) { if (button_event(&buttons[i], event)) { switch (i) { case BUTTON_PLAY: if (sound_map_background(-1)) { sound_start_bg_music("no_music", 0, 0); sound_map_background(0); shuffle = 0; } else { list_handle_enter(list_mplayer, event); } break; case BUTTON_SHUFFLE: shuffle = !shuffle; if (shuffle) { mplayer_do_shuffle(list_mplayer); sound_map_background(1); } else { sound_start_bg_music("no_music", 0, 0); sound_map_background(0); } break; case BUTTON_BLACKLIST: /* Toggle the blacklist state of the selected row. */ mplayer_blacklist_toggle(list_mplayer); mplayer_blacklist_save(list_mplayer); break; case BUTTON_CLOSE: widget->show = 0; break; case BUTTON_HELP: help_show("music player"); break; } widget->redraw = 1; return 1; } if (buttons[i].redraw) { widget->redraw = 1; } } return 0; }
/** * Handle event in the main screen. * @param event * The event to handle. * @return * 1 if the event was handled, 0 otherwise. */ int intro_event(SDL_Event *event) { if (!list_servers) { return 0; } if (event->type == SDL_MOUSEBUTTONDOWN && event->button.button == SDL_BUTTON_LEFT) { if (LIST_MOUSE_OVER(list_news, event->motion.x, event->motion.y)) { list_news->focus = 1; list_servers->focus = 0; } else if (LIST_MOUSE_OVER(list_servers, event->motion.x, event->motion.y)) { list_servers->focus = 1; list_news->focus = 0; } } if (button_event(&button_play, event)) { list_handle_enter(list_servers, event); return 1; } else if (button_event(&button_refresh, event)) { if (!ms_connecting(-1)) { cpl.state = ST_META; } return 1; } else if (button_event(&button_server, event)) { server_add_open(); return 1; } else if (button_event(&button_settings, event)) { settings_open(); return 1; } else if (button_event(&button_update, event)) { updater_open(); return 1; } else if (button_event(&button_help, event)) { help_show("main screen"); return 1; } else if (button_event(&button_credits, event)) { credits_show(); return 1; } else if (button_event(&button_quit, event)) { exit(0); return 1; } else if (event->type == SDL_KEYDOWN && event->key.keysym.sym == SDLK_TAB && list_news) { int news_focus = 0; if (list_servers->focus) { news_focus = 1; } list_news->focus = news_focus; list_servers->focus = !news_focus; } else if (list_handle_keyboard(list_news && list_news->focus ? list_news : list_servers, event)) { return 1; } else if (list_handle_mouse(list_news, event)) { return 1; } else if (list_handle_mouse(list_servers, event)) { return 1; } return 0; }