chiark / gitweb /
Sensitivity: Introduce mconfig_get_sensitivity and _set_
[xf86-input-mtrack.git] / src / mconfig.c
1 /***************************************************************************
2  *
3  * Multitouch X driver
4  * Copyright (C) 2011 Ryan Bourgeois <bluedragonx@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  **************************************************************************/
21
22 #include "mconfig.h"
23
24 void mconfig_set_sensitivity(struct MConfig *cfg, double sensitivity)
25 {
26         cfg->sensitivity_val = sensitivity;
27 }
28
29 double mconfig_get_sensitivity(const struct MConfig * cfg)
30 {
31         return cfg->sensitivity_val;
32 }
33
34 void mconfig_defaults(struct MConfig* cfg)
35 {
36         // Configure MTState
37         cfg->touch_down = DEFAULT_TOUCH_DOWN;
38         cfg->touch_up = DEFAULT_TOUCH_UP;
39         cfg->ignore_thumb = DEFAULT_IGNORE_THUMB;
40         cfg->ignore_palm = DEFAULT_IGNORE_PALM;
41         cfg->disable_on_palm = DEFAULT_DISABLE_ON_PALM;
42         cfg->disable_on_thumb = DEFAULT_DISABLE_ON_THUMB;
43         cfg->thumb_ratio = DEFAULT_THUMB_RATIO;
44         cfg->thumb_size = DEFAULT_THUMB_SIZE;
45         cfg->palm_size = DEFAULT_PALM_SIZE;
46         cfg->bottom_edge = DEFAULT_BOTTOM_EDGE;
47
48         // Configure Gestures
49         cfg->trackpad_disable = DEFAULT_TRACKPAD_DISABLE;
50         cfg->button_enable = DEFAULT_BUTTON_ENABLE;
51         cfg->button_integrated = DEFAULT_BUTTON_INTEGRATED;
52         cfg->button_expire = DEFAULT_BUTTON_EXPIRE;
53         cfg->button_zones = DEFAULT_BUTTON_ZONES;
54         cfg->bottom_edge_zones = DEFAULT_BOTTOM_EDGE_ZONES;
55         cfg->button_1touch = DEFAULT_BUTTON_1TOUCH;
56         cfg->button_2touch = DEFAULT_BUTTON_2TOUCH;
57         cfg->button_3touch = DEFAULT_BUTTON_3TOUCH;
58         cfg->tap_1touch = DEFAULT_TAP_1TOUCH;
59         cfg->tap_2touch = DEFAULT_TAP_2TOUCH;
60         cfg->tap_3touch = DEFAULT_TAP_3TOUCH;
61         cfg->tap_4touch = DEFAULT_TAP_4TOUCH;
62         cfg->tap_timeout = DEFAULT_TAP_TIMEOUT;
63         cfg->tap_hold = DEFAULT_TAP_HOLD;
64         cfg->tap_dist = DEFAULT_TAP_DIST;
65         cfg->gesture_hold = DEFAULT_GESTURE_HOLD;
66         cfg->gesture_wait = DEFAULT_GESTURE_WAIT;
67         cfg->scroll_dist = DEFAULT_SCROLL_DIST;
68         cfg->scroll_up_btn = DEFAULT_SCROLL_UP_BTN;
69         cfg->scroll_dn_btn = DEFAULT_SCROLL_DN_BTN;
70         cfg->scroll_lt_btn = DEFAULT_SCROLL_LT_BTN;
71         cfg->scroll_rt_btn = DEFAULT_SCROLL_RT_BTN;
72         cfg->swipe_dist = DEFAULT_SWIPE_DIST;
73         cfg->swipe_up_btn = DEFAULT_SWIPE_UP_BTN;
74         cfg->swipe_dn_btn = DEFAULT_SWIPE_DN_BTN;
75         cfg->swipe_lt_btn = DEFAULT_SWIPE_LT_BTN;
76         cfg->swipe_rt_btn = DEFAULT_SWIPE_RT_BTN;
77         cfg->swipe4_dist = DEFAULT_SWIPE4_DIST;
78         cfg->swipe4_up_btn = DEFAULT_SWIPE4_UP_BTN;
79         cfg->swipe4_dn_btn = DEFAULT_SWIPE4_DN_BTN;
80         cfg->swipe4_lt_btn = DEFAULT_SWIPE4_LT_BTN;
81         cfg->swipe4_rt_btn = DEFAULT_SWIPE4_RT_BTN;
82         cfg->scale_dist = DEFAULT_SCALE_DIST;
83         cfg->scale_up_btn = DEFAULT_SCALE_UP_BTN;
84         cfg->scale_dn_btn = DEFAULT_SCALE_DN_BTN;
85         cfg->rotate_dist = SQRVAL(DEFAULT_ROTATE_DIST);
86         cfg->rotate_lt_btn = DEFAULT_ROTATE_LT_BTN;
87         cfg->rotate_rt_btn = DEFAULT_ROTATE_RT_BTN;
88         cfg->drag_enable = DEFAULT_DRAG_ENABLE;
89         cfg->drag_timeout = DEFAULT_DRAG_TIMEOUT;
90         mconfig_set_sensitivity(cfg, DEFAULT_SENSITIVITY);
91 }
92
93 void mconfig_init(struct MConfig* cfg,
94                         const struct Capabilities* caps)
95 {
96         cfg->touch_minor = caps->has_abs[MTDEV_TOUCH_MINOR];
97         cfg->pad_width = get_cap_xsize(caps);
98         cfg->pad_height = get_cap_ysize(caps);
99         cfg->pad_xmin = get_cap_xmin(caps);
100         cfg->pad_ymin = get_cap_ymin(caps);
101         
102         if (caps->has_abs[MTDEV_TOUCH_MAJOR] && caps->has_abs[MTDEV_WIDTH_MAJOR]) {
103                 cfg->touch_type = MCFG_SCALE;
104                 cfg->touch_min = caps->abs[MTDEV_TOUCH_MAJOR].minimum;
105                 cfg->touch_max = caps->abs[MTDEV_TOUCH_MAJOR].maximum;
106                 xf86Msg(X_INFO, "Touchpad supports regular and approaching touches.\n");
107                 xf86Msg(X_INFO, "  touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
108         }
109         else if (caps->has_abs[MTDEV_TOUCH_MAJOR]) {
110                 cfg->touch_type = MCFG_SIZE;
111                 cfg->touch_min = caps->abs[MTDEV_TOUCH_MAJOR].minimum;
112                 cfg->touch_max = caps->abs[MTDEV_TOUCH_MAJOR].maximum;
113                 xf86Msg(X_INFO, "Touchpad supports regular touches.\n");
114                 xf86Msg(X_INFO, "  touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
115         }
116         else if (caps->has_abs[MTDEV_PRESSURE]) {
117                 cfg->touch_type = MCFG_PRESSURE;
118                 cfg->touch_min = caps->abs[MTDEV_PRESSURE].minimum;
119                 cfg->touch_max = caps->abs[MTDEV_PRESSURE].maximum;
120                 xf86Msg(X_INFO, "Touchpad is pressure based.\n");
121                 xf86Msg(X_INFO, "  touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
122         }
123         else {
124                 cfg->touch_type = MCFG_NONE;
125                 xf86Msg(X_WARNING, "Touchpad has minimal capabilities. Some features will be unavailable.\n");
126         }
127
128         if (cfg->touch_minor)
129                 xf86Msg(X_INFO, "Touchpad supports minor touch widths.\n");
130 }
131
132 void mconfig_configure(struct MConfig* cfg,
133                         pointer opts)
134 {
135         // Configure MTState
136         cfg->touch_down = CLAMPVAL(xf86SetIntOption(opts, "FingerHigh", DEFAULT_TOUCH_DOWN), 0, 100);
137         cfg->touch_up = CLAMPVAL(xf86SetIntOption(opts, "FingerLow", DEFAULT_TOUCH_UP), 0, 100);
138         cfg->ignore_thumb = xf86SetBoolOption(opts, "IgnoreThumb", DEFAULT_IGNORE_THUMB);
139         cfg->ignore_palm = xf86SetBoolOption(opts, "IgnorePalm", DEFAULT_IGNORE_PALM);
140         cfg->disable_on_thumb = xf86SetBoolOption(opts, "DisableOnThumb", DEFAULT_DISABLE_ON_THUMB);
141         cfg->disable_on_palm = xf86SetBoolOption(opts, "DisableOnPalm", DEFAULT_DISABLE_ON_PALM);
142         cfg->thumb_ratio = CLAMPVAL(xf86SetIntOption(opts, "ThumbRatio", DEFAULT_THUMB_RATIO), 0, 100);
143         cfg->thumb_size = CLAMPVAL(xf86SetIntOption(opts, "ThumbSize", DEFAULT_THUMB_SIZE), 0, 100);
144         cfg->palm_size = CLAMPVAL(xf86SetIntOption(opts, "PalmSize", DEFAULT_PALM_SIZE), 0, 100);
145         cfg->bottom_edge = CLAMPVAL(xf86SetIntOption(opts, "BottomEdge", DEFAULT_BOTTOM_EDGE), 0, 100);
146
147         // Configure Gestures
148         cfg->trackpad_disable = CLAMPVAL(xf86SetIntOption(opts, "TrackpadDisable", DEFAULT_TRACKPAD_DISABLE), 0, 3);
149         cfg->button_enable = xf86SetBoolOption(opts, "ButtonEnable", DEFAULT_BUTTON_ENABLE);
150         cfg->button_integrated = xf86SetBoolOption(opts, "ButtonIntegrated", DEFAULT_BUTTON_INTEGRATED);
151         cfg->button_expire = MAXVAL(xf86SetIntOption(opts, "ButtonTouchExpire", DEFAULT_BUTTON_EXPIRE), 0);
152         cfg->button_zones = xf86SetBoolOption(opts, "ButtonZonesEnable", DEFAULT_BUTTON_ZONES);
153         cfg->bottom_edge_zones = xf86SetBoolOption(opts, "BottomEdgeZonesEnable", DEFAULT_BOTTOM_EDGE_ZONES);
154         cfg->button_1touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger1", DEFAULT_BUTTON_1TOUCH), 0, 32);
155         cfg->button_2touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger2", DEFAULT_BUTTON_2TOUCH), 0, 32);
156         cfg->button_3touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger3", DEFAULT_BUTTON_3TOUCH), 0, 32);
157         cfg->button_move = xf86SetBoolOption(opts, "ButtonMoveEmulate", DEFAULT_BUTTON_MOVE);
158         cfg->tap_1touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton1", DEFAULT_TAP_1TOUCH), 0, 32);
159         cfg->tap_2touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton2", DEFAULT_TAP_2TOUCH), 0, 32);
160         cfg->tap_3touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton3", DEFAULT_TAP_3TOUCH), 0, 32);
161         cfg->tap_4touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton4", DEFAULT_TAP_4TOUCH), 0, 32);
162         cfg->tap_hold = MAXVAL(xf86SetIntOption(opts, "ClickTime", DEFAULT_TAP_HOLD), 1);
163         cfg->tap_timeout = MAXVAL(xf86SetIntOption(opts, "MaxTapTime", DEFAULT_TAP_TIMEOUT), 1);
164         cfg->tap_dist = MAXVAL(xf86SetIntOption(opts, "MaxTapMove", DEFAULT_TAP_DIST), 1);
165         cfg->gesture_hold = MAXVAL(xf86SetIntOption(opts, "GestureClickTime", DEFAULT_GESTURE_HOLD), 1);
166         cfg->gesture_wait = MAXVAL(xf86SetIntOption(opts, "GestureWaitTime", DEFAULT_GESTURE_WAIT), 0);
167         cfg->scroll_dist = MAXVAL(xf86SetIntOption(opts, "ScrollDistance", DEFAULT_SCROLL_DIST), 1);
168         cfg->scroll_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollUpButton", DEFAULT_SCROLL_UP_BTN), 0, 32);
169         cfg->scroll_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollDownButton", DEFAULT_SCROLL_DN_BTN), 0, 32);
170         cfg->scroll_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollLeftButton", DEFAULT_SCROLL_LT_BTN), 0, 32);
171         cfg->scroll_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollRightButton", DEFAULT_SCROLL_RT_BTN), 0, 32);
172         cfg->swipe_dist = MAXVAL(xf86SetIntOption(opts, "SwipeDistance", DEFAULT_SWIPE_DIST), 1);
173         cfg->swipe_up_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeUpButton", DEFAULT_SWIPE_UP_BTN), 0, 32);
174         cfg->swipe_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeDownButton", DEFAULT_SWIPE_DN_BTN), 0, 32);
175         cfg->swipe_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeLeftButton", DEFAULT_SWIPE_LT_BTN), 0, 32);
176         cfg->swipe_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeRightButton", DEFAULT_SWIPE_RT_BTN), 0, 32);
177         cfg->swipe4_dist = MAXVAL(xf86SetIntOption(opts, "Swipe4Distance", DEFAULT_SWIPE4_DIST), 1);
178         cfg->swipe4_up_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4UpButton", DEFAULT_SWIPE4_UP_BTN), 0, 32);
179         cfg->swipe4_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4DownButton", DEFAULT_SWIPE4_DN_BTN), 0, 32);
180         cfg->swipe4_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4LeftButton", DEFAULT_SWIPE4_LT_BTN), 0, 32);
181         cfg->swipe4_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4RightButton", DEFAULT_SWIPE4_RT_BTN), 0, 32);
182         cfg->scale_dist = MAXVAL(xf86SetIntOption(opts, "ScaleDistance", DEFAULT_SCALE_DIST), 1);
183         cfg->scale_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleUpButton", DEFAULT_SCALE_UP_BTN), 0, 32);
184         cfg->scale_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleDownButton", DEFAULT_SCALE_DN_BTN), 0, 32);
185         cfg->rotate_dist = MAXVAL(xf86SetIntOption(opts, "RotateDistance", DEFAULT_ROTATE_DIST), 1);
186         cfg->rotate_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateLeftButton", DEFAULT_ROTATE_LT_BTN), 0, 32);
187         cfg->rotate_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateRightButton", DEFAULT_ROTATE_RT_BTN), 0, 23);
188         cfg->drag_enable = xf86SetBoolOption(opts, "TapDragEnable", DEFAULT_DRAG_ENABLE);
189         cfg->drag_timeout = MAXVAL(xf86SetIntOption(opts, "TapDragTime", DEFAULT_DRAG_TIMEOUT), 1);
190         cfg->drag_wait = MAXVAL(xf86SetIntOption(opts, "TapDragWait", DEFAULT_DRAG_WAIT), 0);
191         cfg->drag_dist = MAXVAL(xf86SetIntOption(opts, "TapDragDist", DEFAULT_DRAG_DIST), 0);
192         cfg->axis_x_invert = xf86SetBoolOption(opts, "AxisXInvert", DEFAULT_AXIS_X_INVERT);
193         cfg->axis_y_invert = xf86SetBoolOption(opts, "AxisYInvert", DEFAULT_AXIS_Y_INVERT);
194         mconfig_set_sensitivity(cfg, MAXVAL(xf86SetRealOption(opts, "Sensitivity", DEFAULT_SENSITIVITY), 0));
195 }
196