diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2020-05-03 15:38:58 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2020-05-03 20:13:01 +0300 |
commit | 012894789443dbb4f1882c11fd08b4c2f1618a0f (patch) | |
tree | 3d4a461ff685c165634f3124527e37c69b38366a /platform/linuxbsd | |
parent | 78db7824b72d587ff74cc5de471eb9e6b44c41f6 (diff) |
[Linux/Windows] Set pressure to 1.0f when primary button is pressed and device is not pressure sensitive.
Diffstat (limited to 'platform/linuxbsd')
-rw-r--r-- | platform/linuxbsd/display_server_x11.cpp | 11 | ||||
-rw-r--r-- | platform/linuxbsd/display_server_x11.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp index b5052667a7..dd9298d667 100644 --- a/platform/linuxbsd/display_server_x11.cpp +++ b/platform/linuxbsd/display_server_x11.cpp @@ -2359,6 +2359,7 @@ void DisplayServerX11::process_events() { xi.pressure = 0; xi.tilt = Vector2(); + xi.pressure_supported = false; while (XPending(x11_display) > 0) { XEvent event; @@ -2421,9 +2422,11 @@ void DisplayServerX11::process_events() { Map<int, Vector2>::Element *pen_pressure = xi.pen_pressure_range.find(device_id); if (pen_pressure) { Vector2 pen_pressure_range = pen_pressure->value(); - if (pen_pressure_range != Vector2()) + if (pen_pressure_range != Vector2()) { + xi.pressure_supported = true; xi.pressure = (*values - pen_pressure_range[0]) / (pen_pressure_range[1] - pen_pressure_range[0]); + } } values++; @@ -2782,7 +2785,11 @@ void DisplayServerX11::process_events() { mm.instance(); mm->set_window_id(window_id); - mm->set_pressure(xi.pressure); + if (xi.pressure_supported) { + mm->set_pressure(xi.pressure); + } else { + mm->set_pressure((mouse_get_button_state() & (1 << (BUTTON_LEFT - 1))) ? 1.0f : 0.0f); + } mm->set_tilt(xi.tilt); // Make the absolute position integral so it doesn't look _too_ weird :) diff --git a/platform/linuxbsd/display_server_x11.h b/platform/linuxbsd/display_server_x11.h index 3dc06745a1..b5ea71f72a 100644 --- a/platform/linuxbsd/display_server_x11.h +++ b/platform/linuxbsd/display_server_x11.h @@ -176,6 +176,7 @@ class DisplayServerX11 : public DisplayServer { XIEventMask all_event_mask; Map<int, Vector2> state; double pressure; + bool pressure_supported; Vector2 tilt; Vector2 mouse_pos_to_filter; Vector2 relative_motion; |