chiark / gitweb /
Offsets: Introduce cfg->pad_xmin and ymin, and cap_get_xmin, ymin
[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_defaults(struct MConfig* cfg)
25 {
26         // Configure MTState
27         cfg->touch_down = DEFAULT_TOUCH_DOWN;
28         cfg->touch_up = DEFAULT_TOUCH_UP;
29         cfg->ignore_thumb = DEFAULT_IGNORE_THUMB;
30         cfg->ignore_palm = DEFAULT_IGNORE_PALM;
31         cfg->disable_on_palm = DEFAULT_DISABLE_ON_PALM;
32         cfg->disable_on_thumb = DEFAULT_DISABLE_ON_THUMB;
33         cfg->thumb_ratio = DEFAULT_THUMB_RATIO;
34         cfg->thumb_size = DEFAULT_THUMB_SIZE;
35         cfg->palm_size = DEFAULT_PALM_SIZE;
36         cfg->bottom_edge = DEFAULT_BOTTOM_EDGE;
37
38         // Configure Gestures
39         cfg->trackpad_disable = DEFAULT_TRACKPAD_DISABLE;
40         cfg->button_enable = DEFAULT_BUTTON_ENABLE;
41         cfg->button_integrated = DEFAULT_BUTTON_INTEGRATED;
42         cfg->button_expire = DEFAULT_BUTTON_EXPIRE;
43         cfg->button_zones = DEFAULT_BUTTON_ZONES;
44         cfg->bottom_edge_zones = DEFAULT_BOTTOM_EDGE_ZONES;
45         cfg->button_1touch = DEFAULT_BUTTON_1TOUCH;
46         cfg->button_2touch = DEFAULT_BUTTON_2TOUCH;
47         cfg->button_3touch = DEFAULT_BUTTON_3TOUCH;
48         cfg->tap_1touch = DEFAULT_TAP_1TOUCH;
49         cfg->tap_2touch = DEFAULT_TAP_2TOUCH;
50         cfg->tap_3touch = DEFAULT_TAP_3TOUCH;
51         cfg->tap_4touch = DEFAULT_TAP_4TOUCH;
52         cfg->tap_timeout = DEFAULT_TAP_TIMEOUT;
53         cfg->tap_hold = DEFAULT_TAP_HOLD;
54         cfg->tap_dist = DEFAULT_TAP_DIST;
55         cfg->gesture_hold = DEFAULT_GESTURE_HOLD;
56         cfg->gesture_wait = DEFAULT_GESTURE_WAIT;
57         cfg->scroll_dist = DEFAULT_SCROLL_DIST;
58         cfg->scroll_up_btn = DEFAULT_SCROLL_UP_BTN;
59         cfg->scroll_dn_btn = DEFAULT_SCROLL_DN_BTN;
60         cfg->scroll_lt_btn = DEFAULT_SCROLL_LT_BTN;
61         cfg->scroll_rt_btn = DEFAULT_SCROLL_RT_BTN;
62         cfg->swipe_dist = DEFAULT_SWIPE_DIST;
63         cfg->swipe_up_btn = DEFAULT_SWIPE_UP_BTN;
64         cfg->swipe_dn_btn = DEFAULT_SWIPE_DN_BTN;
65         cfg->swipe_lt_btn = DEFAULT_SWIPE_LT_BTN;
66         cfg->swipe_rt_btn = DEFAULT_SWIPE_RT_BTN;
67         cfg->swipe4_dist = DEFAULT_SWIPE4_DIST;
68         cfg->swipe4_up_btn = DEFAULT_SWIPE4_UP_BTN;
69         cfg->swipe4_dn_btn = DEFAULT_SWIPE4_DN_BTN;
70         cfg->swipe4_lt_btn = DEFAULT_SWIPE4_LT_BTN;
71         cfg->swipe4_rt_btn = DEFAULT_SWIPE4_RT_BTN;
72         cfg->scale_dist = DEFAULT_SCALE_DIST;
73         cfg->scale_up_btn = DEFAULT_SCALE_UP_BTN;
74         cfg->scale_dn_btn = DEFAULT_SCALE_DN_BTN;
75         cfg->rotate_dist = SQRVAL(DEFAULT_ROTATE_DIST);
76         cfg->rotate_lt_btn = DEFAULT_ROTATE_LT_BTN;
77         cfg->rotate_rt_btn = DEFAULT_ROTATE_RT_BTN;
78         cfg->drag_enable = DEFAULT_DRAG_ENABLE;
79         cfg->drag_timeout = DEFAULT_DRAG_TIMEOUT;
80         cfg->sensitivity = DEFAULT_SENSITIVITY;
81 }
82
83 void mconfig_init(struct MConfig* cfg,
84                         const struct Capabilities* caps)
85 {
86         cfg->touch_minor = caps->has_abs[MTDEV_TOUCH_MINOR];
87         cfg->pad_width = get_cap_xsize(caps);
88         cfg->pad_height = get_cap_ysize(caps);
89         cfg->pad_xmin = get_cap_xmin(caps);
90         cfg->pad_ymin = get_cap_ymin(caps);
91         
92         if (caps->has_abs[MTDEV_TOUCH_MAJOR] && caps->has_abs[MTDEV_WIDTH_MAJOR]) {
93                 cfg->touch_type = MCFG_SCALE;
94                 cfg->touch_min = caps->abs[MTDEV_TOUCH_MAJOR].minimum;
95                 cfg->touch_max = caps->abs[MTDEV_TOUCH_MAJOR].maximum;
96                 xf86Msg(X_INFO, "Touchpad supports regular and approaching touches.\n");
97                 xf86Msg(X_INFO, "  touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
98         }
99         else if (caps->has_abs[MTDEV_TOUCH_MAJOR]) {
100                 cfg->touch_type = MCFG_SIZE;
101                 cfg->touch_min = caps->abs[MTDEV_TOUCH_MAJOR].minimum;
102                 cfg->touch_max = caps->abs[MTDEV_TOUCH_MAJOR].maximum;
103                 xf86Msg(X_INFO, "Touchpad supports regular touches.\n");
104                 xf86Msg(X_INFO, "  touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
105         }
106         else if (caps->has_abs[MTDEV_PRESSURE]) {
107                 cfg->touch_type = MCFG_PRESSURE;
108                 cfg->touch_min = caps->abs[MTDEV_PRESSURE].minimum;
109                 cfg->touch_max = caps->abs[MTDEV_PRESSURE].maximum;
110                 xf86Msg(X_INFO, "Touchpad is pressure based.\n");
111                 xf86Msg(X_INFO, "  touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
112         }
113         else {
114                 cfg->touch_type = MCFG_NONE;
115                 xf86Msg(X_WARNING, "Touchpad has minimal capabilities. Some features will be unavailable.\n");
116         }
117
118         if (cfg->touch_minor)
119                 xf86Msg(X_INFO, "Touchpad supports minor touch widths.\n");
120 }
121
122 void mconfig_configure(struct MConfig* cfg,
123                         pointer opts)
124 {
125         // Configure MTState
126         cfg->touch_down = CLAMPVAL(xf86SetIntOption(opts, "FingerHigh", DEFAULT_TOUCH_DOWN), 0, 100);
127         cfg->touch_up = CLAMPVAL(xf86SetIntOption(opts, "FingerLow", DEFAULT_TOUCH_UP), 0, 100);
128         cfg->ignore_thumb = xf86SetBoolOption(opts, "IgnoreThumb", DEFAULT_IGNORE_THUMB);
129         cfg->ignore_palm = xf86SetBoolOption(opts, "IgnorePalm", DEFAULT_IGNORE_PALM);
130         cfg->disable_on_thumb = xf86SetBoolOption(opts, "DisableOnThumb", DEFAULT_DISABLE_ON_THUMB);
131         cfg->disable_on_palm = xf86SetBoolOption(opts, "DisableOnPalm", DEFAULT_DISABLE_ON_PALM);
132         cfg->thumb_ratio = CLAMPVAL(xf86SetIntOption(opts, "ThumbRatio", DEFAULT_THUMB_RATIO), 0, 100);
133         cfg->thumb_size = CLAMPVAL(xf86SetIntOption(opts, "ThumbSize", DEFAULT_THUMB_SIZE), 0, 100);
134         cfg->palm_size = CLAMPVAL(xf86SetIntOption(opts, "PalmSize", DEFAULT_PALM_SIZE), 0, 100);
135         cfg->bottom_edge = CLAMPVAL(xf86SetIntOption(opts, "BottomEdge", DEFAULT_BOTTOM_EDGE), 0, 100);
136
137         // Configure Gestures
138         cfg->trackpad_disable = CLAMPVAL(xf86SetIntOption(opts, "TrackpadDisable", DEFAULT_TRACKPAD_DISABLE), 0, 3);
139         cfg->button_enable = xf86SetBoolOption(opts, "ButtonEnable", DEFAULT_BUTTON_ENABLE);
140         cfg->button_integrated = xf86SetBoolOption(opts, "ButtonIntegrated", DEFAULT_BUTTON_INTEGRATED);
141         cfg->button_expire = MAXVAL(xf86SetIntOption(opts, "ButtonTouchExpire", DEFAULT_BUTTON_EXPIRE), 0);
142         cfg->button_zones = xf86SetBoolOption(opts, "ButtonZonesEnable", DEFAULT_BUTTON_ZONES);
143         cfg->bottom_edge_zones = xf86SetBoolOption(opts, "BottomEdgeZonesEnable", DEFAULT_BOTTOM_EDGE_ZONES);
144         cfg->button_1touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger1", DEFAULT_BUTTON_1TOUCH), 0, 32);
145         cfg->button_2touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger2", DEFAULT_BUTTON_2TOUCH), 0, 32);
146         cfg->button_3touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger3", DEFAULT_BUTTON_3TOUCH), 0, 32);
147         cfg->button_move = xf86SetBoolOption(opts, "ButtonMoveEmulate", DEFAULT_BUTTON_MOVE);
148         cfg->tap_1touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton1", DEFAULT_TAP_1TOUCH), 0, 32);
149         cfg->tap_2touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton2", DEFAULT_TAP_2TOUCH), 0, 32);
150         cfg->tap_3touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton3", DEFAULT_TAP_3TOUCH), 0, 32);
151         cfg->tap_4touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton4", DEFAULT_TAP_4TOUCH), 0, 32);
152         cfg->tap_hold = MAXVAL(xf86SetIntOption(opts, "ClickTime", DEFAULT_TAP_HOLD), 1);
153         cfg->tap_timeout = MAXVAL(xf86SetIntOption(opts, "MaxTapTime", DEFAULT_TAP_TIMEOUT), 1);
154         cfg->tap_dist = MAXVAL(xf86SetIntOption(opts, "MaxTapMove", DEFAULT_TAP_DIST), 1);
155         cfg->gesture_hold = MAXVAL(xf86SetIntOption(opts, "GestureClickTime", DEFAULT_GESTURE_HOLD), 1);
156         cfg->gesture_wait = MAXVAL(xf86SetIntOption(opts, "GestureWaitTime", DEFAULT_GESTURE_WAIT), 0);
157         cfg->scroll_dist = MAXVAL(xf86SetIntOption(opts, "ScrollDistance", DEFAULT_SCROLL_DIST), 1);
158         cfg->scroll_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollUpButton", DEFAULT_SCROLL_UP_BTN), 0, 32);
159         cfg->scroll_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollDownButton", DEFAULT_SCROLL_DN_BTN), 0, 32);
160         cfg->scroll_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollLeftButton", DEFAULT_SCROLL_LT_BTN), 0, 32);
161         cfg->scroll_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollRightButton", DEFAULT_SCROLL_RT_BTN), 0, 32);
162         cfg->swipe_dist = MAXVAL(xf86SetIntOption(opts, "SwipeDistance", DEFAULT_SWIPE_DIST), 1);
163         cfg->swipe_up_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeUpButton", DEFAULT_SWIPE_UP_BTN), 0, 32);
164         cfg->swipe_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeDownButton", DEFAULT_SWIPE_DN_BTN), 0, 32);
165         cfg->swipe_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeLeftButton", DEFAULT_SWIPE_LT_BTN), 0, 32);
166         cfg->swipe_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeRightButton", DEFAULT_SWIPE_RT_BTN), 0, 32);
167         cfg->swipe4_dist = MAXVAL(xf86SetIntOption(opts, "Swipe4Distance", DEFAULT_SWIPE4_DIST), 1);
168         cfg->swipe4_up_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4UpButton", DEFAULT_SWIPE4_UP_BTN), 0, 32);
169         cfg->swipe4_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4DownButton", DEFAULT_SWIPE4_DN_BTN), 0, 32);
170         cfg->swipe4_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4LeftButton", DEFAULT_SWIPE4_LT_BTN), 0, 32);
171         cfg->swipe4_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4RightButton", DEFAULT_SWIPE4_RT_BTN), 0, 32);
172         cfg->scale_dist = MAXVAL(xf86SetIntOption(opts, "ScaleDistance", DEFAULT_SCALE_DIST), 1);
173         cfg->scale_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleUpButton", DEFAULT_SCALE_UP_BTN), 0, 32);
174         cfg->scale_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleDownButton", DEFAULT_SCALE_DN_BTN), 0, 32);
175         cfg->rotate_dist = MAXVAL(xf86SetIntOption(opts, "RotateDistance", DEFAULT_ROTATE_DIST), 1);
176         cfg->rotate_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateLeftButton", DEFAULT_ROTATE_LT_BTN), 0, 32);
177         cfg->rotate_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateRightButton", DEFAULT_ROTATE_RT_BTN), 0, 23);
178         cfg->drag_enable = xf86SetBoolOption(opts, "TapDragEnable", DEFAULT_DRAG_ENABLE);
179         cfg->drag_timeout = MAXVAL(xf86SetIntOption(opts, "TapDragTime", DEFAULT_DRAG_TIMEOUT), 1);
180         cfg->drag_wait = MAXVAL(xf86SetIntOption(opts, "TapDragWait", DEFAULT_DRAG_WAIT), 0);
181         cfg->drag_dist = MAXVAL(xf86SetIntOption(opts, "TapDragDist", DEFAULT_DRAG_DIST), 0);
182         cfg->axis_x_invert = xf86SetBoolOption(opts, "AxisXInvert", DEFAULT_AXIS_X_INVERT);
183         cfg->axis_y_invert = xf86SetBoolOption(opts, "AxisYInvert", DEFAULT_AXIS_Y_INVERT);
184         cfg->sensitivity = MAXVAL(xf86SetRealOption(opts, "Sensitivity", DEFAULT_SENSITIVITY), 0);
185 }
186