2021-09-14 09:45:27 +00:00
|
|
|
//
|
|
|
|
// ios_mouse.h
|
|
|
|
// flycast
|
|
|
|
//
|
|
|
|
// Created by Cameron Bates on 9/6/21.
|
|
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#import <GameController/GameController.h>
|
|
|
|
|
2021-10-19 14:56:46 +00:00
|
|
|
#include "input/mouse.h"
|
2021-09-14 09:45:27 +00:00
|
|
|
|
|
|
|
class API_AVAILABLE(ios(14.0)) IOSMouse : public SystemMouse
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IOSMouse(int port, GCMouse *mouse) : SystemMouse("iOS", port), gcMouse(mouse)
|
|
|
|
{
|
|
|
|
set_maple_port(port);
|
|
|
|
loadMapping();
|
|
|
|
|
|
|
|
[gcMouse.mouseInput setMouseMovedHandler:^(GCMouseInput * _Nonnull mouse, float deltaX, float deltaY) {
|
2021-09-14 21:22:15 +00:00
|
|
|
setRelPos(deltaX, -deltaY);
|
2021-09-14 09:45:27 +00:00
|
|
|
}];
|
|
|
|
|
|
|
|
[gcMouse.mouseInput.leftButton setValueChangedHandler:
|
|
|
|
^(GCControllerButtonInput * _Nonnull button, float value, BOOL pressed) {
|
|
|
|
setButton(Mouse::LEFT_BUTTON, pressed);
|
|
|
|
}];
|
|
|
|
|
|
|
|
[gcMouse.mouseInput.rightButton setValueChangedHandler:
|
|
|
|
^(GCControllerButtonInput * _Nonnull button, float value, BOOL pressed) {
|
|
|
|
setButton(Mouse::RIGHT_BUTTON, pressed);
|
|
|
|
}];
|
|
|
|
|
|
|
|
[gcMouse.mouseInput.middleButton setValueChangedHandler:
|
|
|
|
^(GCControllerButtonInput * _Nonnull button, float value, BOOL pressed) {
|
|
|
|
setButton(Mouse::MIDDLE_BUTTON, pressed);
|
|
|
|
}];
|
|
|
|
|
|
|
|
[gcMouse.mouseInput.scroll.yAxis setValueChangedHandler:^(GCControllerAxisInput * _Nonnull axis, float value) {
|
|
|
|
setWheel(value);
|
|
|
|
}];
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_maple_port(int port) override
|
|
|
|
{
|
|
|
|
SystemMouse::set_maple_port(port);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void addMouse(GCMouse *mouse)
|
|
|
|
{
|
|
|
|
if (mice.count(mouse) > 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
int port = std::min((int)mice.size(), 3);
|
|
|
|
mice[mouse] = std::make_shared<IOSMouse>(port, mouse);
|
|
|
|
SystemMouse::Register(mice[mouse]);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void removeMouse(GCMouse *mouse)
|
|
|
|
{
|
|
|
|
auto it = mice.find(mouse);
|
|
|
|
if (it == mice.end())
|
|
|
|
return;
|
|
|
|
SystemMouse::Unregister(it->second);
|
|
|
|
mice.erase(it);
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
GCMouse * __weak gcMouse = nullptr;
|
|
|
|
static std::map<GCMouse *, std::shared_ptr<IOSMouse>> mice;
|
|
|
|
};
|