From 05c89f18fbb371fbeb4a1a6224f0ccfd1275e53a Mon Sep 17 00:00:00 2001 From: Simon Long Date: Fri, 3 May 2024 11:23:00 +0100 Subject: [PATCH] Add setting of border width and colour --- docs/rc.xml.all | 10 ++++++++-- include/config/rcxml.h | 8 ++++++++ src/common/scene-helpers.c | 18 ++++++++++-------- src/config/rcxml.c | 26 ++++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/docs/rc.xml.all b/docs/rc.xml.all index b9361365..0dd10192 100644 --- a/docs/rc.xml.all +++ b/docs/rc.xml.all @@ -589,12 +589,18 @@ - 2 400 + 2 + #ff0000 + 1 diff --git a/include/config/rcxml.h b/include/config/rcxml.h index 8b4bc983..04ac756a 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -41,6 +41,12 @@ struct usable_area_override { struct wl_list link; /* struct rcxml.usable_area_overrides */ }; +struct rgb_colour { + int r; + int g; + int b; +}; + struct rcxml { /* from command line */ char *config_dir; @@ -141,6 +147,8 @@ struct rcxml { /* magnifier */ int mag_scale; int mag_size; + struct rgb_colour mag_border_col; + int mag_border_width; }; extern struct rcxml rc; diff --git a/src/common/scene-helpers.c b/src/common/scene-helpers.c index 944dad7e..342a925b 100644 --- a/src/common/scene-helpers.c +++ b/src/common/scene-helpers.c @@ -43,9 +43,6 @@ lab_wlr_scene_get_prev_node(struct wlr_scene_node *node) } -/* TODO: move to rc. (or theme?) settings */ -#define magnifier_border 1 /* in pixels */ - static void magnify(struct output *output, struct wlr_buffer *output_buffer, struct wlr_box *damage) { @@ -152,15 +149,20 @@ magnify(struct output *output, struct wlr_buffer *output_buffer, struct wlr_box /* Borders */ struct wlr_box border_box = { - .x = ox - (width / 2 + magnifier_border), - .y = oy - (height / 2 + magnifier_border), - .width = (width + magnifier_border * 2), - .height = (height + magnifier_border * 2), + .x = ox - (width / 2 + rc.mag_border_width), + .y = oy - (height / 2 + rc.mag_border_width), + .width = (width + rc.mag_border_width * 2), + .height = (height + rc.mag_border_width * 2), }; struct wlr_render_rect_options bg_opts = { .box = border_box, /* TODO: make this a rc. setting */ - .color = (struct wlr_render_color) { 1, 0, 0, 1 }, + .color = (struct wlr_render_color) { + .r = rc.mag_border_col.r / 255.0, + .g = rc.mag_border_col.g / 255.0, + .b = rc.mag_border_col.b / 255.0, + .a = 1 + }, .clip = NULL, }; wlr_render_pass_add_rect(tmp_render_pass, &bg_opts); diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 461d33f5..370c5c49 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -746,6 +746,19 @@ set_adaptive_sync_mode(const char *str, enum adaptive_sync_mode *variable) } } +static bool parse_rgb(const char *str, int *r, int *g, int *b) +{ + int rr, rg, rb; + if (!str) return false; + if (strlen(str) != 7) return false; + if (str[0] != '#') return false; + if (sscanf(str, "#%2X%2X%2X", &rr, &rg, &rb) != 3) return false; + *r = rr; + *g = rg; + *b = rb; + return true; +} + static void entry(xmlNode *node, char *nodename, char *content) { @@ -1034,10 +1047,15 @@ entry(xmlNode *node, char *nodename, char *content) } else { wlr_log(WLR_ERROR, "Missing 'button' argument for tablet button mapping"); } - } else if (!strcasecmp(nodename, "scale.magnifier")) { - rc.mag_scale = atoi(content); } else if (!strcasecmp(nodename, "size.magnifier")) { rc.mag_size = atoi(content); + } else if (!strcasecmp(nodename, "initScale.magnifier")) { + rc.mag_scale = atoi(content); + } else if (!strcasecmp(nodename, "borderColour.magnifier")) { + parse_rgb(content, &rc.mag_border_col.r, &rc.mag_border_col.g, + &rc.mag_border_col.b); + } else if (!strcasecmp(nodename, "borderWidth.magnifier")) { + rc.mag_border_width = atoi(content); } } @@ -1245,6 +1263,10 @@ rcxml_init(void) rc.mag_scale = 2; rc.mag_size = 400; + rc.mag_border_col.r = 255; + rc.mag_border_col.g = 0; + rc.mag_border_col.b = 0; + rc.mag_border_width = 1; } static void