namespace
{
char const* const disable_while_typing_opt = "disable-while-typing";
char const* const mouse_acceleration_opt = "mouse-acceleration";
char const* const acceleration_none = "none";
char const* const acceleration_adaptive = "adaptive";
char const* const mouse_cursor_acceleration_bias_opt = "mouse-cursor-acceleration-bias";
char const* const mouse_scroll_speed_scale_opt = "mouse-scroll-speed-scale";
char const* const touchpad_cursor_acceleration_bias_opt = "touchpad-cursor-acceleration-bias";
char const* const touchpad_scroll_speed_scale_opt = "touchpad-scroll-speed-scale";
char const* const touchpad_scroll_mode_opt = "touchpad-scroll-mode";
char const* const touchpad_scroll_mode_two_finger = "two-finger";
char const* const touchpad_scroll_mode_edge = "edge";
char const* const touchpad_click_mode_opt= "touchpad-click-mode";
char const* const touchpad_click_mode_area = "area";
char const* const touchpad_click_mode_finger_count = "finger-count";
}
{
"Disable touchpad while typing on keyboard configuration [true, false]",
false);
"Select acceleration profile for mice and trackballs [none, adaptive]",
acceleration_adaptive);
"Constant factor (+1) to velocity or bias to the acceleration curve within the range [-1.0, 1.0] for mice",
0.0);
"Scales mice scroll events, use negative values for natural scrolling",
1.0);
"Constant factor (+1) to velocity or bias to the acceleration curve within the range [-1.0, 1.0] for touchpads",
0.0);
"Scales touchpad scroll events, use negative values for natural scrolling",
-1.0);
"Select scroll mode for touchpads: [{two-finger, edge}]",
touchpad_scroll_mode_two_finger);
"Select click mode for touchpads: [{area, finger-count}]",
touchpad_click_mode_finger_count);
auto clamp_to_range = [](double val)
{
if (val < -1.0)
val = -1.0;
else if (val > 1.0)
val = 1.0;
return val;
};
auto convert_to_scroll_mode = [](std::string const& val)
{
if (val == touchpad_scroll_mode_edge)
if (val == touchpad_scroll_mode_two_finger)
};
auto to_profile = [](std::string const& val)
{
if (val == acceleration_none)
};
auto convert_to_click_mode = [](std::string const& val)
{
if (val == touchpad_click_mode_finger_count)
if (val == touchpad_click_mode_area)
};
{
auto const input_config = std::make_shared<me::InputDeviceConfig>(
options->get<bool>(disable_while_typing_opt),
to_profile(options->get<std::string>(mouse_acceleration_opt)),
clamp_to_range(options->get<double>(mouse_cursor_acceleration_bias_opt)),
options->get<double>(mouse_scroll_speed_scale_opt),
clamp_to_range(options->get<double>(touchpad_cursor_acceleration_bias_opt)),
options->get<double>(touchpad_scroll_speed_scale_opt),
convert_to_click_mode(options->get<std::string>(touchpad_click_mode_opt)),
convert_to_scroll_mode(options->get<std::string>(touchpad_scroll_mode_opt))
);
});
}
double mouse_cursor_acceleration_bias,
double mouse_scroll_speed_scale,
double touchpad_cursor_acceleration_bias,
double touchpad_scroll_speed_scale,
: disable_while_typing(disable_while_typing), mouse_profile{mouse_profile},
mouse_cursor_acceleration_bias(mouse_cursor_acceleration_bias),
mouse_scroll_speed_scale(mouse_scroll_speed_scale),
touchpad_cursor_acceleration_bias(touchpad_cursor_acceleration_bias),
touchpad_scroll_speed_scale(touchpad_scroll_speed_scale), click_mode(click_mode), scroll_mode(scroll_mode)
{
}
{
{
pointer_config.vertical_scroll_scale = touchpad_scroll_speed_scale;
pointer_config.horizontal_scroll_scale = touchpad_scroll_speed_scale;
device->apply_pointer_configuration(pointer_config);
touch_config.click_mode = click_mode;
touch_config.scroll_mode = scroll_mode;
device->apply_touchpad_configuration(touch_config);
}
{
pointer_config.cursor_acceleration_bias = mouse_cursor_acceleration_bias;
pointer_config.vertical_scroll_scale = mouse_scroll_speed_scale;
pointer_config.horizontal_scroll_scale = mouse_scroll_speed_scale;
device->apply_pointer_configuration(pointer_config);
}
}