void SDLInput::simulateMouseClick(const int x, const int y, const MouseButton::Type button) { MouseInput mouseInput; mouseInput.setX(x); mouseInput.setY(y); mouseInput.setReal(x, y); mouseInput.setButton(button); mouseInput.setType(MouseEventType::PRESSED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); mouseInput.setType(MouseEventType::RELEASED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); }
void SDLInput::pushInput(const SDL_Event &event) { BLOCK_START("SDLInput::pushInput") KeyInput keyInput; MouseInput mouseInput; switch (event.type) { case SDL_KEYDOWN: { keyInput.setType(KeyEventType::PRESSED); convertKeyEventToKey(event, keyInput); mKeyInputQueue.push(keyInput); break; } case SDL_KEYUP: { keyInput.setType(KeyEventType::RELEASED); convertKeyEventToKey(event, keyInput); mKeyInputQueue.push(keyInput); break; } #ifdef USE_SDL2 case SDL_TEXTINPUT: keyInput.setType(KeyEventType::PRESSED); keyInput.setKey(Key(Key::TEXTINPUT)); keyInput.setText(event.text.text); mKeyInputQueue.push(keyInput); break; case SDL_MOUSEWHEEL: { const int y = event.wheel.y; if (y) { mouseInput.setX(gui->getLastMouseX()); mouseInput.setY(gui->getLastMouseY()); #ifdef ANDROID mouseInput.setReal(0, 0); #endif mouseInput.setButton(MouseButton::WHEEL); if (y > 0) mouseInput.setType(MouseEventType::WHEEL_MOVED_UP); else mouseInput.setType(MouseEventType::WHEEL_MOVED_DOWN); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); } break; } #endif #ifdef ANDROID #ifndef USE_SDL2 case SDL_ACCELEROMETER: break; #endif #endif case SDL_MOUSEBUTTONDOWN: { mMouseDown = true; const int scale = mainGraphics->getScale(); const int x = event.button.x / scale; const int y = event.button.y / scale; mouseInput.setX(x); mouseInput.setY(y); #ifdef ANDROID #ifdef USE_SDL2 mouseInput.setReal(x, y); #else mouseInput.setReal(event.button.realx / scale, event.button.realy / scale); #endif #endif mouseInput.setButton(convertMouseButton(event.button.button)); #ifndef USE_SDL2 if (event.button.button == SDL_BUTTON_WHEELDOWN) mouseInput.setType(MouseEventType::WHEEL_MOVED_DOWN); else if (event.button.button == SDL_BUTTON_WHEELUP) mouseInput.setType(MouseEventType::WHEEL_MOVED_UP); else #endif mouseInput.setType(MouseEventType::PRESSED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; } case SDL_MOUSEBUTTONUP: { mMouseDown = false; const int scale = mainGraphics->getScale(); const int x = event.button.x / scale; const int y = event.button.y / scale; mouseInput.setX(x); mouseInput.setY(y); #ifdef ANDROID #ifdef USE_SDL2 mouseInput.setReal(x, y); #else mouseInput.setReal(event.button.realx / scale, event.button.realy / scale); #endif #endif mouseInput.setButton(convertMouseButton(event.button.button)); mouseInput.setType(MouseEventType::RELEASED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; } case SDL_MOUSEMOTION: { const int scale = mainGraphics->getScale(); const int x = event.motion.x / scale; const int y = event.motion.y / scale; mouseInput.setX(x); mouseInput.setY(y); #ifdef ANDROID #ifdef USE_SDL2 mouseInput.setReal(x, y); #else mouseInput.setReal(event.motion.realx / scale, event.motion.realy / scale); #endif #endif mouseInput.setButton(MouseButton::EMPTY); mouseInput.setType(MouseEventType::MOVED); mouseInput.setTimeStamp(SDL_GetTicks()); mMouseInputQueue.push(mouseInput); break; } #ifndef USE_SDL2 case SDL_ACTIVEEVENT: /* * This occurs when the mouse leaves the window and the Gui-chan * application loses its mousefocus. */ if ((event.active.state & SDL_APPMOUSEFOCUS) && !event.active.gain) { mMouseInWindow = false; if (!mMouseDown) { mouseInput.setX(-1); mouseInput.setY(-1); mouseInput.setButton(MouseButton::EMPTY); mouseInput.setType(MouseEventType::MOVED); mMouseInputQueue.push(mouseInput); } } if ((event.active.state & SDL_APPMOUSEFOCUS) && event.active.gain) mMouseInWindow = true; break; #endif default: break; } // end switch BLOCK_END("SDLInput::pushInput") }