touchpad: reduce button size, use physical sizes where possible
authorPeter Hutterer <peter.hutterer@who-t.net>
Wed, 2 Jul 2014 05:41:22 +0000 (15:41 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 3 Jul 2014 03:52:57 +0000 (13:52 +1000)
The current 20% is excessive. On the t440s, the button size amounts to ~14mm
from the bottom. On the x220 it amounts to ~9mm, leaving only 31mm as actual
touchpad.

Reduce it to 15% instead, which amounts to 10.5mm on the t440 and 6mm on the
x220. Cap the button height further by making buttons a maximum height of
10mm, anything larger than that is excessive anyway.

Smaller buttons should be acceptable since we can rely on the bottom edge to
be a haptic feedback and thus a good hit-target, somewhat simliar to how
screen edges are good hit-targets.

The top software buttons stay the same size, but prefer a physical size of 6mm
instead (which is 1mm below the button marker line on the T440s). If no y
resolution is available, fall back to the 8% which is 5.6mm on the T440s.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/evdev-mt-touchpad-buttons.c

index b84198c..9848a32 100644 (file)
@@ -605,11 +605,28 @@ tp_init_buttons(struct tp_dispatch *tp,
        if (tp->buttons.is_clickpad && !tp->buttons.use_clickfinger) {
                int xoffset = absinfo_x->minimum,
                    yoffset = absinfo_y->minimum;
-               tp->buttons.bottom_area.top_edge = height * .8 + yoffset;
+               int yres = absinfo_y->resolution;
+
+               /* button height: 10mm or 15% of the touchpad height,
+                  whichever is smaller */
+               if (yres > 1 && (height * 0.15/yres) > 10) {
+                       tp->buttons.bottom_area.top_edge =
+                               absinfo_y->maximum - 10 * yres;
+               } else {
+                       tp->buttons.bottom_area.top_edge = height * .85 + yoffset;
+               }
+
                tp->buttons.bottom_area.rightbutton_left_edge = width/2 + xoffset;
 
                if (tp->buttons.has_topbuttons) {
-                       tp->buttons.top_area.bottom_edge = height * .08 + yoffset;
+                       /* T440s has the top button line 5mm from the top,
+                          make the buttons 6mm high */
+                       if (yres > 1) {
+                               tp->buttons.top_area.bottom_edge =
+                                       yoffset + 6 * yres;
+                       } else {
+                               tp->buttons.top_area.bottom_edge = height * .08 + yoffset;
+                       }
                        tp->buttons.top_area.rightbutton_left_edge = width * .58 + xoffset;
                        tp->buttons.top_area.leftbutton_right_edge = width * .42 + xoffset;
                } else {