void InputListener::onEvent(const sf::Event& event) { switch (event.type) { /* Window */ case sf::Event::LostFocus: onFocusLost(); break; case sf::Event::GainedFocus: onFocusGained(); break; case sf::Event::Closed: onWindowClosed(); break; case sf::Event::Resized: onWindowResized(event.size); break; /* Keyboard */ case sf::Event::TextEntered: onTextEntered(event.text); break; case sf::Event::KeyPressed: onKeyPressed(event.key); break; case sf::Event::KeyReleased: onKeyReleased(event.key); break; /* Mouse */ case sf::Event::MouseEntered: onMouseEntered(); break; case sf::Event::MouseLeft: onMouseLeft(); break; case sf::Event::MouseMoved: onMouseMoved(event.mouseMove); break; case sf::Event::MouseWheelMoved: onMouseWheelMoved(event.mouseWheel); break; case sf::Event::MouseButtonPressed: onMouseButtonPressed(event.mouseButton); break; case sf::Event::MouseButtonReleased: onMouseButtonReleased(event.mouseButton); break; /* Joystick */ case sf::Event::JoystickConnected: onJoystickConnected(event.joystickConnect); break; case sf::Event::JoystickDisconnected: onJoystickDisconnected(event.joystickConnect); break; case sf::Event::JoystickButtonPressed: onJoystickButtonPressed(event.joystickButton); break; case sf::Event::JoystickButtonReleased: onJoystickButtonReleased(event.joystickButton); break; case sf::Event::JoystickMoved: onJoystickMoved(event.joystickMove); break; default: Logger::log("Warning", "Unknow event type: %d", event.type); break; } }
bool Button::processEvent(const sf::Event& event,const sf::Vector2f& parent_pos) { bool res = false; if(event.type == sf::Event::MouseButtonReleased) { const sf::Vector2f pos = parent_pos + _position; const sf::Vector2f size = getSize(); sf::FloatRect rect(pos.x, pos.y, size.x, size.y); if(rect.contains(event.mouseButton.x,event.mouseButton.y)) { onClick(event,*this); res = true; } } else if (event.type == sf::Event::MouseMoved) { const sf::Vector2f pos = parent_pos + _position; const sf::Vector2f size = getSize(); sf::FloatRect rect(pos.x, pos.y, size.x, size.y); int old_status = _status; _status = Status::None; if(rect.contains(event.mouseMove.x,event.mouseMove.y)) _status=Status::Hover; if((old_status & Status::Hover) and not (_status & Status::Hover)) onMouseLeft(); else if(not (old_status & Status::Hover) and (_status & Status::Hover)) onMouseEntered(); } return res; }
void SDLEventHandler::onWindowEvent(const SDL_WindowEvent& e) { /* *SDL provides two "resize" events. * Warp Drive only provides treatment for the "resize request" * type, for the moment. Should it prove useful, this will be ammended */ if (e.windowID != SDL_GetWindowID(DisplayManager::instance()->getScreen())) { return; } switch (e.event) { case SDL_WINDOWEVENT_SHOWN: onWindowShown(e); break; case SDL_WINDOWEVENT_HIDDEN: onWindowHidden(e); break; case SDL_WINDOWEVENT_EXPOSED: onWindowExposed(e); break; case SDL_WINDOWEVENT_MOVED: onWindowMoved(e); break; case SDL_WINDOWEVENT_SIZE_CHANGED: onWindowResized(e); break; case SDL_WINDOWEVENT_MINIMIZED: onWindowMinimized(e); break; case SDL_WINDOWEVENT_MAXIMIZED: onWindowMaximized(e); break; case SDL_WINDOWEVENT_RESTORED: onWindowRestored(e); break; case SDL_WINDOWEVENT_ENTER: onMouseEntered(e); break; case SDL_WINDOWEVENT_LEAVE: onMouseLeft(e); break; case SDL_WINDOWEVENT_FOCUS_GAINED: onKeyboardFocus(e); break; case SDL_WINDOWEVENT_FOCUS_LOST: onKeyboardFocusLost(e); break; case SDL_WINDOWEVENT_CLOSE: onWindowCloseRequest(e); break; default: // Unexpected event type! assert(0); break; } }