]> git.mdlowis.com Git - proto/labwc.git/commitdiff
src/theme.c: support inline alpha encoding like #aabbccff
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Sun, 7 Apr 2024 15:25:40 +0000 (17:25 +0200)
committerJohan Malm <johanmalm@users.noreply.github.com>
Mon, 8 Apr 2024 20:05:05 +0000 (21:05 +0100)
.. and mark the current `#rrggbb aaa` encoding as deprecated.

docs/labwc-theme.5.scd
src/theme.c

index 614934d7a0a608cbe268cf66a7dbb78e83da325b..8a73e8c3cc665741dd7a045bda8dc919739e96d0 100644 (file)
@@ -34,7 +34,11 @@ labwc-config(5).
 *color*
        Colors can be specified by either of the following:
        - #rrggbb (hexadecimal RGB values)
-       - #rrggbb aaa (same but with decimal alpha value)
+       - #rrggbb aaa (same but with decimal alpha value percentage)
+       - #rrggbbaa (same but with inline alpha value in hex encoding)
+
+       Note: the #rrggbb aaa notation is deprecated starting from
+       labwc 0.7.2 and may be removed in future releases.
 
 *justification*
        Justification determines the horizontal alignment of text.
index d5b0d3b506aab81ad9879090b86e39b79dfa0d81..4a3efeaca13f2d9229b8eb2f24dec5f9bf90ae20 100644 (file)
@@ -404,15 +404,27 @@ parse_hexstr(const char *hex, float *rgba)
        rgba[0] = (hex_to_dec(hex[1]) * 16 + hex_to_dec(hex[2])) / 255.0;
        rgba[1] = (hex_to_dec(hex[3]) * 16 + hex_to_dec(hex[4])) / 255.0;
        rgba[2] = (hex_to_dec(hex[5]) * 16 + hex_to_dec(hex[6])) / 255.0;
-       if (strlen(hex) > 7) {
-               rgba[3] = atoi(hex + 7) / 100.0;
-               /* Pre-multiply everything as expected by wlr_scene */
-               rgba[0] *= rgba[3];
-               rgba[1] *= rgba[3];
-               rgba[2] *= rgba[3];
-       } else {
-               rgba[3] = 1.0;
-       }
+       rgba[3] = 1.0;
+
+       size_t len = strlen(hex);
+       if (len >= 9 && hex[7] == ' ') {
+               /* Deprecated #aabbcc 100 alpha encoding to support openbox themes */
+               rgba[3] = atoi(hex + 8) / 100.0;
+               wlr_log(WLR_ERROR,
+                       "The theme uses deprecated alpha notation %s, please convert to "
+                       "#rrggbbaa to ensure your config works on newer labwc releases", hex);
+       } else if (len == 9) {
+               /* Inline alpha encoding like #aabbccff */
+               rgba[3] = (hex_to_dec(hex[7]) * 16 + hex_to_dec(hex[8])) / 255.0;
+       } else if (len > 7) {
+               /* More than just #aabbcc */
+               wlr_log(WLR_ERROR, "invalid alpha color encoding: '%s'", hex);
+       }
+
+       /* Pre-multiply everything as expected by wlr_scene */
+       rgba[0] *= rgba[3];
+       rgba[1] *= rgba[3];
+       rgba[2] *= rgba[3];
 }
 
 static enum lab_justification