mirror of
https://github.com/labwc/labwc.git
synced 2025-10-31 22:25:34 -04:00
Add theme option to configure boxes from workspace OSD
This allows to configure width and height of "boxes" displayed in the workspace OSD. A setting of `0` disables the boxes.
This commit is contained in:
parent
45e0dad3f1
commit
268191fce8
5 changed files with 51 additions and 14 deletions
|
|
@ -174,6 +174,12 @@ elements are not listed here, but are supported.
|
||||||
Border width of the selection box in the window switcher in pixels.
|
Border width of the selection box in the window switcher in pixels.
|
||||||
Default is 2.
|
Default is 2.
|
||||||
|
|
||||||
|
*osd.workspace-switcher.boxes.width*
|
||||||
|
Width of boxes in workspace switcher in pixels. Setting to 0 disables boxes. Default is 20.
|
||||||
|
|
||||||
|
*osd.workspace-switcher.boxes.height*
|
||||||
|
Height of boxes in workspace switcher in pixels. Setting to 0 disables boxes. Default is 20.
|
||||||
|
|
||||||
*border.color*
|
*border.color*
|
||||||
Set all border colors. This is obsolete, but supported for backward
|
Set all border colors. This is obsolete, but supported for backward
|
||||||
compatibility as some themes still contain it.
|
compatibility as some themes still contain it.
|
||||||
|
|
|
||||||
|
|
@ -65,3 +65,6 @@ osd.window-switcher.padding: 4
|
||||||
osd.window-switcher.item.padding.x: 10
|
osd.window-switcher.item.padding.x: 10
|
||||||
osd.window-switcher.item.padding.y: 1
|
osd.window-switcher.item.padding.y: 1
|
||||||
osd.window-switcher.item.active.border.width: 2
|
osd.window-switcher.item.active.border.width: 2
|
||||||
|
|
||||||
|
osd.workspace-switcher.boxes.width: 20
|
||||||
|
osd.workspace-switcher.boxes.height: 20
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,9 @@ struct theme {
|
||||||
int osd_window_switcher_item_padding_y;
|
int osd_window_switcher_item_padding_y;
|
||||||
int osd_window_switcher_item_active_border_width;
|
int osd_window_switcher_item_active_border_width;
|
||||||
|
|
||||||
|
int osd_workspace_switcher_boxes_width;
|
||||||
|
int osd_workspace_switcher_boxes_height;
|
||||||
|
|
||||||
/* textures */
|
/* textures */
|
||||||
struct lab_data_buffer *button_close_active_unpressed;
|
struct lab_data_buffer *button_close_active_unpressed;
|
||||||
struct lab_data_buffer *button_maximize_active_unpressed;
|
struct lab_data_buffer *button_maximize_active_unpressed;
|
||||||
|
|
|
||||||
15
src/theme.c
15
src/theme.c
|
|
@ -326,6 +326,9 @@ theme_builtin(struct theme *theme)
|
||||||
theme->osd_window_switcher_item_padding_y = 1;
|
theme->osd_window_switcher_item_padding_y = 1;
|
||||||
theme->osd_window_switcher_item_active_border_width = 2;
|
theme->osd_window_switcher_item_active_border_width = 2;
|
||||||
|
|
||||||
|
theme->osd_workspace_switcher_boxes_width = 20;
|
||||||
|
theme->osd_workspace_switcher_boxes_height = 20;
|
||||||
|
|
||||||
/* inherit settings in post_processing() if not set elsewhere */
|
/* inherit settings in post_processing() if not set elsewhere */
|
||||||
theme->osd_bg_color[0] = FLT_MIN;
|
theme->osd_bg_color[0] = FLT_MIN;
|
||||||
theme->osd_border_width = INT_MIN;
|
theme->osd_border_width = INT_MIN;
|
||||||
|
|
@ -512,6 +515,12 @@ entry(struct theme *theme, const char *key, const char *value)
|
||||||
if (match_glob(key, "osd.window-switcher.item.active.border.width")) {
|
if (match_glob(key, "osd.window-switcher.item.active.border.width")) {
|
||||||
theme->osd_window_switcher_item_active_border_width = atoi(value);
|
theme->osd_window_switcher_item_active_border_width = atoi(value);
|
||||||
}
|
}
|
||||||
|
if (match_glob(key, "osd.workspace-switcher.boxes.width")) {
|
||||||
|
theme->osd_workspace_switcher_boxes_width = atoi(value);
|
||||||
|
}
|
||||||
|
if (match_glob(key, "osd.workspace-switcher.boxes.height")) {
|
||||||
|
theme->osd_workspace_switcher_boxes_height = atoi(value);
|
||||||
|
}
|
||||||
if (match_glob(key, "osd.label.text.color")) {
|
if (match_glob(key, "osd.label.text.color")) {
|
||||||
parse_hexstr(value, theme->osd_label_text_color);
|
parse_hexstr(value, theme->osd_label_text_color);
|
||||||
}
|
}
|
||||||
|
|
@ -860,6 +869,12 @@ post_processing(struct theme *theme)
|
||||||
memcpy(theme->osd_border_color, theme->osd_label_text_color,
|
memcpy(theme->osd_border_color, theme->osd_label_text_color,
|
||||||
sizeof(theme->osd_border_color));
|
sizeof(theme->osd_border_color));
|
||||||
}
|
}
|
||||||
|
if (theme->osd_workspace_switcher_boxes_width == 0) {
|
||||||
|
theme->osd_workspace_switcher_boxes_height = 0;
|
||||||
|
}
|
||||||
|
if (theme->osd_workspace_switcher_boxes_height == 0) {
|
||||||
|
theme->osd_workspace_switcher_boxes_width = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -60,14 +60,16 @@ _osd_update(struct server *server)
|
||||||
/* Settings */
|
/* Settings */
|
||||||
uint16_t margin = 10;
|
uint16_t margin = 10;
|
||||||
uint16_t padding = 2;
|
uint16_t padding = 2;
|
||||||
uint16_t rect_height = 20;
|
uint16_t rect_height = theme->osd_workspace_switcher_boxes_height;
|
||||||
uint16_t rect_width = 20;
|
uint16_t rect_width = theme->osd_workspace_switcher_boxes_width;
|
||||||
|
bool hide_boxes = theme->osd_workspace_switcher_boxes_width == 0 ||
|
||||||
|
theme->osd_workspace_switcher_boxes_height == 0;
|
||||||
|
|
||||||
/* Dimensions */
|
/* Dimensions */
|
||||||
size_t workspace_count = wl_list_length(&server->workspaces);
|
size_t workspace_count = wl_list_length(&server->workspaces);
|
||||||
uint16_t marker_width = workspace_count * (rect_width + padding) - padding;
|
uint16_t marker_width = workspace_count * (rect_width + padding) - padding;
|
||||||
uint16_t width = margin * 2 + (marker_width < 200 ? 200 : marker_width);
|
uint16_t width = margin * 2 + (marker_width < 200 ? 200 : marker_width);
|
||||||
uint16_t height = margin * 3 + rect_height + font_height(&rc.font_osd);
|
uint16_t height = margin * (hide_boxes ? 2 : 3) + rect_height + font_height(&rc.font_osd);
|
||||||
|
|
||||||
cairo_t *cairo;
|
cairo_t *cairo;
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
|
|
@ -100,19 +102,23 @@ _osd_update(struct server *server)
|
||||||
};
|
};
|
||||||
draw_cairo_border(cairo, fbox, theme->osd_border_width);
|
draw_cairo_border(cairo, fbox, theme->osd_border_width);
|
||||||
|
|
||||||
uint16_t x = (width - marker_width) / 2;
|
/* Boxes */
|
||||||
wl_list_for_each(workspace, &server->workspaces, link) {
|
uint16_t x;
|
||||||
bool active = workspace == server->workspace_current;
|
if (!hide_boxes) {
|
||||||
set_cairo_color(cairo, server->theme->osd_label_text_color);
|
x = (width - marker_width) / 2;
|
||||||
cairo_rectangle(cairo, x, margin,
|
wl_list_for_each(workspace, &server->workspaces, link) {
|
||||||
rect_width - padding, rect_height);
|
bool active = workspace == server->workspace_current;
|
||||||
cairo_stroke(cairo);
|
set_cairo_color(cairo, server->theme->osd_label_text_color);
|
||||||
if (active) {
|
|
||||||
cairo_rectangle(cairo, x, margin,
|
cairo_rectangle(cairo, x, margin,
|
||||||
rect_width - padding, rect_height);
|
rect_width - padding, rect_height);
|
||||||
cairo_fill(cairo);
|
cairo_stroke(cairo);
|
||||||
|
if (active) {
|
||||||
|
cairo_rectangle(cairo, x, margin,
|
||||||
|
rect_width - padding, rect_height);
|
||||||
|
cairo_fill(cairo);
|
||||||
|
}
|
||||||
|
x += rect_width + padding;
|
||||||
}
|
}
|
||||||
x += rect_width + padding;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Text */
|
/* Text */
|
||||||
|
|
@ -127,7 +133,11 @@ _osd_update(struct server *server)
|
||||||
/* Center workspace indicator on the x axis */
|
/* Center workspace indicator on the x axis */
|
||||||
x = font_width(&rc.font_osd, server->workspace_current->name);
|
x = font_width(&rc.font_osd, server->workspace_current->name);
|
||||||
x = (width - x) / 2;
|
x = (width - x) / 2;
|
||||||
cairo_move_to(cairo, x, margin * 2 + rect_height);
|
if (!hide_boxes) {
|
||||||
|
cairo_move_to(cairo, x, margin * 2 + rect_height);
|
||||||
|
} else {
|
||||||
|
cairo_move_to(cairo, x, (height - font_height(&rc.font_osd)) / 2.0);
|
||||||
|
}
|
||||||
//pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
|
//pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
|
||||||
pango_layout_set_font_description(layout, desc);
|
pango_layout_set_font_description(layout, desc);
|
||||||
pango_font_description_free(desc);
|
pango_font_description_free(desc);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue