From 38f65c500c1257bfdf586ae6b7b26cc1b77086ed Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 19 May 2016 20:30:48 +0200 Subject: [PATCH] Fix T48204: Generic Tablet on Linux - Erratic strokes with pressure sensitivity enabled. Once and for all - I hope! So, for the records: Xinput1 events' valuators have a first_axis and axis_count defining the 'range' of valid axes for that event - but valid data in the valuator's array **always** start at zero (which means that, if event reports first axis as being axis 2, axis 2's value is in axis_data[0]). --- intern/ghost/intern/GHOST_SystemX11.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index dde63badb91..95dea38c70a 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -1239,7 +1239,8 @@ GHOST_SystemX11::processEvent(XEvent *xe) * events). So we have to check which values this event actually contains! */ -#define AXIS_VALUE_GET(axis, val) ((axis_first <= axis && axes_end > axis) && ((void)(val = data->axis_data[axis]), true)) +#define AXIS_VALUE_GET(axis, val) \ + ((axis_first <= axis && axes_end > axis) && ((void)(val = data->axis_data[axis - axis_first]), true)) if (AXIS_VALUE_GET(2, axis_value)) { window->GetTabletData()->Pressure = axis_value / ((float)m_xtablet.PressureLevels);