style: adjust clang-format rules (#2186)
Co-authored-by: Vithorio Polten <reach@vithor.io>
This commit is contained in:
@@ -2,132 +2,114 @@
|
||||
* @file src/platform/linux/input/inputtino.cpp
|
||||
* @brief Definitions for the inputtino Linux input handling.
|
||||
*/
|
||||
// lib includes
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
#include "src/config.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_gamepad.h"
|
||||
#include "inputtino_keyboard.h"
|
||||
#include "inputtino_mouse.h"
|
||||
#include "inputtino_pen.h"
|
||||
#include "inputtino_touch.h"
|
||||
#include "src/config.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf {
|
||||
|
||||
input_t
|
||||
input() {
|
||||
return { new input_raw_t() };
|
||||
input_t input() {
|
||||
return {new input_raw_t()};
|
||||
}
|
||||
|
||||
std::unique_ptr<client_input_t>
|
||||
allocate_client_input_context(input_t &input) {
|
||||
std::unique_ptr<client_input_t> allocate_client_input_context(input_t &input) {
|
||||
return std::make_unique<client_input_raw_t>(input);
|
||||
}
|
||||
|
||||
void
|
||||
freeInput(void *p) {
|
||||
void freeInput(void *p) {
|
||||
auto *input = (input_raw_t *) p;
|
||||
delete input;
|
||||
}
|
||||
|
||||
void
|
||||
move_mouse(input_t &input, int deltaX, int deltaY) {
|
||||
void move_mouse(input_t &input, int deltaX, int deltaY) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::mouse::move(raw, deltaX, deltaY);
|
||||
}
|
||||
|
||||
void
|
||||
abs_mouse(input_t &input, const touch_port_t &touch_port, float x, float y) {
|
||||
void abs_mouse(input_t &input, const touch_port_t &touch_port, float x, float y) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::mouse::move_abs(raw, touch_port, x, y);
|
||||
}
|
||||
|
||||
void
|
||||
button_mouse(input_t &input, int button, bool release) {
|
||||
void button_mouse(input_t &input, int button, bool release) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::mouse::button(raw, button, release);
|
||||
}
|
||||
|
||||
void
|
||||
scroll(input_t &input, int high_res_distance) {
|
||||
void scroll(input_t &input, int high_res_distance) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::mouse::scroll(raw, high_res_distance);
|
||||
}
|
||||
|
||||
void
|
||||
hscroll(input_t &input, int high_res_distance) {
|
||||
void hscroll(input_t &input, int high_res_distance) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::mouse::hscroll(raw, high_res_distance);
|
||||
}
|
||||
|
||||
void
|
||||
keyboard_update(input_t &input, uint16_t modcode, bool release, uint8_t flags) {
|
||||
void keyboard_update(input_t &input, uint16_t modcode, bool release, uint8_t flags) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::keyboard::update(raw, modcode, release, flags);
|
||||
}
|
||||
|
||||
void
|
||||
unicode(input_t &input, char *utf8, int size) {
|
||||
void unicode(input_t &input, char *utf8, int size) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::keyboard::unicode(raw, utf8, size);
|
||||
}
|
||||
|
||||
void
|
||||
touch_update(client_input_t *input, const touch_port_t &touch_port, const touch_input_t &touch) {
|
||||
void touch_update(client_input_t *input, const touch_port_t &touch_port, const touch_input_t &touch) {
|
||||
auto raw = (client_input_raw_t *) input;
|
||||
platf::touch::update(raw, touch_port, touch);
|
||||
}
|
||||
|
||||
void
|
||||
pen_update(client_input_t *input, const touch_port_t &touch_port, const pen_input_t &pen) {
|
||||
void pen_update(client_input_t *input, const touch_port_t &touch_port, const pen_input_t &pen) {
|
||||
auto raw = (client_input_raw_t *) input;
|
||||
platf::pen::update(raw, touch_port, pen);
|
||||
}
|
||||
|
||||
int
|
||||
alloc_gamepad(input_t &input, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue) {
|
||||
int alloc_gamepad(input_t &input, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
return platf::gamepad::alloc(raw, id, metadata, feedback_queue);
|
||||
}
|
||||
|
||||
void
|
||||
free_gamepad(input_t &input, int nr) {
|
||||
void free_gamepad(input_t &input, int nr) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::gamepad::free(raw, nr);
|
||||
}
|
||||
|
||||
void
|
||||
gamepad_update(input_t &input, int nr, const gamepad_state_t &gamepad_state) {
|
||||
void gamepad_update(input_t &input, int nr, const gamepad_state_t &gamepad_state) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::gamepad::update(raw, nr, gamepad_state);
|
||||
}
|
||||
|
||||
void
|
||||
gamepad_touch(input_t &input, const gamepad_touch_t &touch) {
|
||||
void gamepad_touch(input_t &input, const gamepad_touch_t &touch) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::gamepad::touch(raw, touch);
|
||||
}
|
||||
|
||||
void
|
||||
gamepad_motion(input_t &input, const gamepad_motion_t &motion) {
|
||||
void gamepad_motion(input_t &input, const gamepad_motion_t &motion) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::gamepad::motion(raw, motion);
|
||||
}
|
||||
|
||||
void
|
||||
gamepad_battery(input_t &input, const gamepad_battery_t &battery) {
|
||||
void gamepad_battery(input_t &input, const gamepad_battery_t &battery) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
platf::gamepad::battery(raw, battery);
|
||||
}
|
||||
|
||||
platform_caps::caps_t
|
||||
get_capabilities() {
|
||||
platform_caps::caps_t get_capabilities() {
|
||||
platform_caps::caps_t caps = 0;
|
||||
// TODO: if has_uinput
|
||||
caps |= platform_caps::pen_touch;
|
||||
@@ -140,14 +122,12 @@ namespace platf {
|
||||
return caps;
|
||||
}
|
||||
|
||||
util::point_t
|
||||
get_mouse_loc(input_t &input) {
|
||||
util::point_t get_mouse_loc(input_t &input) {
|
||||
auto raw = (input_raw_t *) input.get();
|
||||
return platf::mouse::get_location(raw);
|
||||
}
|
||||
|
||||
std::vector<supported_gamepad_t> &
|
||||
supported_gamepads(input_t *input) {
|
||||
std::vector<supported_gamepad_t> &supported_gamepads(input_t *input) {
|
||||
return platf::gamepad::supported_gamepads(input);
|
||||
}
|
||||
} // namespace platf
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "src/config.h"
|
||||
#include "src/logging.h"
|
||||
#include "src/platform/common.h"
|
||||
@@ -94,8 +96,7 @@ namespace platf {
|
||||
inputtino::Result<inputtino::PenTablet> pen;
|
||||
};
|
||||
|
||||
inline float
|
||||
deg2rad(float degree) {
|
||||
inline float deg2rad(float degree) {
|
||||
return degree * (M_PI / 180.f);
|
||||
}
|
||||
} // namespace platf
|
||||
|
||||
@@ -2,18 +2,19 @@
|
||||
* @file src/platform/linux/input/inputtino_gamepad.cpp
|
||||
* @brief Definitions for inputtino gamepad input handling.
|
||||
*/
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_gamepad.h"
|
||||
#include "src/config.h"
|
||||
#include "src/logging.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_gamepad.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::gamepad {
|
||||
@@ -25,69 +26,54 @@ namespace platf::gamepad {
|
||||
GAMEPAD_STATUS ///< Helper to indicate the number of status
|
||||
};
|
||||
|
||||
auto
|
||||
create_xbox_one() {
|
||||
return inputtino::XboxOneJoypad::create({ .name = "Sunshine X-Box One (virtual) pad",
|
||||
// https://github.com/torvalds/linux/blob/master/drivers/input/joystick/xpad.c#L147
|
||||
.vendor_id = 0x045E,
|
||||
.product_id = 0x02EA,
|
||||
.version = 0x0408 });
|
||||
auto create_xbox_one() {
|
||||
return inputtino::XboxOneJoypad::create({.name = "Sunshine X-Box One (virtual) pad",
|
||||
// https://github.com/torvalds/linux/blob/master/drivers/input/joystick/xpad.c#L147
|
||||
.vendor_id = 0x045E,
|
||||
.product_id = 0x02EA,
|
||||
.version = 0x0408});
|
||||
}
|
||||
|
||||
auto
|
||||
create_switch() {
|
||||
return inputtino::SwitchJoypad::create({ .name = "Sunshine Nintendo (virtual) pad",
|
||||
// https://github.com/torvalds/linux/blob/master/drivers/hid/hid-ids.h#L981
|
||||
.vendor_id = 0x057e,
|
||||
.product_id = 0x2009,
|
||||
.version = 0x8111 });
|
||||
auto create_switch() {
|
||||
return inputtino::SwitchJoypad::create({.name = "Sunshine Nintendo (virtual) pad",
|
||||
// https://github.com/torvalds/linux/blob/master/drivers/hid/hid-ids.h#L981
|
||||
.vendor_id = 0x057e,
|
||||
.product_id = 0x2009,
|
||||
.version = 0x8111});
|
||||
}
|
||||
|
||||
auto
|
||||
create_ds5() {
|
||||
return inputtino::PS5Joypad::create({ .name = "Sunshine DualSense (virtual) pad",
|
||||
.vendor_id = 0x054C,
|
||||
.product_id = 0x0CE6,
|
||||
.version = 0x8111 });
|
||||
auto create_ds5() {
|
||||
return inputtino::PS5Joypad::create({.name = "Sunshine DualSense (virtual) pad", .vendor_id = 0x054C, .product_id = 0x0CE6, .version = 0x8111});
|
||||
}
|
||||
|
||||
int
|
||||
alloc(input_raw_t *raw, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue) {
|
||||
int alloc(input_raw_t *raw, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue) {
|
||||
ControllerType selectedGamepadType;
|
||||
|
||||
if (config::input.gamepad == "xone"sv) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be Xbox One controller (manual selection)"sv;
|
||||
selectedGamepadType = XboxOneWired;
|
||||
}
|
||||
else if (config::input.gamepad == "ds5"sv) {
|
||||
} else if (config::input.gamepad == "ds5"sv) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be DualSense 5 controller (manual selection)"sv;
|
||||
selectedGamepadType = DualSenseWired;
|
||||
}
|
||||
else if (config::input.gamepad == "switch"sv) {
|
||||
} else if (config::input.gamepad == "switch"sv) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be Nintendo Pro controller (manual selection)"sv;
|
||||
selectedGamepadType = SwitchProWired;
|
||||
}
|
||||
else if (metadata.type == LI_CTYPE_XBOX) {
|
||||
} else if (metadata.type == LI_CTYPE_XBOX) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be Xbox One controller (auto-selected by client-reported type)"sv;
|
||||
selectedGamepadType = XboxOneWired;
|
||||
}
|
||||
else if (metadata.type == LI_CTYPE_PS) {
|
||||
} else if (metadata.type == LI_CTYPE_PS) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be DualShock 5 controller (auto-selected by client-reported type)"sv;
|
||||
selectedGamepadType = DualSenseWired;
|
||||
}
|
||||
else if (metadata.type == LI_CTYPE_NINTENDO) {
|
||||
} else if (metadata.type == LI_CTYPE_NINTENDO) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be Nintendo Pro controller (auto-selected by client-reported type)"sv;
|
||||
selectedGamepadType = SwitchProWired;
|
||||
}
|
||||
else if (config::input.motion_as_ds4 && (metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO))) {
|
||||
} else if (config::input.motion_as_ds4 && (metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO))) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be DualShock 5 controller (auto-selected by motion sensor presence)"sv;
|
||||
selectedGamepadType = DualSenseWired;
|
||||
}
|
||||
else if (config::input.touchpad_as_ds4 && (metadata.capabilities & LI_CCAP_TOUCHPAD)) {
|
||||
} else if (config::input.touchpad_as_ds4 && (metadata.capabilities & LI_CCAP_TOUCHPAD)) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be DualShock 5 controller (auto-selected by touchpad presence)"sv;
|
||||
selectedGamepadType = DualSenseWired;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be Xbox One controller (default)"sv;
|
||||
selectedGamepadType = XboxOneWired;
|
||||
}
|
||||
@@ -102,8 +88,7 @@ namespace platf::gamepad {
|
||||
if (metadata.capabilities & LI_CCAP_RGB_LED) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " has an RGB LED, but it is not usable when emulating a joypad different from DS5"sv;
|
||||
}
|
||||
}
|
||||
else if (selectedGamepadType == DualSenseWired) {
|
||||
} else if (selectedGamepadType == DualSenseWired) {
|
||||
if (!(metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO))) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " is emulating a DualShock 5 controller, but the client gamepad doesn't have motion sensors active"sv;
|
||||
}
|
||||
@@ -125,73 +110,71 @@ namespace platf::gamepad {
|
||||
};
|
||||
|
||||
switch (selectedGamepadType) {
|
||||
case XboxOneWired: {
|
||||
auto xOne = create_xbox_one();
|
||||
if (xOne) {
|
||||
(*xOne).set_on_rumble(on_rumble_fn);
|
||||
gamepad->joypad = std::make_unique<joypads_t>(std::move(*xOne));
|
||||
raw->gamepads[id.globalIndex] = std::move(gamepad);
|
||||
return 0;
|
||||
case XboxOneWired:
|
||||
{
|
||||
auto xOne = create_xbox_one();
|
||||
if (xOne) {
|
||||
(*xOne).set_on_rumble(on_rumble_fn);
|
||||
gamepad->joypad = std::make_unique<joypads_t>(std::move(*xOne));
|
||||
raw->gamepads[id.globalIndex] = std::move(gamepad);
|
||||
return 0;
|
||||
} else {
|
||||
BOOST_LOG(warning) << "Unable to create virtual Xbox One controller: " << xOne.getErrorMessage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
BOOST_LOG(warning) << "Unable to create virtual Xbox One controller: " << xOne.getErrorMessage();
|
||||
return -1;
|
||||
case SwitchProWired:
|
||||
{
|
||||
auto switchPro = create_switch();
|
||||
if (switchPro) {
|
||||
(*switchPro).set_on_rumble(on_rumble_fn);
|
||||
gamepad->joypad = std::make_unique<joypads_t>(std::move(*switchPro));
|
||||
raw->gamepads[id.globalIndex] = std::move(gamepad);
|
||||
return 0;
|
||||
} else {
|
||||
BOOST_LOG(warning) << "Unable to create virtual Switch Pro controller: " << switchPro.getErrorMessage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
case SwitchProWired: {
|
||||
auto switchPro = create_switch();
|
||||
if (switchPro) {
|
||||
(*switchPro).set_on_rumble(on_rumble_fn);
|
||||
gamepad->joypad = std::make_unique<joypads_t>(std::move(*switchPro));
|
||||
raw->gamepads[id.globalIndex] = std::move(gamepad);
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
BOOST_LOG(warning) << "Unable to create virtual Switch Pro controller: " << switchPro.getErrorMessage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
case DualSenseWired: {
|
||||
auto ds5 = create_ds5();
|
||||
if (ds5) {
|
||||
(*ds5).set_on_rumble(on_rumble_fn);
|
||||
(*ds5).set_on_led([feedback_queue, idx = id.clientRelativeIndex, gamepad](int r, int g, int b) {
|
||||
// Don't resend duplicate LED data
|
||||
if (gamepad->last_rgb_led.type == platf::gamepad_feedback_e::set_rgb_led && gamepad->last_rgb_led.data.rgb_led.r == r && gamepad->last_rgb_led.data.rgb_led.g == g && gamepad->last_rgb_led.data.rgb_led.b == b) {
|
||||
return;
|
||||
}
|
||||
case DualSenseWired:
|
||||
{
|
||||
auto ds5 = create_ds5();
|
||||
if (ds5) {
|
||||
(*ds5).set_on_rumble(on_rumble_fn);
|
||||
(*ds5).set_on_led([feedback_queue, idx = id.clientRelativeIndex, gamepad](int r, int g, int b) {
|
||||
// Don't resend duplicate LED data
|
||||
if (gamepad->last_rgb_led.type == platf::gamepad_feedback_e::set_rgb_led && gamepad->last_rgb_led.data.rgb_led.r == r && gamepad->last_rgb_led.data.rgb_led.g == g && gamepad->last_rgb_led.data.rgb_led.b == b) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto msg = gamepad_feedback_msg_t::make_rgb_led(idx, r, g, b);
|
||||
feedback_queue->raise(msg);
|
||||
gamepad->last_rgb_led = msg;
|
||||
});
|
||||
auto msg = gamepad_feedback_msg_t::make_rgb_led(idx, r, g, b);
|
||||
feedback_queue->raise(msg);
|
||||
gamepad->last_rgb_led = msg;
|
||||
});
|
||||
|
||||
// Activate the motion sensors
|
||||
feedback_queue->raise(gamepad_feedback_msg_t::make_motion_event_state(id.clientRelativeIndex, LI_MOTION_TYPE_ACCEL, 100));
|
||||
feedback_queue->raise(gamepad_feedback_msg_t::make_motion_event_state(id.clientRelativeIndex, LI_MOTION_TYPE_GYRO, 100));
|
||||
// Activate the motion sensors
|
||||
feedback_queue->raise(gamepad_feedback_msg_t::make_motion_event_state(id.clientRelativeIndex, LI_MOTION_TYPE_ACCEL, 100));
|
||||
feedback_queue->raise(gamepad_feedback_msg_t::make_motion_event_state(id.clientRelativeIndex, LI_MOTION_TYPE_GYRO, 100));
|
||||
|
||||
gamepad->joypad = std::make_unique<joypads_t>(std::move(*ds5));
|
||||
raw->gamepads[id.globalIndex] = std::move(gamepad);
|
||||
return 0;
|
||||
gamepad->joypad = std::make_unique<joypads_t>(std::move(*ds5));
|
||||
raw->gamepads[id.globalIndex] = std::move(gamepad);
|
||||
return 0;
|
||||
} else {
|
||||
BOOST_LOG(warning) << "Unable to create virtual DualShock 5 controller: " << ds5.getErrorMessage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
BOOST_LOG(warning) << "Unable to create virtual DualShock 5 controller: " << ds5.getErrorMessage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
free(input_raw_t *raw, int nr) {
|
||||
void free(input_raw_t *raw, int nr) {
|
||||
// This will call the destructor which in turn will stop the background threads for rumble and LED (and ultimately remove the joypad device)
|
||||
raw->gamepads[nr]->joypad.reset();
|
||||
raw->gamepads[nr].reset();
|
||||
}
|
||||
|
||||
void
|
||||
update(input_raw_t *raw, int nr, const gamepad_state_t &gamepad_state) {
|
||||
void update(input_raw_t *raw, int nr, const gamepad_state_t &gamepad_state) {
|
||||
auto gamepad = raw->gamepads[nr];
|
||||
if (!gamepad) {
|
||||
return;
|
||||
@@ -203,11 +186,10 @@ namespace platf::gamepad {
|
||||
gc.set_stick(inputtino::Joypad::RS, gamepad_state.rsX, gamepad_state.rsY);
|
||||
gc.set_triggers(gamepad_state.lt, gamepad_state.rt);
|
||||
},
|
||||
*gamepad->joypad);
|
||||
*gamepad->joypad);
|
||||
}
|
||||
|
||||
void
|
||||
touch(input_raw_t *raw, const gamepad_touch_t &touch) {
|
||||
void touch(input_raw_t *raw, const gamepad_touch_t &touch) {
|
||||
auto gamepad = raw->gamepads[touch.id.globalIndex];
|
||||
if (!gamepad) {
|
||||
return;
|
||||
@@ -216,15 +198,13 @@ namespace platf::gamepad {
|
||||
if (std::holds_alternative<inputtino::PS5Joypad>(*gamepad->joypad)) {
|
||||
if (touch.pressure > 0.5) {
|
||||
std::get<inputtino::PS5Joypad>(*gamepad->joypad).place_finger(touch.pointerId, touch.x * inputtino::PS5Joypad::touchpad_width, touch.y * inputtino::PS5Joypad::touchpad_height);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
std::get<inputtino::PS5Joypad>(*gamepad->joypad).release_finger(touch.pointerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
motion(input_raw_t *raw, const gamepad_motion_t &motion) {
|
||||
void motion(input_raw_t *raw, const gamepad_motion_t &motion) {
|
||||
auto gamepad = raw->gamepads[motion.id.globalIndex];
|
||||
if (!gamepad) {
|
||||
return;
|
||||
@@ -242,8 +222,7 @@ namespace platf::gamepad {
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
battery(input_raw_t *raw, const gamepad_battery_t &battery) {
|
||||
void battery(input_raw_t *raw, const gamepad_battery_t &battery) {
|
||||
auto gamepad = raw->gamepads[battery.id.globalIndex];
|
||||
if (!gamepad) {
|
||||
return;
|
||||
@@ -272,14 +251,13 @@ namespace platf::gamepad {
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<supported_gamepad_t> &
|
||||
supported_gamepads(input_t *input) {
|
||||
std::vector<supported_gamepad_t> &supported_gamepads(input_t *input) {
|
||||
if (!input) {
|
||||
static std::vector gps {
|
||||
supported_gamepad_t { "auto", true, "" },
|
||||
supported_gamepad_t { "xone", false, "" },
|
||||
supported_gamepad_t { "ds5", false, "" },
|
||||
supported_gamepad_t { "switch", false, "" },
|
||||
supported_gamepad_t {"auto", true, ""},
|
||||
supported_gamepad_t {"xone", false, ""},
|
||||
supported_gamepad_t {"ds5", false, ""},
|
||||
supported_gamepad_t {"switch", false, ""},
|
||||
};
|
||||
|
||||
return gps;
|
||||
@@ -290,10 +268,10 @@ namespace platf::gamepad {
|
||||
auto xOne = create_xbox_one();
|
||||
|
||||
static std::vector gps {
|
||||
supported_gamepad_t { "auto", true, "" },
|
||||
supported_gamepad_t { "xone", static_cast<bool>(xOne), !xOne ? xOne.getErrorMessage() : "" },
|
||||
supported_gamepad_t { "ds5", static_cast<bool>(ds5), !ds5 ? ds5.getErrorMessage() : "" },
|
||||
supported_gamepad_t { "switch", static_cast<bool>(switchPro), !switchPro ? switchPro.getErrorMessage() : "" },
|
||||
supported_gamepad_t {"auto", true, ""},
|
||||
supported_gamepad_t {"xone", static_cast<bool>(xOne), !xOne ? xOne.getErrorMessage() : ""},
|
||||
supported_gamepad_t {"ds5", static_cast<bool>(ds5), !ds5 ? ds5.getErrorMessage() : ""},
|
||||
supported_gamepad_t {"switch", static_cast<bool>(switchPro), !switchPro ? switchPro.getErrorMessage() : ""},
|
||||
};
|
||||
|
||||
for (auto &[name, is_enabled, reason_disabled] : gps) {
|
||||
|
||||
@@ -4,13 +4,14 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
#include "src/platform/common.h"
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "src/platform/common.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
@@ -22,24 +23,17 @@ namespace platf::gamepad {
|
||||
SwitchProWired ///< Switch Pro Wired Controller
|
||||
};
|
||||
|
||||
int
|
||||
alloc(input_raw_t *raw, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue);
|
||||
int alloc(input_raw_t *raw, const gamepad_id_t &id, const gamepad_arrival_t &metadata, feedback_queue_t feedback_queue);
|
||||
|
||||
void
|
||||
free(input_raw_t *raw, int nr);
|
||||
void free(input_raw_t *raw, int nr);
|
||||
|
||||
void
|
||||
update(input_raw_t *raw, int nr, const gamepad_state_t &gamepad_state);
|
||||
void update(input_raw_t *raw, int nr, const gamepad_state_t &gamepad_state);
|
||||
|
||||
void
|
||||
touch(input_raw_t *raw, const gamepad_touch_t &touch);
|
||||
void touch(input_raw_t *raw, const gamepad_touch_t &touch);
|
||||
|
||||
void
|
||||
motion(input_raw_t *raw, const gamepad_motion_t &motion);
|
||||
void motion(input_raw_t *raw, const gamepad_motion_t &motion);
|
||||
|
||||
void
|
||||
battery(input_raw_t *raw, const gamepad_battery_t &battery);
|
||||
void battery(input_raw_t *raw, const gamepad_battery_t &battery);
|
||||
|
||||
std::vector<supported_gamepad_t> &
|
||||
supported_gamepads(input_t *input);
|
||||
std::vector<supported_gamepad_t> &supported_gamepads(input_t *input);
|
||||
} // namespace platf::gamepad
|
||||
|
||||
@@ -2,18 +2,19 @@
|
||||
* @file src/platform/linux/input/inputtino_keyboard.cpp
|
||||
* @brief Definitions for inputtino keyboard input handling.
|
||||
*/
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_keyboard.h"
|
||||
#include "src/config.h"
|
||||
#include "src/logging.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_keyboard.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::keyboard {
|
||||
@@ -25,8 +26,7 @@ namespace platf::keyboard {
|
||||
*
|
||||
* adapted from: https://stackoverflow.com/a/7639754
|
||||
*/
|
||||
std::string
|
||||
to_hex(const std::basic_string<char32_t> &str) {
|
||||
std::string to_hex(const std::basic_string<char32_t> &str) {
|
||||
std::stringstream ss;
|
||||
ss << std::hex << std::setfill('0');
|
||||
for (const auto &ch : str) {
|
||||
@@ -42,48 +42,123 @@ namespace platf::keyboard {
|
||||
* A map of linux scan code -> Moonlight keyboard code
|
||||
*/
|
||||
static const std::map<short, short> key_mappings = {
|
||||
{ KEY_BACKSPACE, 0x08 }, { KEY_TAB, 0x09 }, { KEY_ENTER, 0x0D }, { KEY_LEFTSHIFT, 0x10 },
|
||||
{ KEY_LEFTCTRL, 0x11 }, { KEY_CAPSLOCK, 0x14 }, { KEY_ESC, 0x1B }, { KEY_SPACE, 0x20 },
|
||||
{ KEY_PAGEUP, 0x21 }, { KEY_PAGEDOWN, 0x22 }, { KEY_END, 0x23 }, { KEY_HOME, 0x24 },
|
||||
{ KEY_LEFT, 0x25 }, { KEY_UP, 0x26 }, { KEY_RIGHT, 0x27 }, { KEY_DOWN, 0x28 },
|
||||
{ KEY_SYSRQ, 0x2C }, { KEY_INSERT, 0x2D }, { KEY_DELETE, 0x2E }, { KEY_0, 0x30 },
|
||||
{ KEY_1, 0x31 }, { KEY_2, 0x32 }, { KEY_3, 0x33 }, { KEY_4, 0x34 },
|
||||
{ KEY_5, 0x35 }, { KEY_6, 0x36 }, { KEY_7, 0x37 }, { KEY_8, 0x38 },
|
||||
{ KEY_9, 0x39 }, { KEY_A, 0x41 }, { KEY_B, 0x42 }, { KEY_C, 0x43 },
|
||||
{ KEY_D, 0x44 }, { KEY_E, 0x45 }, { KEY_F, 0x46 }, { KEY_G, 0x47 },
|
||||
{ KEY_H, 0x48 }, { KEY_I, 0x49 }, { KEY_J, 0x4A }, { KEY_K, 0x4B },
|
||||
{ KEY_L, 0x4C }, { KEY_M, 0x4D }, { KEY_N, 0x4E }, { KEY_O, 0x4F },
|
||||
{ KEY_P, 0x50 }, { KEY_Q, 0x51 }, { KEY_R, 0x52 }, { KEY_S, 0x53 },
|
||||
{ KEY_T, 0x54 }, { KEY_U, 0x55 }, { KEY_V, 0x56 }, { KEY_W, 0x57 },
|
||||
{ KEY_X, 0x58 }, { KEY_Y, 0x59 }, { KEY_Z, 0x5A }, { KEY_LEFTMETA, 0x5B },
|
||||
{ KEY_RIGHTMETA, 0x5C }, { KEY_KP0, 0x60 }, { KEY_KP1, 0x61 }, { KEY_KP2, 0x62 },
|
||||
{ KEY_KP3, 0x63 }, { KEY_KP4, 0x64 }, { KEY_KP5, 0x65 }, { KEY_KP6, 0x66 },
|
||||
{ KEY_KP7, 0x67 }, { KEY_KP8, 0x68 }, { KEY_KP9, 0x69 }, { KEY_KPASTERISK, 0x6A },
|
||||
{ KEY_KPPLUS, 0x6B }, { KEY_KPMINUS, 0x6D }, { KEY_KPDOT, 0x6E }, { KEY_KPSLASH, 0x6F },
|
||||
{ KEY_F1, 0x70 }, { KEY_F2, 0x71 }, { KEY_F3, 0x72 }, { KEY_F4, 0x73 },
|
||||
{ KEY_F5, 0x74 }, { KEY_F6, 0x75 }, { KEY_F7, 0x76 }, { KEY_F8, 0x77 },
|
||||
{ KEY_F9, 0x78 }, { KEY_F10, 0x79 }, { KEY_F11, 0x7A }, { KEY_F12, 0x7B },
|
||||
{ KEY_NUMLOCK, 0x90 }, { KEY_SCROLLLOCK, 0x91 }, { KEY_LEFTSHIFT, 0xA0 }, { KEY_RIGHTSHIFT, 0xA1 },
|
||||
{ KEY_LEFTCTRL, 0xA2 }, { KEY_RIGHTCTRL, 0xA3 }, { KEY_LEFTALT, 0xA4 }, { KEY_RIGHTALT, 0xA5 },
|
||||
{ KEY_SEMICOLON, 0xBA }, { KEY_EQUAL, 0xBB }, { KEY_COMMA, 0xBC }, { KEY_MINUS, 0xBD },
|
||||
{ KEY_DOT, 0xBE }, { KEY_SLASH, 0xBF }, { KEY_GRAVE, 0xC0 }, { KEY_LEFTBRACE, 0xDB },
|
||||
{ KEY_BACKSLASH, 0xDC }, { KEY_RIGHTBRACE, 0xDD }, { KEY_APOSTROPHE, 0xDE }, { KEY_102ND, 0xE2 }
|
||||
{KEY_BACKSPACE, 0x08},
|
||||
{KEY_TAB, 0x09},
|
||||
{KEY_ENTER, 0x0D},
|
||||
{KEY_LEFTSHIFT, 0x10},
|
||||
{KEY_LEFTCTRL, 0x11},
|
||||
{KEY_CAPSLOCK, 0x14},
|
||||
{KEY_ESC, 0x1B},
|
||||
{KEY_SPACE, 0x20},
|
||||
{KEY_PAGEUP, 0x21},
|
||||
{KEY_PAGEDOWN, 0x22},
|
||||
{KEY_END, 0x23},
|
||||
{KEY_HOME, 0x24},
|
||||
{KEY_LEFT, 0x25},
|
||||
{KEY_UP, 0x26},
|
||||
{KEY_RIGHT, 0x27},
|
||||
{KEY_DOWN, 0x28},
|
||||
{KEY_SYSRQ, 0x2C},
|
||||
{KEY_INSERT, 0x2D},
|
||||
{KEY_DELETE, 0x2E},
|
||||
{KEY_0, 0x30},
|
||||
{KEY_1, 0x31},
|
||||
{KEY_2, 0x32},
|
||||
{KEY_3, 0x33},
|
||||
{KEY_4, 0x34},
|
||||
{KEY_5, 0x35},
|
||||
{KEY_6, 0x36},
|
||||
{KEY_7, 0x37},
|
||||
{KEY_8, 0x38},
|
||||
{KEY_9, 0x39},
|
||||
{KEY_A, 0x41},
|
||||
{KEY_B, 0x42},
|
||||
{KEY_C, 0x43},
|
||||
{KEY_D, 0x44},
|
||||
{KEY_E, 0x45},
|
||||
{KEY_F, 0x46},
|
||||
{KEY_G, 0x47},
|
||||
{KEY_H, 0x48},
|
||||
{KEY_I, 0x49},
|
||||
{KEY_J, 0x4A},
|
||||
{KEY_K, 0x4B},
|
||||
{KEY_L, 0x4C},
|
||||
{KEY_M, 0x4D},
|
||||
{KEY_N, 0x4E},
|
||||
{KEY_O, 0x4F},
|
||||
{KEY_P, 0x50},
|
||||
{KEY_Q, 0x51},
|
||||
{KEY_R, 0x52},
|
||||
{KEY_S, 0x53},
|
||||
{KEY_T, 0x54},
|
||||
{KEY_U, 0x55},
|
||||
{KEY_V, 0x56},
|
||||
{KEY_W, 0x57},
|
||||
{KEY_X, 0x58},
|
||||
{KEY_Y, 0x59},
|
||||
{KEY_Z, 0x5A},
|
||||
{KEY_LEFTMETA, 0x5B},
|
||||
{KEY_RIGHTMETA, 0x5C},
|
||||
{KEY_KP0, 0x60},
|
||||
{KEY_KP1, 0x61},
|
||||
{KEY_KP2, 0x62},
|
||||
{KEY_KP3, 0x63},
|
||||
{KEY_KP4, 0x64},
|
||||
{KEY_KP5, 0x65},
|
||||
{KEY_KP6, 0x66},
|
||||
{KEY_KP7, 0x67},
|
||||
{KEY_KP8, 0x68},
|
||||
{KEY_KP9, 0x69},
|
||||
{KEY_KPASTERISK, 0x6A},
|
||||
{KEY_KPPLUS, 0x6B},
|
||||
{KEY_KPMINUS, 0x6D},
|
||||
{KEY_KPDOT, 0x6E},
|
||||
{KEY_KPSLASH, 0x6F},
|
||||
{KEY_F1, 0x70},
|
||||
{KEY_F2, 0x71},
|
||||
{KEY_F3, 0x72},
|
||||
{KEY_F4, 0x73},
|
||||
{KEY_F5, 0x74},
|
||||
{KEY_F6, 0x75},
|
||||
{KEY_F7, 0x76},
|
||||
{KEY_F8, 0x77},
|
||||
{KEY_F9, 0x78},
|
||||
{KEY_F10, 0x79},
|
||||
{KEY_F11, 0x7A},
|
||||
{KEY_F12, 0x7B},
|
||||
{KEY_NUMLOCK, 0x90},
|
||||
{KEY_SCROLLLOCK, 0x91},
|
||||
{KEY_LEFTSHIFT, 0xA0},
|
||||
{KEY_RIGHTSHIFT, 0xA1},
|
||||
{KEY_LEFTCTRL, 0xA2},
|
||||
{KEY_RIGHTCTRL, 0xA3},
|
||||
{KEY_LEFTALT, 0xA4},
|
||||
{KEY_RIGHTALT, 0xA5},
|
||||
{KEY_SEMICOLON, 0xBA},
|
||||
{KEY_EQUAL, 0xBB},
|
||||
{KEY_COMMA, 0xBC},
|
||||
{KEY_MINUS, 0xBD},
|
||||
{KEY_DOT, 0xBE},
|
||||
{KEY_SLASH, 0xBF},
|
||||
{KEY_GRAVE, 0xC0},
|
||||
{KEY_LEFTBRACE, 0xDB},
|
||||
{KEY_BACKSLASH, 0xDC},
|
||||
{KEY_RIGHTBRACE, 0xDD},
|
||||
{KEY_APOSTROPHE, 0xDE},
|
||||
{KEY_102ND, 0xE2}
|
||||
};
|
||||
|
||||
void
|
||||
update(input_raw_t *raw, uint16_t modcode, bool release, uint8_t flags) {
|
||||
void update(input_raw_t *raw, uint16_t modcode, bool release, uint8_t flags) {
|
||||
if (raw->keyboard) {
|
||||
if (release) {
|
||||
(*raw->keyboard).release(modcode);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
(*raw->keyboard).press(modcode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
unicode(input_raw_t *raw, char *utf8, int size) {
|
||||
void unicode(input_raw_t *raw, char *utf8, int size) {
|
||||
if (raw->keyboard) {
|
||||
/* Reading input text as UTF-8 */
|
||||
auto utf8_str = boost::locale::conv::to_utf<wchar_t>(utf8, utf8 + size, "UTF-8");
|
||||
@@ -106,8 +181,7 @@ namespace platf::keyboard {
|
||||
auto wincode = key_mappings.find(keycode);
|
||||
if (keycode == -1 || wincode == key_mappings.end()) {
|
||||
BOOST_LOG(warning) << "Unicode, unable to find keycode for: "sv << ch;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
(*raw->keyboard).press(wincode->second);
|
||||
(*raw->keyboard).release(wincode->second);
|
||||
}
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::keyboard {
|
||||
void
|
||||
update(input_raw_t *raw, uint16_t modcode, bool release, uint8_t flags);
|
||||
void update(input_raw_t *raw, uint16_t modcode, bool release, uint8_t flags);
|
||||
|
||||
void
|
||||
unicode(input_raw_t *raw, char *utf8, int size);
|
||||
void unicode(input_raw_t *raw, char *utf8, int size);
|
||||
} // namespace platf::keyboard
|
||||
|
||||
@@ -2,38 +2,36 @@
|
||||
* @file src/platform/linux/input/inputtino_mouse.cpp
|
||||
* @brief Definitions for inputtino mouse input handling.
|
||||
*/
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_mouse.h"
|
||||
#include "src/config.h"
|
||||
#include "src/logging.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_mouse.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::mouse {
|
||||
|
||||
void
|
||||
move(input_raw_t *raw, int deltaX, int deltaY) {
|
||||
void move(input_raw_t *raw, int deltaX, int deltaY) {
|
||||
if (raw->mouse) {
|
||||
(*raw->mouse).move(deltaX, deltaY);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
move_abs(input_raw_t *raw, const touch_port_t &touch_port, float x, float y) {
|
||||
void move_abs(input_raw_t *raw, const touch_port_t &touch_port, float x, float y) {
|
||||
if (raw->mouse) {
|
||||
(*raw->mouse).move_abs(x, y, touch_port.width, touch_port.height);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
button(input_raw_t *raw, int button, bool release) {
|
||||
void button(input_raw_t *raw, int button, bool release) {
|
||||
if (raw->mouse) {
|
||||
inputtino::Mouse::MOUSE_BUTTON btn_type;
|
||||
switch (button) {
|
||||
@@ -58,35 +56,31 @@ namespace platf::mouse {
|
||||
}
|
||||
if (release) {
|
||||
(*raw->mouse).release(btn_type);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
(*raw->mouse).press(btn_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
scroll(input_raw_t *raw, int high_res_distance) {
|
||||
void scroll(input_raw_t *raw, int high_res_distance) {
|
||||
if (raw->mouse) {
|
||||
(*raw->mouse).vertical_scroll(high_res_distance);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
hscroll(input_raw_t *raw, int high_res_distance) {
|
||||
void hscroll(input_raw_t *raw, int high_res_distance) {
|
||||
if (raw->mouse) {
|
||||
(*raw->mouse).horizontal_scroll(high_res_distance);
|
||||
}
|
||||
}
|
||||
|
||||
util::point_t
|
||||
get_location(input_raw_t *raw) {
|
||||
util::point_t get_location(input_raw_t *raw) {
|
||||
if (raw->mouse) {
|
||||
// TODO: decide what to do after https://github.com/games-on-whales/inputtino/issues/6 is resolved.
|
||||
// TODO: auto x = (*raw->mouse).get_absolute_x();
|
||||
// TODO: auto y = (*raw->mouse).get_absolute_y();
|
||||
return { 0, 0 };
|
||||
return {0, 0};
|
||||
}
|
||||
return { 0, 0 };
|
||||
return {0, 0};
|
||||
}
|
||||
} // namespace platf::mouse
|
||||
|
||||
@@ -3,33 +3,27 @@
|
||||
* @brief Declarations for inputtino mouse input handling.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
#include "src/platform/common.h"
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "src/platform/common.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::mouse {
|
||||
void
|
||||
move(input_raw_t *raw, int deltaX, int deltaY);
|
||||
void move(input_raw_t *raw, int deltaX, int deltaY);
|
||||
|
||||
void
|
||||
move_abs(input_raw_t *raw, const touch_port_t &touch_port, float x, float y);
|
||||
void move_abs(input_raw_t *raw, const touch_port_t &touch_port, float x, float y);
|
||||
|
||||
void
|
||||
button(input_raw_t *raw, int button, bool release);
|
||||
void button(input_raw_t *raw, int button, bool release);
|
||||
|
||||
void
|
||||
scroll(input_raw_t *raw, int high_res_distance);
|
||||
void scroll(input_raw_t *raw, int high_res_distance);
|
||||
|
||||
void
|
||||
hscroll(input_raw_t *raw, int high_res_distance);
|
||||
void hscroll(input_raw_t *raw, int high_res_distance);
|
||||
|
||||
util::point_t
|
||||
get_location(input_raw_t *raw);
|
||||
util::point_t get_location(input_raw_t *raw);
|
||||
} // namespace platf::mouse
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
* @file src/platform/linux/input/inputtino_pen.cpp
|
||||
* @brief Definitions for inputtino pen input handling.
|
||||
*/
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_pen.h"
|
||||
#include "src/config.h"
|
||||
#include "src/logging.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_pen.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::pen {
|
||||
void
|
||||
update(client_input_raw_t *raw, const touch_port_t &touch_port, const pen_input_t &pen) {
|
||||
void update(client_input_raw_t *raw, const touch_port_t &touch_port, const pen_input_t &pen) {
|
||||
if (raw->pen) {
|
||||
// First set the buttons
|
||||
(*raw->pen).set_btn(inputtino::PenTablet::PRIMARY, pen.penButtons & LI_PEN_BUTTON_PRIMARY);
|
||||
@@ -63,13 +63,7 @@ namespace platf::pen {
|
||||
|
||||
bool is_touching = pen.eventType == LI_TOUCH_EVENT_DOWN || pen.eventType == LI_TOUCH_EVENT_MOVE;
|
||||
|
||||
(*raw->pen).place_tool(tool,
|
||||
pen.x,
|
||||
pen.y,
|
||||
is_touching ? pen.pressureOrDistance : -1,
|
||||
is_touching ? -1 : pen.pressureOrDistance,
|
||||
tilt_x,
|
||||
tilt_y);
|
||||
(*raw->pen).place_tool(tool, pen.x, pen.y, is_touching ? pen.pressureOrDistance : -1, is_touching ? -1 : pen.pressureOrDistance, tilt_x, tilt_y);
|
||||
}
|
||||
}
|
||||
} // namespace platf::pen
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
#include "src/platform/common.h"
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "src/platform/common.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::pen {
|
||||
void
|
||||
update(client_input_raw_t *raw, const touch_port_t &touch_port, const pen_input_t &pen);
|
||||
void update(client_input_raw_t *raw, const touch_port_t &touch_port, const pen_input_t &pen);
|
||||
}
|
||||
|
||||
@@ -2,52 +2,53 @@
|
||||
* @file src/platform/linux/input/inputtino_touch.cpp
|
||||
* @brief Definitions for inputtino touch input handling.
|
||||
*/
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_touch.h"
|
||||
#include "src/config.h"
|
||||
#include "src/logging.h"
|
||||
#include "src/platform/common.h"
|
||||
#include "src/utility.h"
|
||||
|
||||
#include "inputtino_common.h"
|
||||
#include "inputtino_touch.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::touch {
|
||||
void
|
||||
update(client_input_raw_t *raw, const touch_port_t &touch_port, const touch_input_t &touch) {
|
||||
void update(client_input_raw_t *raw, const touch_port_t &touch_port, const touch_input_t &touch) {
|
||||
if (raw->touch) {
|
||||
switch (touch.eventType) {
|
||||
case LI_TOUCH_EVENT_HOVER:
|
||||
case LI_TOUCH_EVENT_DOWN:
|
||||
case LI_TOUCH_EVENT_MOVE: {
|
||||
// Convert our 0..360 range to -90..90 relative to Y axis
|
||||
int adjusted_angle = touch.rotation;
|
||||
case LI_TOUCH_EVENT_MOVE:
|
||||
{
|
||||
// Convert our 0..360 range to -90..90 relative to Y axis
|
||||
int adjusted_angle = touch.rotation;
|
||||
|
||||
if (adjusted_angle > 90 && adjusted_angle < 270) {
|
||||
// Lower hemisphere
|
||||
adjusted_angle = 180 - adjusted_angle;
|
||||
}
|
||||
if (adjusted_angle > 90 && adjusted_angle < 270) {
|
||||
// Lower hemisphere
|
||||
adjusted_angle = 180 - adjusted_angle;
|
||||
}
|
||||
|
||||
// Wrap the value if it's out of range
|
||||
if (adjusted_angle > 90) {
|
||||
adjusted_angle -= 360;
|
||||
// Wrap the value if it's out of range
|
||||
if (adjusted_angle > 90) {
|
||||
adjusted_angle -= 360;
|
||||
} else if (adjusted_angle < -90) {
|
||||
adjusted_angle += 360;
|
||||
}
|
||||
(*raw->touch).place_finger(touch.pointerId, touch.x, touch.y, touch.pressureOrDistance, adjusted_angle);
|
||||
break;
|
||||
}
|
||||
else if (adjusted_angle < -90) {
|
||||
adjusted_angle += 360;
|
||||
}
|
||||
(*raw->touch).place_finger(touch.pointerId, touch.x, touch.y, touch.pressureOrDistance, adjusted_angle);
|
||||
break;
|
||||
}
|
||||
case LI_TOUCH_EVENT_CANCEL:
|
||||
case LI_TOUCH_EVENT_UP:
|
||||
case LI_TOUCH_EVENT_HOVER_LEAVE: {
|
||||
(*raw->touch).release_finger(touch.pointerId);
|
||||
break;
|
||||
}
|
||||
case LI_TOUCH_EVENT_HOVER_LEAVE:
|
||||
{
|
||||
(*raw->touch).release_finger(touch.pointerId);
|
||||
break;
|
||||
}
|
||||
// TODO: LI_TOUCH_EVENT_CANCEL_ALL
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// lib includes
|
||||
#include <boost/locale.hpp>
|
||||
#include <inputtino/input.hpp>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
#include "src/platform/common.h"
|
||||
|
||||
// local includes
|
||||
#include "inputtino_common.h"
|
||||
#include "src/platform/common.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace platf::touch {
|
||||
void
|
||||
update(client_input_raw_t *raw, const touch_port_t &touch_port, const touch_input_t &touch);
|
||||
void update(client_input_raw_t *raw, const touch_port_t &touch_port, const touch_input_t &touch);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user