summaryrefslogtreecommitdiff
path: root/platform/linuxbsd
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2020-05-03 15:38:58 +0300
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2020-05-03 20:13:01 +0300
commit012894789443dbb4f1882c11fd08b4c2f1618a0f (patch)
tree3d4a461ff685c165634f3124527e37c69b38366a /platform/linuxbsd
parent78db7824b72d587ff74cc5de471eb9e6b44c41f6 (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.cpp11
-rw-r--r--platform/linuxbsd/display_server_x11.h1
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;