summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Brosziewski <bru@cvs.openbsd.org>2017-07-27 20:25:28 +0000
committerUlf Brosziewski <bru@cvs.openbsd.org>2017-07-27 20:25:28 +0000
commit18da0be638efd67279878bd341e61b815001cc8d (patch)
treebb024b93fd9d2e00612a807ff812a2c8eeae962d
parent6cea0a5f5bb8f39bb09d9f6d50c31d640058d577 (diff)
Use variable edge masks (again).
The properties of edge areas will be more consistent even though in some cases the driver remains in the dark about the exact coordinate limits.
-rw-r--r--sys/dev/wscons/wstpad.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/sys/dev/wscons/wstpad.c b/sys/dev/wscons/wstpad.c
index f22d6a34855..3c901eee096 100644
--- a/sys/dev/wscons/wstpad.c
+++ b/sys/dev/wscons/wstpad.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wstpad.c,v 1.9 2017/07/26 20:25:15 bru Exp $ */
+/* $OpenBSD: wstpad.c,v 1.10 2017/07/27 20:25:27 bru Exp $ */
/*
* Copyright (c) 2015, 2016 Ulf Brosziewski
@@ -1320,17 +1320,24 @@ wstpad_configure(struct wsmouseinput *input)
tp->tap.maxdist = 3 * h_unit;
}
+ /* A touch with a flag set in this mask does not move the pointer. */
+ tp->freeze = 0;
+
if ((ratio = tp->params.left_edge) == 0
&& (tp->features & WSTPAD_EDGESCROLL)
&& (tp->features & WSTPAD_SWAPSIDES))
ratio = EDGERATIO_DEFAULT;
tp->edge.left = input->hw.x_min + width * ratio / 4096;
+ if (ratio)
+ tp->freeze |= L_EDGE;
if ((ratio = tp->params.right_edge) == 0
&& (tp->features & WSTPAD_EDGESCROLL)
&& !(tp->features & WSTPAD_SWAPSIDES))
ratio = EDGERATIO_DEFAULT;
tp->edge.right = input->hw.x_max - width * ratio / 4096;
+ if (ratio)
+ tp->freeze |= R_EDGE;
if ((ratio = tp->params.bottom_edge) == 0
&& ((tp->features & WSTPAD_SOFTBUTTONS)
@@ -1338,11 +1345,15 @@ wstpad_configure(struct wsmouseinput *input)
&& (tp->features & WSTPAD_HORIZSCROLL))))
ratio = EDGERATIO_DEFAULT;
tp->edge.bottom = input->hw.y_min + height * ratio / 4096;
+ if (ratio)
+ tp->freeze |= B_EDGE;
if ((ratio = tp->params.top_edge) == 0
&& (tp->features & WSTPAD_TOPBUTTONS))
ratio = EDGERATIO_DEFAULT;
tp->edge.top = input->hw.y_max - height * ratio / 4096;
+ if (ratio)
+ tp->freeze |= T_EDGE;
if ((ratio = abs(tp->params.center_width)) == 0)
ratio = CENTERWIDTH_DEFAULT;
@@ -1351,12 +1362,6 @@ wstpad_configure(struct wsmouseinput *input)
tp->edge.center_right = tp->edge.center + width * ratio / 8192;
tp->edge.middle = (input->hw.y_max - input->hw.y_min) / 2;
- /*
- * A touch with a flag that is also set in this mask does not
- * move the pointer. For now, it only contains the edge flags.
- */
- tp->freeze = EDGES;
-
tp->handlers = 0;
if (tp->features & WSTPAD_SOFTBUTTONS)