void Combobox::on_primary_button_press(int x, int y) { if (drop_down) { // Determine which item was selected, if any, and set the current item to it. drop_down = false; ungrab(); if (hover_item != -1) { current_item = hover_item; on_select(item_list[current_item]); } } else { drop_down = true; grab(); list_rect = Rect(Vector2i(rect.left, rect.top + get_box_offset()), Size(rect.get_width(), rect.get_height() * item_list.size())); on_pointer_move(x,y); } }
void FileList::on_primary_button_release (int x, int y) { on_pointer_move(x,y); if (click_item == current_item && current_item != -1) { on_click(directory[static_cast<size_t>(current_item)]); } click_item = -1; }
void GUIManager::update(const Input::Event& event) { switch (event.type) { case Input::POINTER_EVENT_TYPE: mouse_pos.x = int(event.pointer.x); mouse_pos.y = int(event.pointer.y); on_pointer_move(mouse_pos.x, mouse_pos.y); break; case Input::BUTTON_EVENT_TYPE: if (event.button.name == PRIMARY_BUTTON) { if (event.button.state == Input::BUTTON_PRESSED) on_primary_button_press(mouse_pos.x, mouse_pos.y); else if (event.button.state == Input::BUTTON_RELEASED) on_primary_button_release(mouse_pos.x, mouse_pos.y); } else if (event.button.name == SECONDARY_BUTTON) { if (event.button.state == Input::BUTTON_PRESSED) on_secondary_button_press(mouse_pos.x, mouse_pos.y); else if (event.button.state == Input::BUTTON_RELEASED) on_secondary_button_release(mouse_pos.x, mouse_pos.y); } break; case Input::AXIS_EVENT_TYPE: // AxisEvents can be ignored in the GUI, they are handled elsewhere log_debug("GUIManager: AxisEvent: %1%", event.axis.dir); break; case Input::KEYBOARD_EVENT_TYPE: if (event.keyboard.state) { on_key_pressed(event.keyboard); } else { //FIXME: implement this on_key_release(event.keyboard); } break; case Input::SCROLLER_EVENT_TYPE: on_scroller_move(event.scroll.x_delta, event.scroll.y_delta); break; default: log_warn("unhandled event type %1%", event.type); break; } }
void GUIManager::update(const Input::Event& event) { switch (event.type) { case Input::POINTER_EVENT_TYPE: mouse_pos.x = int(event.pointer.x); mouse_pos.y = int(event.pointer.y); on_pointer_move(mouse_pos.x, mouse_pos.y); break; case Input::BUTTON_EVENT_TYPE: if (event.button.name == PRIMARY_BUTTON) { if (event.button.state == Input::BUTTON_PRESSED) on_primary_button_press(mouse_pos.x, mouse_pos.y); else if (event.button.state == Input::BUTTON_RELEASED) on_primary_button_release(mouse_pos.x, mouse_pos.y); } else if (event.button.name == SECONDARY_BUTTON) { if (event.button.state == Input::BUTTON_PRESSED) on_secondary_button_press(mouse_pos.x, mouse_pos.y); else if (event.button.state == Input::BUTTON_RELEASED) on_secondary_button_release(mouse_pos.x, mouse_pos.y); } break; case Input::AXIS_EVENT_TYPE: // AxisEvents can be ignored in the GUI, they are handled elsewhere pout(PINGUS_DEBUG_GUI) << "GUIManager: AxisEvent: " << event.axis.dir << std::endl; break; case Input::KEYBOARD_EVENT_TYPE: on_key_pressed(event.keyboard.key); break; case Input::SCROLLER_EVENT_TYPE: on_scroller_move(event.scroll.x_delta, event.scroll.y_delta); break; default: pwarn (PINGUS_DEBUG_GUI) << "GUIManager: unhandled event type " << event.type << std::endl; break; } }
void FileList::on_primary_button_press (int x, int y) { on_pointer_move(x,y); click_item = current_item; }
void SliderBox::on_primary_button_release(int x, int y) { drag_drop = false; on_pointer_move(x, y); }
void SliderBox::on_primary_button_press(int x, int y) { drag_drop = true; on_pointer_move(x, y); }