Implement horizontal scrolling and Sunshine detection for Moonlight (#793)
This commit is contained in:
@@ -363,6 +363,7 @@ void move_mouse(input_t &input, int deltaX, int deltaY);
|
||||
void abs_mouse(input_t &input, const touch_port_t &touch_port, float x, float y);
|
||||
void button_mouse(input_t &input, int button, bool release);
|
||||
void scroll(input_t &input, int distance);
|
||||
void hscroll(input_t &input, int distance);
|
||||
void keyboard(input_t &input, uint16_t modcode, bool release);
|
||||
void gamepad(input_t &input, int nr, const gamepad_state_t &gamepad_state);
|
||||
void unicode(input_t &input, char *utf8, int size);
|
||||
|
||||
@@ -982,6 +982,19 @@ void scroll(input_t &input, int high_res_distance) {
|
||||
libevdev_uinput_write_event(mouse, EV_SYN, SYN_REPORT, 0);
|
||||
}
|
||||
|
||||
void hscroll(input_t &input, int high_res_distance) {
|
||||
int distance = high_res_distance / 120;
|
||||
|
||||
auto mouse = ((input_raw_t *)input.get())->mouse_input.get();
|
||||
if(!mouse) {
|
||||
return;
|
||||
}
|
||||
|
||||
libevdev_uinput_write_event(mouse, EV_REL, REL_HWHEEL, distance);
|
||||
libevdev_uinput_write_event(mouse, EV_REL, REL_HWHEEL_HI_RES, high_res_distance);
|
||||
libevdev_uinput_write_event(mouse, EV_SYN, SYN_REPORT, 0);
|
||||
}
|
||||
|
||||
static keycode_t keysym(std::uint16_t modcode) {
|
||||
if(modcode <= keycodes.size()) {
|
||||
return keycodes[modcode];
|
||||
|
||||
@@ -417,6 +417,10 @@ void scroll(input_t &input, int high_res_distance) {
|
||||
CFRelease(upEvent);
|
||||
}
|
||||
|
||||
void hscroll(input_t &input, int high_res_distance) {
|
||||
// Unimplemented
|
||||
}
|
||||
|
||||
input_t input() {
|
||||
input_t result { new macos_input_t() };
|
||||
|
||||
|
||||
@@ -303,6 +303,18 @@ void scroll(input_t &input, int distance) {
|
||||
send_input(i);
|
||||
}
|
||||
|
||||
void hscroll(input_t &input, int distance) {
|
||||
INPUT i {};
|
||||
|
||||
i.type = INPUT_MOUSE;
|
||||
auto &mi = i.mi;
|
||||
|
||||
mi.dwFlags = MOUSEEVENTF_HWHEEL;
|
||||
mi.mouseData = distance;
|
||||
|
||||
send_input(i);
|
||||
}
|
||||
|
||||
void keyboard(input_t &input, uint16_t modcode, bool release) {
|
||||
auto raw = (input_raw_t *)input.get();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user