mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-23 02:24:38 +00:00
* 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
48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
// 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() {}
|