From: Jens Peters Date: Mon, 1 Jan 2024 17:26:38 +0000 (+0100) Subject: config: add tablet area configuration X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=f0abd9304f0d3d42be0137dc53c0758b82eabc2d;p=proto%2Flabwc.git config: add tablet area configuration --- diff --git a/docs/rc.xml.all b/docs/rc.xml.all index 7e6d6530..9cc6dd0a 100644 --- a/docs/rc.xml.all +++ b/docs/rc.xml.all @@ -394,14 +394,22 @@ + + diff --git a/include/config/rcxml.h b/include/config/rcxml.h index 2fa7463a..d03e4a74 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -89,6 +89,7 @@ struct rcxml { /* graphics tablet */ struct tablet_config { + struct wlr_fbox box; enum rotation rotation; uint16_t button_map_count; struct button_map_entry button_map[BUTTON_MAP_MAX]; diff --git a/include/config/tablet.h b/include/config/tablet.h index c5b90b93..0ba6a87b 100644 --- a/include/config/tablet.h +++ b/include/config/tablet.h @@ -17,6 +17,7 @@ struct button_map_entry { uint32_t to; }; +double tablet_get_dbl_if_positive(const char *content, const char *name); enum rotation tablet_parse_rotation(int value); uint32_t tablet_button_from_str(const char *button); uint32_t mouse_button_from_str(const char *button); diff --git a/src/config/rcxml.c b/src/config/rcxml.c index c649ad8b..54aacb9c 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -854,6 +854,14 @@ entry(xmlNode *node, char *nodename, char *content) } else { wlr_log(WLR_ERROR, "Invalid value for "); } + } else if (!strcasecmp(nodename, "left.area.tablet")) { + rc.tablet.box.x = tablet_get_dbl_if_positive(content, "left"); + } else if (!strcasecmp(nodename, "top.area.tablet")) { + rc.tablet.box.y = tablet_get_dbl_if_positive(content, "top"); + } else if (!strcasecmp(nodename, "width.area.tablet")) { + rc.tablet.box.width = tablet_get_dbl_if_positive(content, "width"); + } else if (!strcasecmp(nodename, "height.area.tablet")) { + rc.tablet.box.height = tablet_get_dbl_if_positive(content, "height"); } else if (!strcasecmp(nodename, "rotate.tablet")) { rc.tablet.rotation = tablet_parse_rotation(atoi(content)); } else if (!strcasecmp(nodename, "button.map.tablet")) { @@ -1027,7 +1035,7 @@ rcxml_init(void) rc.doubleclick_time = 500; rc.scroll_factor = 1.0; - rc.tablet.button_map_count = 0; + rc.tablet.box = (struct wlr_fbox){0}; tablet_load_default_button_mappings(); rc.repeat_rate = 25; diff --git a/src/config/tablet.c b/src/config/tablet.c index 4c2c5846..7c6ee2f1 100644 --- a/src/config/tablet.c +++ b/src/config/tablet.c @@ -7,6 +7,17 @@ #include "config/tablet.h" #include "config/rcxml.h" +double +tablet_get_dbl_if_positive(const char *content, const char *name) +{ + double value = atof(content); + if (value < 0) { + wlr_log(WLR_ERROR, "Invalid value for tablet area %s", name); + return 0; + } + return value; +} + enum rotation tablet_parse_rotation(int value) { @@ -84,6 +95,7 @@ tablet_button_mapping_add(uint32_t from, uint32_t to) void tablet_load_default_button_mappings(void) { + rc.tablet.button_map_count = 0; tablet_button_mapping_add(BTN_TOOL_PEN, BTN_LEFT); /* Used for the pen tip */ tablet_button_mapping_add(BTN_STYLUS, BTN_RIGHT); tablet_button_mapping_add(BTN_STYLUS2, BTN_MIDDLE);