mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-12-11 14:19:10 +00:00
Controller Remapping GUI v2 (#3144)
* Remapping GUI V2 - initial commit * Unmap button with escape key * Allow combination inputs * Use separate class for SDL event signals so that i can work with the SDL window event loop * Automatically pause game when GUI open to better manage event queue * Move sd;_gamepad_added event from remap object to GUI object to avoid conflicts with sdl window * Use signals on button/trigger to release to make GUI more responsive * pause game while KBM window is open for consistency * don't check gamepad when game is running to avoid conflicts * Block all other sdl events instead of pausing game, automatic parse inputs after saving * Don't block window restored or window exposed cases * Properly exit event loop thread on exit
This commit is contained in:
47
src/qt_gui/sdl_event_wrapper.cpp
Normal file
47
src/qt_gui/sdl_event_wrapper.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "sdl_event_wrapper.h"
|
||||
|
||||
using namespace SdlEventWrapper;
|
||||
|
||||
Wrapper* Wrapper::WrapperInstance = nullptr;
|
||||
bool Wrapper::wrapperActive = false;
|
||||
|
||||
Wrapper::Wrapper(QObject* parent) : QObject(parent) {}
|
||||
|
||||
Wrapper* Wrapper::GetInstance() {
|
||||
if (WrapperInstance == nullptr) {
|
||||
WrapperInstance = new Wrapper();
|
||||
}
|
||||
return WrapperInstance;
|
||||
}
|
||||
|
||||
bool Wrapper::ProcessEvent(SDL_Event* event) {
|
||||
switch (event->type) {
|
||||
case SDL_EVENT_WINDOW_RESTORED:
|
||||
return false;
|
||||
case SDL_EVENT_WINDOW_EXPOSED:
|
||||
return false;
|
||||
case SDL_EVENT_GAMEPAD_ADDED:
|
||||
return false;
|
||||
case SDL_EVENT_GAMEPAD_REMOVED:
|
||||
return false;
|
||||
case SDL_EVENT_QUIT:
|
||||
emit SDLEvent(SDL_EVENT_QUIT, 0, 0);
|
||||
return true;
|
||||
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
||||
emit SDLEvent(SDL_EVENT_GAMEPAD_BUTTON_DOWN, event->gbutton.button, 0);
|
||||
return true;
|
||||
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
||||
emit SDLEvent(SDL_EVENT_GAMEPAD_BUTTON_UP, event->gbutton.button, 0);
|
||||
return true;
|
||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||
emit SDLEvent(SDL_EVENT_GAMEPAD_AXIS_MOTION, event->gaxis.axis, event->gaxis.value);
|
||||
return true;
|
||||
// block all other SDL events while wrapper is active
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Wrapper::~Wrapper() {}
|
||||
Reference in New Issue
Block a user