]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Support icon colors
authorJohan Malm <jgm323@gmail.com>
Fri, 21 Aug 2020 18:43:34 +0000 (19:43 +0100)
committerJohan Malm <jgm323@gmail.com>
Fri, 21 Aug 2020 18:43:34 +0000 (19:43 +0100)
xbm/parse: support specifiying color when loading icon
theme.c: parse window.active.button.unpressed.image.color

include/theme/theme.h
include/theme/xbm/parse.h
src/theme/theme.c
src/theme/xbm/parse.c
src/theme/xbm/xbm.c

index 1478624ed3b7ff947e5fb5b2bf255c997061db8c..558f6df135d1230455cff32acd81b903cbd419ba 100644 (file)
@@ -14,6 +14,7 @@ struct theme {
        float window_active_title_bg_color[4];
        float window_active_handle_bg_color[4];
        float window_inactive_title_bg_color[4];
+       float window_active_button_unpressed_image_color[4];
        struct wlr_texture *xbm_close;
        struct wlr_texture *xbm_maximize;
        struct wlr_texture *xbm_iconify;
index bd09d8d9b81167d45f19e3dfd8dce563422b2243..4bd4c942cd7fefc9ecd91ebb77bef7f21033a914 100644 (file)
@@ -16,6 +16,12 @@ struct pixmap {
        int height;
 };
 
+/**
+ * parse_set_color - set color to be used when parsing icons
+ * @rgba: four floats representing red, green, blue, alpha
+ */
+void parse_set_color(float *rgba);
+
 /**
  * parse_xbm_tokens - parse xbm tokens and create pixmap
  * @tokens: token vector
index 8124cc1842bfea380fd87a12766243a9ad9f9ec9..9a016707630bea621a8bbeaf5538a0171f3eb899 100644 (file)
@@ -49,6 +49,8 @@ static void entry(const char *key, const char *value)
                parse_hexstr(value, theme.window_active_handle_bg_color);
        if (match(key, "window.inactive.title.bg.color"))
                parse_hexstr(value, theme.window_inactive_title_bg_color);
+       if (match(key, "window.active.button.unpressed.image.color"))
+               parse_hexstr(value, theme.window_active_button_unpressed_image_color);
 }
 
 static void rtrim(char **s)
index a171428e0bc7036ddf6765da895ecd97a5b02dd2..dae2ced019cf8a70939155fcb664138be768a2a1 100644 (file)
 #include "theme/xbm/parse.h"
 #include "common/bug-on.h"
 
-/* TODO: should be window.active.button.unpressed.image.color */
-static unsigned char defaultcolor[] = { 255, 255, 255, 255 };
+static uint32_t color;
 
-static uint32_t u32(unsigned char *rgba)
+static uint32_t u32(float *rgba)
 {
        uint32_t r[4] = { 0 };
        for (int i = 0; i < 4; i++)
-               r[i] = rgba[i];
-       return ((r[3] & 0xff) << 24) | ((r[2] & 0xff) << 16) |
-              ((r[1] & 0xff) << 8) | (r[0] & 0xff);
+               r[i] = rgba[i] * 255;
+       return ((r[3] & 0xff) << 24) | ((r[0] & 0xff) << 16) |
+              ((r[1] & 0xff) << 8) | (r[2] & 0xff);
+}
+
+void parse_set_color(float *rgba)
+{
+       color = u32(rgba);
 }
 
 static void process_bytes(struct pixmap *pixmap, struct token *tokens)
@@ -44,8 +48,7 @@ static void process_bytes(struct pixmap *pixmap, struct token *tokens)
                                return;
                        int bit = 1 << (col % 8);
                        if (t->value & bit)
-                               pixmap->data[row * pixmap->width + col] =
-                                       u32(defaultcolor);
+                               pixmap->data[row * pixmap->width + col] = color;
                }
                ++t;
        }
index 6ad0d1ebd948b1786cf8ea5d4bab4ec0075c0e8f..d1b2969b73449e6a631c19b6dc2d36b18bef28ef 100644 (file)
@@ -71,8 +71,8 @@ out:
 
 void xbm_load(struct wlr_renderer *r)
 {
+       parse_set_color(theme.window_active_button_unpressed_image_color);
        load_button(r, "close.xbm", &theme.xbm_close, close_button_normal);
        load_button(r, "max.xbm", &theme.xbm_maximize, max_button_normal);
-       load_button(r, "iconify.xbm", &theme.xbm_iconify,
-                   iconify_button_normal);
+       load_button(r, "iconify.xbm", &theme.xbm_iconify, iconify_button_normal);
 }