No functional change.
int osd_window_switcher_item_active_border_width;
/* textures */
- struct lab_data_buffer *xbm_close_active_unpressed;
- struct lab_data_buffer *xbm_maximize_active_unpressed;
- struct lab_data_buffer *xbm_iconify_active_unpressed;
- struct lab_data_buffer *xbm_menu_active_unpressed;
-
- struct lab_data_buffer *xbm_close_inactive_unpressed;
- struct lab_data_buffer *xbm_maximize_inactive_unpressed;
- struct lab_data_buffer *xbm_iconify_inactive_unpressed;
- struct lab_data_buffer *xbm_menu_inactive_unpressed;
+ struct lab_data_buffer *button_close_active_unpressed;
+ struct lab_data_buffer *button_maximize_active_unpressed;
+ struct lab_data_buffer *button_iconify_active_unpressed;
+ struct lab_data_buffer *button_menu_active_unpressed;
+
+ struct lab_data_buffer *button_close_inactive_unpressed;
+ struct lab_data_buffer *button_maximize_inactive_unpressed;
+ struct lab_data_buffer *button_iconify_inactive_unpressed;
+ struct lab_data_buffer *button_menu_inactive_unpressed;
struct lab_data_buffer *corner_top_left_active_normal;
struct lab_data_buffer *corner_top_right_active_normal;
/**
* xbm_load - load theme xbm files into global theme struct
*/
-void xbm_load(struct theme *theme);
+void xbm_load_button(const char *filename, struct lab_data_buffer **buffer,
+ char *fallback_button, float *rgba);
#endif /* LABWC_XBM_H */
color = theme->window_active_title_bg_color;
corner_top_left = &theme->corner_top_left_active_normal->base;
corner_top_right = &theme->corner_top_right_active_normal->base;
- menu_button_unpressed = &theme->xbm_menu_active_unpressed->base;
- iconify_button_unpressed = &theme->xbm_iconify_active_unpressed->base;
- close_button_unpressed = &theme->xbm_close_active_unpressed->base;
- maximize_button_unpressed = &theme->xbm_maximize_active_unpressed->base;
+ menu_button_unpressed = &theme->button_menu_active_unpressed->base;
+ iconify_button_unpressed = &theme->button_iconify_active_unpressed->base;
+ close_button_unpressed = &theme->button_close_active_unpressed->base;
+ maximize_button_unpressed = &theme->button_maximize_active_unpressed->base;
} else {
color = theme->window_inactive_title_bg_color;
corner_top_left = &theme->corner_top_left_inactive_normal->base;
corner_top_right = &theme->corner_top_right_inactive_normal->base;
- menu_button_unpressed = &theme->xbm_menu_inactive_unpressed->base;
- iconify_button_unpressed = &theme->xbm_iconify_inactive_unpressed->base;
- maximize_button_unpressed = &theme->xbm_maximize_inactive_unpressed->base;
- close_button_unpressed = &theme->xbm_close_inactive_unpressed->base;
+ menu_button_unpressed = &theme->button_menu_inactive_unpressed->base;
+ iconify_button_unpressed = &theme->button_iconify_inactive_unpressed->base;
+ maximize_button_unpressed = &theme->button_maximize_inactive_unpressed->base;
+ close_button_unpressed = &theme->button_close_inactive_unpressed->base;
wlr_scene_node_set_enabled(&parent->node, false);
}
wl_list_init(&subtree->parts);
/*
* Theme engine for labwc
*
- * Copyright (C) Johan Malm 2020-2021
+ * Copyright (C) Johan Malm 2020-2023
*/
#define _POSIX_C_SOURCE 200809L
#include "buffer.h"
#include "ssd.h"
+struct button {
+ const char *name;
+ char fallback_button[6]; /* built-in 6x6 button */
+ struct {
+ struct lab_data_buffer **buffer;
+ float *rgba;
+ } active, inactive;
+};
+
+static void
+load_buttons(struct theme *theme)
+{
+ struct button buttons[] = {
+ {
+ "menu",
+ { 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00 },
+ {
+ &theme->button_menu_active_unpressed,
+ theme->window_active_button_menu_unpressed_image_color,
+ },
+ {
+ &theme->button_menu_inactive_unpressed,
+ theme->window_inactive_button_menu_unpressed_image_color,
+ },
+ },
+ {
+ "iconify",
+ { 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f },
+ {
+ &theme->button_iconify_active_unpressed,
+ theme->window_active_button_iconify_unpressed_image_color,
+ },
+ {
+ &theme->button_iconify_inactive_unpressed,
+ theme->window_inactive_button_iconify_unpressed_image_color,
+ },
+ },
+ {
+ "max",
+ { 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f },
+ {
+ &theme->button_maximize_active_unpressed,
+ theme->window_active_button_max_unpressed_image_color,
+ },
+ {
+ &theme->button_maximize_inactive_unpressed,
+ theme->window_inactive_button_max_unpressed_image_color,
+ },
+ },
+ {
+ "close",
+ { 0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 },
+ {
+ &theme->button_close_active_unpressed,
+ theme->window_active_button_close_unpressed_image_color,
+ },
+ {
+ &theme->button_close_inactive_unpressed,
+ theme->window_inactive_button_close_unpressed_image_color,
+ },
+ },
+ };
+
+ char filename[4096] = {0};
+ for (size_t i = 0; i < sizeof(buttons) / sizeof(buttons[0]); ++i) {
+ struct button *b = &buttons[i];
+ snprintf(filename, sizeof(filename), "%s.xbm", b->name);
+ xbm_load_button(filename, b->active.buffer, b->fallback_button, b->active.rgba);
+ xbm_load_button(filename, b->inactive.buffer, b->fallback_button, b->inactive.rgba);
+ }
+}
+
static int
hex_to_dec(char c)
{
post_processing(theme);
create_corners(theme);
- xbm_load(theme);
+ load_buttons(theme);
}
void
/*
* Create wlr textures based on xbm data
*
- * Copyright Johan Malm 2020
+ * Copyright Johan Malm 2020-2023
*/
#include <stdio.h>
#include "xbm/xbm.h"
#include "buffer.h"
-/* built-in 6x6 buttons */
-char menu_button_normal[] = { 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00 };
-char iconify_button_normal[] = { 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f };
-char max_button_normal[] = { 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };
-char max_button_toggled[] = { 0x3e, 0x22, 0x2f, 0x29, 0x39, 0x0f };
-char close_button_normal[] = { 0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 };
-
static char *
xbm_path(const char *button)
{
return buffer;
}
-static void
-load_button(const char *filename, struct lab_data_buffer **buffer, char *button)
+void
+xbm_load_button(const char *filename, struct lab_data_buffer **buffer,
+ char *fallback_button, float *rgba)
{
struct pixmap pixmap = {0};
if (*buffer) {
*buffer = NULL;
}
+ parse_set_color(rgba);
+
/* Read file into memory as it's easier to tokenzie that way */
char *token_buffer = grab_file(xbm_path(filename));
if (token_buffer) {
}
}
if (!pixmap.data) {
- pixmap = parse_xbm_builtin(button, 6);
+ pixmap = parse_xbm_builtin(fallback_button, 6);
}
/* Create buffer with free_on_destroy being true */
*buffer = buffer_create_wrap(pixmap.data, pixmap.width, pixmap.height,
pixmap.width * 4, true);
}
-
-void
-xbm_load(struct theme *theme)
-{
- parse_set_color(theme->window_active_button_menu_unpressed_image_color);
- load_button("menu.xbm",
- &theme->xbm_menu_active_unpressed, menu_button_normal);
- parse_set_color(theme->window_active_button_iconify_unpressed_image_color);
- load_button("iconify.xbm",
- &theme->xbm_iconify_active_unpressed, iconify_button_normal);
- parse_set_color(theme->window_active_button_max_unpressed_image_color);
- load_button("max.xbm",
- &theme->xbm_maximize_active_unpressed, max_button_normal);
- parse_set_color(theme->window_active_button_close_unpressed_image_color);
- load_button("close.xbm",
- &theme->xbm_close_active_unpressed, close_button_normal);
-
- parse_set_color(theme->window_inactive_button_menu_unpressed_image_color);
- load_button("menu.xbm",
- &theme->xbm_menu_inactive_unpressed, menu_button_normal);
- parse_set_color(theme->window_inactive_button_iconify_unpressed_image_color);
- load_button("iconify.xbm",
- &theme->xbm_iconify_inactive_unpressed, iconify_button_normal);
- parse_set_color(theme->window_inactive_button_max_unpressed_image_color);
- load_button("max.xbm",
- &theme->xbm_maximize_inactive_unpressed, max_button_normal);
- parse_set_color(theme->window_inactive_button_close_unpressed_image_color);
- load_button("close.xbm",
- &theme->xbm_close_inactive_unpressed, close_button_normal);
-}