mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-15 22:54:00 +00:00
Single touch support
This commit is contained in:
parent
3d1e8f750c
commit
f2f368014e
1 changed files with 19 additions and 4 deletions
|
@ -5,6 +5,7 @@
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/core_timing.h"
|
#include "core/core_timing.h"
|
||||||
|
#include "core/frontend/emu_window.h"
|
||||||
#include "core/frontend/input.h"
|
#include "core/frontend/input.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/kernel/client_port.h"
|
#include "core/hle/kernel/client_port.h"
|
||||||
|
@ -63,7 +64,8 @@ private:
|
||||||
std::transform(Settings::values.analogs.begin() + Settings::NativeAnalog::STICK_HID_BEGIN,
|
std::transform(Settings::values.analogs.begin() + Settings::NativeAnalog::STICK_HID_BEGIN,
|
||||||
Settings::values.analogs.begin() + Settings::NativeAnalog::STICK_HID_END,
|
Settings::values.analogs.begin() + Settings::NativeAnalog::STICK_HID_END,
|
||||||
sticks.begin(), Input::CreateDevice<Input::AnalogDevice>);
|
sticks.begin(), Input::CreateDevice<Input::AnalogDevice>);
|
||||||
// TODO(shinyquagsire23): gyro, touch, mouse, keyboard
|
touch_device = Input::CreateDevice<Input::TouchDevice>(Settings::values.touch_device);
|
||||||
|
// TODO(shinyquagsire23): gyro, mouse, keyboard
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdatePadCallback(u64 userdata, int cycles_late) {
|
void UpdatePadCallback(u64 userdata, int cycles_late) {
|
||||||
|
@ -151,8 +153,6 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(bunnei): Properly implement the touch screen, the below will just write empty data
|
|
||||||
|
|
||||||
TouchScreen& touchscreen = mem.touchscreen;
|
TouchScreen& touchscreen = mem.touchscreen;
|
||||||
const u64 last_entry = touchscreen.header.latest_entry;
|
const u64 last_entry = touchscreen.header.latest_entry;
|
||||||
const u64 curr_entry = (last_entry + 1) % touchscreen.entries.size();
|
const u64 curr_entry = (last_entry + 1) % touchscreen.entries.size();
|
||||||
|
@ -164,7 +164,21 @@ private:
|
||||||
touchscreen.header.max_entry_index = touchscreen.entries.size();
|
touchscreen.header.max_entry_index = touchscreen.entries.size();
|
||||||
touchscreen.header.timestamp = timestamp;
|
touchscreen.header.timestamp = timestamp;
|
||||||
touchscreen.entries[curr_entry].header.timestamp = sample_counter;
|
touchscreen.entries[curr_entry].header.timestamp = sample_counter;
|
||||||
|
|
||||||
|
TouchScreenEntryTouch touch_entry{};
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
bool pressed;
|
||||||
|
std::tie(x, y, pressed) = touch_device->GetStatus();
|
||||||
|
touch_entry.x = static_cast<u16>(x * Layout::ScreenUndocked::Width);
|
||||||
|
touch_entry.y = static_cast<u16>(y * Layout::ScreenUndocked::Height);
|
||||||
|
|
||||||
|
if (pressed) {
|
||||||
|
touchscreen.entries[curr_entry].header.num_touches = 1;
|
||||||
|
touchscreen.entries[curr_entry].touches[0] = touch_entry;
|
||||||
|
} else {
|
||||||
touchscreen.entries[curr_entry].header.num_touches = 0;
|
touchscreen.entries[curr_entry].header.num_touches = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(shinyquagsire23): Properly implement mouse
|
// TODO(shinyquagsire23): Properly implement mouse
|
||||||
Mouse& mouse = mem.mouse;
|
Mouse& mouse = mem.mouse;
|
||||||
|
@ -250,6 +264,7 @@ private:
|
||||||
std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeButton::NUM_BUTTONS_HID>
|
std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeButton::NUM_BUTTONS_HID>
|
||||||
buttons;
|
buttons;
|
||||||
std::array<std::unique_ptr<Input::AnalogDevice>, Settings::NativeAnalog::NUM_STICKS_HID> sticks;
|
std::array<std::unique_ptr<Input::AnalogDevice>, Settings::NativeAnalog::NUM_STICKS_HID> sticks;
|
||||||
|
std::unique_ptr<Input::TouchDevice> touch_device;
|
||||||
};
|
};
|
||||||
|
|
||||||
class IActiveVibrationDeviceList final : public ServiceFramework<IActiveVibrationDeviceList> {
|
class IActiveVibrationDeviceList final : public ServiceFramework<IActiveVibrationDeviceList> {
|
||||||
|
|
Loading…
Reference in a new issue