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