Add Input::SetCapturingMouse()

Moved mouse capture functionality from the renderer to Input
Temporarily patched ModelViewer, pending a major refactor to make it compatible with the input class.
master
Webster Sheets 2020-03-24 12:10:28 -04:00
parent 05930f9307
commit 8990fbeb96
6 changed files with 21 additions and 14 deletions

View File

@ -287,3 +287,10 @@ float Input::JoystickAxisState(int joystick, int axis)
return joysticks[joystick].axes[axis];
}
void Input::SetCapturingMouse(bool grabbed)
{
SDL_SetWindowGrab(Pi::renderer->GetSDLWindow(), SDL_bool(grabbed));
SDL_SetRelativeMouseMode(SDL_bool(grabbed));
m_capturingMouse = grabbed;
}

View File

@ -132,6 +132,9 @@ public:
memcpy(motion, mouseMotion, sizeof(int) * 2);
}
bool IsCapturingMouse() const { return m_capturingMouse; }
void SetCapturingMouse(bool enabled);
sigc::signal<void, SDL_Keysym *> onKeyPress;
sigc::signal<void, SDL_Keysym *> onKeyRelease;
sigc::signal<void, int, int, int> onMouseButtonUp;
@ -146,6 +149,7 @@ private:
int keyModState;
char mouseButton[6];
int mouseMotion[2];
bool m_capturingMouse;
bool joystickEnabled;
bool mouseYInvert;

View File

@ -406,7 +406,9 @@ void ModelViewer::ChangeCameraPreset(SDL_Keycode key, SDL_Keymod mod)
void ModelViewer::ToggleViewControlMode()
{
m_options.mouselookEnabled = !m_options.mouselookEnabled;
m_renderer->SetGrab(m_options.mouselookEnabled);
// FIXME: update modelviewer to use Input::SetCaptureMouse instead
SDL_SetWindowGrab(m_renderer->GetSDLWindow(), SDL_bool(m_options.mouselookEnabled));
SDL_SetRelativeMouseMode(SDL_bool(m_options.mouselookEnabled));
if (m_options.mouselookEnabled) {
m_viewRot = matrix3x3f::RotateY(DEG2RAD(m_rotY)) * matrix3x3f::RotateX(DEG2RAD(Clamp(m_rotX, -90.0f, 90.0f)));
@ -430,7 +432,9 @@ void ModelViewer::ClearModel()
m_scaleModel.reset();
m_options.mouselookEnabled = false;
m_renderer->SetGrab(false);
// FIXME: update modelviewer to use Input::SetCaptureMouse instead
SDL_SetWindowGrab(m_renderer->GetSDLWindow(), SDL_bool(m_options.mouselookEnabled));
SDL_SetRelativeMouseMode(SDL_bool(m_options.mouselookEnabled));
m_viewPos = vector3f(0.0f, 0.0f, 10.0f);
ResetCamera();
}
@ -833,7 +837,7 @@ void ModelViewer::PollEvents()
break;
default:
break; //shuts up -Wswitch
} //keysym switch
} //keysym switch
m_keyStates[event.key.keysym.sym] = true;
break;
case SDL_KEYUP:

View File

@ -959,7 +959,7 @@ void Pi::TombStoneLoop()
float _time = 0;
do {
Pi::HandleEvents();
Pi::renderer->SetGrab(false);
Pi::input.SetCapturingMouse(false);
// render the scene
Pi::BeginRenderTarget();
@ -1399,11 +1399,11 @@ float Pi::GetMoveSpeedShiftModifier()
void Pi::SetMouseGrab(bool on)
{
if (!doingMouseGrab && on) {
Pi::renderer->SetGrab(true);
Pi::input.SetCapturingMouse(true);
Pi::ui->SetMousePointerEnabled(false);
doingMouseGrab = true;
} else if (doingMouseGrab && !on) {
Pi::renderer->SetGrab(false);
Pi::input.SetCapturingMouse(false);
Pi::ui->SetMousePointerEnabled(true);
doingMouseGrab = false;
}

View File

@ -48,10 +48,4 @@ namespace Graphics {
m_textureCache.clear();
}
void Renderer::SetGrab(const bool grabbed)
{
SDL_SetWindowGrab(m_window, SDL_bool(grabbed));
SDL_SetRelativeMouseMode(SDL_bool(grabbed));
}
} // namespace Graphics

View File

@ -205,8 +205,6 @@ namespace Graphics {
Stats &GetStats() { return m_stats; }
void SetGrab(const bool grabbed);
protected:
int m_width;
int m_height;