mirror of
https://github.com/labwc/labwc.git
synced 2025-10-31 22:25:34 -04:00
osd: add osd.window-switcher.item.icon.size
This allows users to make the icon in window switcher bigger (or smaller) than the font size, which enables more Openbox-like appearance. Example configuration: osd.window-switcher.item.icon.size: 50 This commit also makes the icon smaller than the font size if the width allocated with <windowSwitcher><fields><field width=""> is smaller than that.
This commit is contained in:
parent
d8bd8c5a3e
commit
6a04c5f0dd
5 changed files with 28 additions and 4 deletions
|
|
@ -256,6 +256,11 @@ all 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.window-switcher.item.icon.size*
|
||||||
|
Size of the icon in window switcher, in pixels.
|
||||||
|
If not set, the font size derived from <theme><font place="OnScreenDisplay">
|
||||||
|
is used.
|
||||||
|
|
||||||
*osd.window-switcher.preview.border.width*
|
*osd.window-switcher.preview.border.width*
|
||||||
Border width of the outlines shown as the preview of the window selected
|
Border width of the outlines shown as the preview of the window selected
|
||||||
by window switcher. Inherits *osd.border.width* if not set.
|
by window switcher. Inherits *osd.border.width* if not set.
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,8 @@ 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
|
||||||
|
# The icon size the same as the font size by default
|
||||||
|
# osd.window-switcher.item.icon.size: 50
|
||||||
osd.window-switcher.preview.border.width: 1
|
osd.window-switcher.preview.border.width: 1
|
||||||
osd.window-switcher.preview.border.color: #dddda6,#000000,#dddda6
|
osd.window-switcher.preview.border.color: #dddda6,#000000,#dddda6
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,7 @@ struct theme {
|
||||||
int osd_window_switcher_item_padding_x;
|
int osd_window_switcher_item_padding_x;
|
||||||
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_window_switcher_item_icon_size;
|
||||||
bool osd_window_switcher_width_is_percent;
|
bool osd_window_switcher_width_is_percent;
|
||||||
int osd_window_switcher_preview_border_width;
|
int osd_window_switcher_preview_border_width;
|
||||||
float osd_window_switcher_preview_border_color[3][4];
|
float osd_window_switcher_preview_border_color[3][4];
|
||||||
|
|
|
||||||
10
src/osd.c
10
src/osd.c
|
|
@ -6,6 +6,7 @@
|
||||||
#include "common/array.h"
|
#include "common/array.h"
|
||||||
#include "common/buf.h"
|
#include "common/buf.h"
|
||||||
#include "common/font.h"
|
#include "common/font.h"
|
||||||
|
#include "common/macros.h"
|
||||||
#include "common/scaled-font-buffer.h"
|
#include "common/scaled-font-buffer.h"
|
||||||
#include "common/scaled-icon-buffer.h"
|
#include "common/scaled-icon-buffer.h"
|
||||||
#include "common/scaled-rect-buffer.h"
|
#include "common/scaled-rect-buffer.h"
|
||||||
|
|
@ -352,15 +353,18 @@ create_osd_scene(struct output *output, struct wl_array *views)
|
||||||
* theme->osd_window_switcher_item_padding_x)
|
* theme->osd_window_switcher_item_padding_x)
|
||||||
* field->width / 100.0;
|
* field->width / 100.0;
|
||||||
struct wlr_scene_node *node = NULL;
|
struct wlr_scene_node *node = NULL;
|
||||||
|
int height = -1;
|
||||||
|
|
||||||
if (field->content == LAB_FIELD_ICON) {
|
if (field->content == LAB_FIELD_ICON) {
|
||||||
int icon_size = font_height(&rc.font_osd);
|
int icon_size = MIN(field_width,
|
||||||
|
theme->osd_window_switcher_item_icon_size);
|
||||||
struct scaled_icon_buffer *icon_buffer =
|
struct scaled_icon_buffer *icon_buffer =
|
||||||
scaled_icon_buffer_create(item_root,
|
scaled_icon_buffer_create(item_root,
|
||||||
server, icon_size, icon_size);
|
server, icon_size, icon_size);
|
||||||
scaled_icon_buffer_set_app_id(icon_buffer,
|
scaled_icon_buffer_set_app_id(icon_buffer,
|
||||||
view_get_string_prop(*view, "app_id"));
|
view_get_string_prop(*view, "app_id"));
|
||||||
node = &icon_buffer->scene_buffer->node;
|
node = &icon_buffer->scene_buffer->node;
|
||||||
|
height = icon_size;
|
||||||
} else {
|
} else {
|
||||||
buf_clear(&buf);
|
buf_clear(&buf);
|
||||||
osd_field_get_content(field, &buf, *view);
|
osd_field_get_content(field, &buf, *view);
|
||||||
|
|
@ -370,11 +374,11 @@ create_osd_scene(struct output *output, struct wl_array *views)
|
||||||
scaled_font_buffer_update(font_buffer, buf.data, field_width,
|
scaled_font_buffer_update(font_buffer, buf.data, field_width,
|
||||||
&rc.font_osd, text_color, bg_color);
|
&rc.font_osd, text_color, bg_color);
|
||||||
node = &font_buffer->scene_buffer->node;
|
node = &font_buffer->scene_buffer->node;
|
||||||
|
height = font_height(&rc.font_osd);
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_scene_node_set_position(node, x,
|
wlr_scene_node_set_position(node, x,
|
||||||
y + theme->osd_window_switcher_item_padding_y
|
y + (theme->osd_window_switcher_item_height - height) / 2);
|
||||||
+ theme->osd_window_switcher_item_active_border_width);
|
|
||||||
x += field_width + theme->osd_window_switcher_item_padding_x;
|
x += field_width + theme->osd_window_switcher_item_padding_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
14
src/theme.c
14
src/theme.c
|
|
@ -542,6 +542,7 @@ theme_builtin(struct theme *theme, struct server *server)
|
||||||
theme->osd_window_switcher_item_padding_x = 10;
|
theme->osd_window_switcher_item_padding_x = 10;
|
||||||
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_window_switcher_item_icon_size = -1;
|
||||||
|
|
||||||
/* inherit settings in post_processing() if not set elsewhere */
|
/* inherit settings in post_processing() if not set elsewhere */
|
||||||
theme->osd_window_switcher_preview_border_width = INT_MIN;
|
theme->osd_window_switcher_preview_border_width = INT_MIN;
|
||||||
|
|
@ -879,6 +880,11 @@ entry(struct theme *theme, const char *key, const char *value)
|
||||||
get_int_if_positive(
|
get_int_if_positive(
|
||||||
value, "osd.window-switcher.item.active.border.width");
|
value, "osd.window-switcher.item.active.border.width");
|
||||||
}
|
}
|
||||||
|
if (match_glob(key, "osd.window-switcher.item.icon.size")) {
|
||||||
|
theme->osd_window_switcher_item_icon_size =
|
||||||
|
get_int_if_positive(
|
||||||
|
value, "osd.window-switcher.item.icon.size");
|
||||||
|
}
|
||||||
if (match_glob(key, "osd.window-switcher.preview.border.width")) {
|
if (match_glob(key, "osd.window-switcher.preview.border.width")) {
|
||||||
theme->osd_window_switcher_preview_border_width =
|
theme->osd_window_switcher_preview_border_width =
|
||||||
get_int_if_positive(
|
get_int_if_positive(
|
||||||
|
|
@ -1380,7 +1386,13 @@ post_processing(struct theme *theme)
|
||||||
theme->menu_header_height = font_height(&rc.font_menuheader)
|
theme->menu_header_height = font_height(&rc.font_menuheader)
|
||||||
+ 2 * theme->menu_items_padding_y;
|
+ 2 * theme->menu_items_padding_y;
|
||||||
|
|
||||||
theme->osd_window_switcher_item_height = font_height(&rc.font_osd)
|
int osd_font_height = font_height(&rc.font_osd);
|
||||||
|
if (theme->osd_window_switcher_item_icon_size <= 0) {
|
||||||
|
theme->osd_window_switcher_item_icon_size = osd_font_height;
|
||||||
|
}
|
||||||
|
int osd_field_height =
|
||||||
|
MAX(osd_font_height, theme->osd_window_switcher_item_icon_size);
|
||||||
|
theme->osd_window_switcher_item_height = osd_field_height
|
||||||
+ 2 * theme->osd_window_switcher_item_padding_y
|
+ 2 * theme->osd_window_switcher_item_padding_y
|
||||||
+ 2 * theme->osd_window_switcher_item_active_border_width;
|
+ 2 * theme->osd_window_switcher_item_active_border_width;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue