From 14008493f8d4d05518bbf0847b57182e1390df82 Mon Sep 17 00:00:00 2001 From: Syntrait <45499201+Syntrait@users.noreply.github.com> Date: Sun, 10 Nov 2024 16:57:31 +0300 Subject: [PATCH] fix fps games --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/client.rs | 142 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 96 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ade3cb2..0d07519 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2595,7 +2595,7 @@ dependencies = [ [[package]] name = "splinux" -version = "1.0.1" +version = "1.1.0" dependencies = [ "eframe", "evdev", diff --git a/Cargo.toml b/Cargo.toml index 31b0638..3a82aa3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "splinux" -version = "1.0.1" +version = "1.1.0" edition = "2021" [dependencies] diff --git a/src/client.rs b/src/client.rs index f7fe0a4..44357c5 100644 --- a/src/client.rs +++ b/src/client.rs @@ -32,60 +32,106 @@ pub fn client(devices: String) { loop { for e in device.fetch_events().unwrap() { match e.kind() { - evdev::InputEventKind::Key(x) => { - //println!("x.0: {}, e.value(): {}", x.0, e.value()); - - match x.0 { - val @ 272..=274 => { - conn.xtest_fake_input( - if e.value() == 1 { - x11rb::protocol::xproto::BUTTON_PRESS_EVENT - } else { - x11rb::protocol::xproto::BUTTON_RELEASE_EVENT - }, - match val { - 272 => 1, - 273 => 3, - 274 => 2, - _ => 0, - }, - 0, - NONE, - 0, - 0, - 0, - ) - .unwrap(); - } - x => { - if e.value() == 2 { - continue; - } - conn.xtest_fake_input( - if e.value() == 1 { - x11rb::protocol::xproto::KEY_PRESS_EVENT - } else { - x11rb::protocol::xproto::KEY_RELEASE_EVENT - }, - x as u8 + 8, - 0, - NONE, - 0, - 0, - 0, - ) - .unwrap(); + evdev::InputEventKind::Key(x) => match x.0 { + val @ 272..=274 => { + conn.xtest_fake_input( + if e.value() == 1 { + x11rb::protocol::xproto::BUTTON_PRESS_EVENT + } else { + x11rb::protocol::xproto::BUTTON_RELEASE_EVENT + }, + match val { + 272 => 1, + 273 => 3, + 274 => 2, + _ => 0, + }, + 0, + NONE, + 0, + 0, + 0, + ) + .unwrap(); + } + x => { + if e.value() == 2 { + continue; } + conn.xtest_fake_input( + if e.value() == 1 { + x11rb::protocol::xproto::KEY_PRESS_EVENT + } else { + x11rb::protocol::xproto::KEY_RELEASE_EVENT + }, + x as u8 + 8, + 0, + NONE, + 0, + 0, + 0, + ) + .unwrap(); } - } + }, evdev::InputEventKind::RelAxis(_) => match e.code() { REL_X => { - conn.warp_pointer(window, NONE, 0, 0, 0, 0, e.value() as i16, 0) - .unwrap(); + let curpos = conn.query_pointer(window).unwrap().reply().unwrap(); + + if curpos.root_x as u16 * 2 == screen.width_in_pixels + && curpos.root_y as u16 * 2 == screen.height_in_pixels + { + conn.warp_pointer(NONE, NONE, 0, 0, 0, 0, e.value() as i16, 0) + .unwrap(); + + let curpos2 = + conn.query_pointer(window).unwrap().reply().unwrap(); + + if curpos2.root_x as u16 * 2 == screen.width_in_pixels { + conn.xtest_fake_input( + x11rb::protocol::xproto::MOTION_NOTIFY_EVENT, + 0, + 0, + NONE, + e.value() as i16, + 0, + 0, + ) + .unwrap(); + } + } else { + conn.warp_pointer(NONE, NONE, 0, 0, 0, 0, e.value() as i16, 0) + .unwrap(); + } } REL_Y => { - conn.warp_pointer(window, NONE, 0, 0, 0, 0, 0, e.value() as i16) - .unwrap(); + let curpos = conn.query_pointer(window).unwrap().reply().unwrap(); + + if curpos.root_x as u16 * 2 == screen.width_in_pixels + && curpos.root_y as u16 * 2 == screen.height_in_pixels + { + conn.warp_pointer(NONE, NONE, 0, 0, 0, 0, 0, e.value() as i16) + .unwrap(); + + let curpos2 = + conn.query_pointer(window).unwrap().reply().unwrap(); + + if curpos2.root_y as u16 * 2 == screen.height_in_pixels { + conn.xtest_fake_input( + x11rb::protocol::xproto::MOTION_NOTIFY_EVENT, + 0, + 0, + NONE, + 0, + e.value() as i16, + 0, + ) + .unwrap(); + } + } else { + conn.warp_pointer(NONE, NONE, 0, 0, 0, 0, 0, e.value() as i16) + .unwrap(); + } } REL_WHEEL => { conn.xtest_fake_input(