mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-02 23:00:42 -07:00
nost: move nostalgia from wintouchemu to native touch hook (#827)
## Link to GitHub Issue or related Pull Request, if one exists #814 ## Description of change Switch over Nostalgia from wintouchemu to native touch hook. Nostalgia has some strict timing requirements (touches must be updated on every acio poll) so this takes a slightly different path to maintain mouse holds. Only a handful of consumers of wintouchemu remain: 1. beatstream - but it's off by default, only enabled as errata for buggy touchscreens, or if the user forces it on (for Show Cursor) 2. gitadora single-window overlay - this is just for mouse so not a big deal. 3. MFC HG mode - not a priority to fix. ## Testing Tested full screen and windowed mode with touch / mouse / poke.
This commit is contained in:
@@ -2,17 +2,47 @@
|
||||
|
||||
#include "hooks/graphics/graphics.h"
|
||||
#include "overlay/overlay.h"
|
||||
#include "settings.h"
|
||||
#include "touch/touch.h"
|
||||
|
||||
namespace nativetouch::transform {
|
||||
|
||||
static bool game_client_to_screen(HWND window, POINT *position) {
|
||||
RECT client_rect {};
|
||||
if (window == nullptr ||
|
||||
!GetClientRect(window, &client_rect) ||
|
||||
client_rect.right <= 0 || client_rect.bottom <= 0 ||
|
||||
!PtInRect(&client_rect, *position)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ClientToScreen(window, position) != FALSE;
|
||||
}
|
||||
|
||||
static bool screen_to_game_client(HWND window, POINT *position) {
|
||||
RECT client_rect {};
|
||||
if (window == nullptr ||
|
||||
!GetClientRect(window, &client_rect) ||
|
||||
client_rect.right <= 0 || client_rect.bottom <= 0 ||
|
||||
!ScreenToClient(window, position) ||
|
||||
!PtInRect(&client_rect, *position)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool is_tdj_dedicated_subscreen(HWND window) {
|
||||
return window != nullptr && GRAPHICS_WINDOWED && GRAPHICS_IIDX_WSUB &&
|
||||
window == TDJ_SUBSCREEN_WINDOW;
|
||||
}
|
||||
|
||||
// convert game touch coordinates to physical screen coordinates for dedicated subscreen injection
|
||||
// convert game touch coordinates to Windows desktop coordinates
|
||||
bool game_to_screen(HWND window, POINT *position) {
|
||||
if (settings::SYNTHETIC_TOUCH_USES_CLIENT_COORDINATES) {
|
||||
return game_client_to_screen(window, position);
|
||||
}
|
||||
|
||||
if (!is_tdj_dedicated_subscreen(window)) {
|
||||
return true;
|
||||
}
|
||||
@@ -54,6 +84,10 @@ namespace nativetouch::transform {
|
||||
|
||||
// convert physical screen coordinates to game touch coordinates for a known target
|
||||
bool screen_to_game(HWND window, POINT *position) {
|
||||
if (settings::SYNTHETIC_TOUCH_USES_CLIENT_COORDINATES) {
|
||||
return screen_to_game_client(window, position);
|
||||
}
|
||||
|
||||
// scale the resized IIDX subscreen client area into the game's touch-display coordinates
|
||||
if (is_tdj_dedicated_subscreen(window)) {
|
||||
RECT client_rect {};
|
||||
|
||||
Reference in New Issue
Block a user