Compare commits

..

No commits in common. "da96513e70d6f3b9377cf78be5a5dab2cf82fcd1" and "5f981226c27d85a408341fb4edca6b5b9790ecf4" have entirely different histories.

8 changed files with 56 additions and 106 deletions

View file

@ -327,14 +327,6 @@ all are supported.
Border width of the selection box in the window switcher in pixels.
Default is 2.
*osd.window-switcher.style-classic.item.active.border.color*
Border color around the selected window switcher item.
Default is *osd.label.text.color* with 50% opacity.
*osd.window-switcher.style-classic.item.active.bg.color*
Background color of the selected window switcher item.
Default is *osd.label.text.color* with 15% opacity.
*osd.window-switcher.style-classic.item.icon.size*
Size of the icon in window switcher, in pixels.
If not set, the font size derived from <theme><font place="OnScreenDisplay">

View file

@ -97,8 +97,6 @@ osd.window-switcher.style-classic.padding: 4
osd.window-switcher.style-classic.item.padding.x: 10
osd.window-switcher.style-classic.item.padding.y: 1
osd.window-switcher.style-classic.item.active.border.width: 2
osd.window-switcher.style-classic.item.active.border.color: #706f6d
osd.window-switcher.style-classic.item.active.bg.color: #bfbcba
# The icon size the same as the font size by default
# osd.window-switcher.style-classic.item.icon.size: 50

View file

@ -170,8 +170,6 @@ struct theme {
int item_padding_x;
int item_padding_y;
int item_active_border_width;
float item_active_border_color[4];
float item_active_bg_color[4];
int item_icon_size;
bool width_is_percent;

View file

@ -482,13 +482,13 @@ fill_item(struct menu *menu, xmlNode *node)
goto out;
}
struct menuitem *item = item_create(menu, label, icon_name, false);
struct menuitem *item = item_create(menu, (char *)label, icon_name, false);
lab_xml_expand_dotted_attributes(node);
append_parsed_actions(node, &item->actions);
out:
xmlFree(label);
xmlFree(icon_name);
free(label);
free(icon_name);
}
static void
@ -619,10 +619,10 @@ fill_menu(struct server *server, struct menu *parent, xmlNode *n)
item->submenu = menu;
}
error:
xmlFree(label);
xmlFree(icon_name);
xmlFree(execute);
xmlFree(id);
free(label);
free(icon_name);
free(execute);
free(id);
}
/* This can be one of <separator> and <separator label=""> */
@ -631,7 +631,7 @@ fill_separator(struct menu *menu, xmlNode *n)
{
char *label = (char *)xmlGetProp(n, (const xmlChar *)"label");
separator_create(menu, label);
xmlFree(label);
free(label);
}
/* parent==NULL when processing toplevel menus in menu.xml */

View file

@ -19,59 +19,9 @@
struct osd_classic_scene_item {
struct view *view;
struct wlr_scene_tree *normal_tree, *active_tree;
struct wlr_scene_node *highlight_outline;
};
static void
create_fields_scene(struct server *server, struct view *view,
struct wlr_scene_tree *parent, const float *text_color,
const float *bg_color, int field_widths_sum, int x, int y)
{
struct theme *theme = server->theme;
struct window_switcher_classic_theme *switcher_theme =
&theme->osd_window_switcher_classic;
struct window_switcher_field *field;
wl_list_for_each(field, &rc.window_switcher.fields, link) {
int field_width = field_widths_sum * field->width / 100.0;
struct wlr_scene_node *node = NULL;
int height = -1;
if (field->content == LAB_FIELD_ICON) {
int icon_size = MIN(field_width,
switcher_theme->item_icon_size);
struct scaled_icon_buffer *icon_buffer =
scaled_icon_buffer_create(parent,
server, icon_size, icon_size);
scaled_icon_buffer_set_view(icon_buffer, view);
node = &icon_buffer->scene_buffer->node;
height = icon_size;
} else {
struct buf buf = BUF_INIT;
osd_field_get_content(field, &buf, view);
if (!string_null_or_empty(buf.data)) {
struct scaled_font_buffer *font_buffer =
scaled_font_buffer_create(parent);
scaled_font_buffer_update(font_buffer,
buf.data, field_width,
&rc.font_osd, text_color, bg_color);
node = &font_buffer->scene_buffer->node;
height = font_height(&rc.font_osd);
}
buf_reset(&buf);
}
if (node) {
int item_height = switcher_theme->item_height;
wlr_scene_node_set_position(node,
x, y + (item_height - height) / 2);
}
x += field_width + switcher_theme->item_padding_x;
}
}
static void
osd_classic_create(struct output *output, struct wl_array *views)
{
@ -176,33 +126,62 @@ osd_classic_create(struct output *output, struct wl_array *views)
+ switcher_theme->item_padding_x;
struct wlr_scene_tree *item_root =
wlr_scene_tree_create(output->osd_scene.tree);
item->normal_tree = wlr_scene_tree_create(item_root);
item->active_tree = wlr_scene_tree_create(item_root);
wlr_scene_node_set_enabled(&item->active_tree->node, false);
float *active_bg_color = switcher_theme->item_active_bg_color;
float *active_border_color = switcher_theme->item_active_border_color;
struct window_switcher_field *field;
wl_list_for_each(field, &rc.window_switcher.fields, link) {
int field_width = field_widths_sum * field->width / 100.0;
struct wlr_scene_node *node = NULL;
int height = -1;
if (field->content == LAB_FIELD_ICON) {
int icon_size = MIN(field_width,
switcher_theme->item_icon_size);
struct scaled_icon_buffer *icon_buffer =
scaled_icon_buffer_create(item_root,
server, icon_size, icon_size);
scaled_icon_buffer_set_view(icon_buffer, *view);
node = &icon_buffer->scene_buffer->node;
height = icon_size;
} else {
buf_clear(&buf);
osd_field_get_content(field, &buf, *view);
if (!string_null_or_empty(buf.data)) {
struct scaled_font_buffer *font_buffer =
scaled_font_buffer_create(item_root);
scaled_font_buffer_update(font_buffer,
buf.data, field_width,
&rc.font_osd, text_color, bg_color);
node = &font_buffer->scene_buffer->node;
height = font_height(&rc.font_osd);
}
}
if (node) {
int item_height = switcher_theme->item_height;
wlr_scene_node_set_position(node,
x, y + (item_height - height) / 2);
}
x += field_width + switcher_theme->item_padding_x;
}
/* Highlight around selected window's item */
int highlight_x = theme->osd_border_width
+ switcher_theme->padding;
struct lab_scene_rect_options highlight_opts = {
.border_colors = (float *[1]) {active_border_color},
.bg_color = active_bg_color,
.border_colors = (float *[1]) {text_color},
.nr_borders = 1,
.border_width = switcher_theme->item_active_border_width,
.width = w - 2 * theme->osd_border_width
- 2 * switcher_theme->padding,
.height = switcher_theme->item_height,
};
struct lab_scene_rect *highlight_rect = lab_scene_rect_create(
item->active_tree, &highlight_opts);
wlr_scene_node_set_position(&highlight_rect->tree->node, highlight_x, y);
create_fields_scene(server, *view, item->normal_tree,
text_color, bg_color, field_widths_sum, x, y);
create_fields_scene(server, *view, item->active_tree,
text_color, active_bg_color, field_widths_sum, x, y);
struct lab_scene_rect *highlight_rect = lab_scene_rect_create(
output->osd_scene.tree, &highlight_opts);
item->highlight_outline = &highlight_rect->tree->node;
wlr_scene_node_set_position(item->highlight_outline, highlight_x, y);
wlr_scene_node_set_enabled(item->highlight_outline, false);
y += switcher_theme->item_height;
}
@ -221,9 +200,8 @@ osd_classic_update(struct output *output)
{
struct osd_classic_scene_item *item;
wl_array_for_each(item, &output->osd_scene.items) {
bool active = item->view == output->server->osd_state.cycle_view;
wlr_scene_node_set_enabled(&item->normal_tree->node, !active);
wlr_scene_node_set_enabled(&item->active_tree->node, active);
wlr_scene_node_set_enabled(item->highlight_outline,
item->view == output->server->osd_state.cycle_view);
}
}

View file

@ -36,7 +36,7 @@ get_app_id_or_class(struct view *view, bool trim)
/* remove the first two nodes of 'org.' strings */
if (trim && !strncmp(identifier, "org.", 4)) {
const char *p = identifier + 4;
char *p = (char *)identifier + 4;
p = strchr(p, '.');
if (p) {
return ++p;

View file

@ -440,7 +440,7 @@ ssd_update_title(struct ssd *ssd)
}
struct view *view = ssd->view;
const char *title = view_get_string_prop(view, "title");
char *title = (char *)view_get_string_prop(view, "title");
if (string_null_or_empty(title)) {
return;
}

View file

@ -604,8 +604,6 @@ theme_builtin(struct theme *theme, struct server *server)
theme->osd_window_switcher_classic.item_padding_x = 10;
theme->osd_window_switcher_classic.item_padding_y = 1;
theme->osd_window_switcher_classic.item_active_border_width = 2;
theme->osd_window_switcher_classic.item_active_border_color[0] = FLT_MIN;
theme->osd_window_switcher_classic.item_active_bg_color[0] = FLT_MIN;
theme->osd_window_switcher_classic.item_icon_size = -1;
theme->osd_window_switcher_thumbnail.max_width = 80;
@ -991,12 +989,6 @@ entry(struct theme *theme, const char *key, const char *value)
get_int_if_positive(value,
"osd.window-switcher.style-classic.item.active.border.width");
}
if (match_glob(key, "osd.window-switcher.style-classic.item.active.border.color")) {
parse_color(value, switcher_classic_theme->item_active_border_color);
}
if (match_glob(key, "osd.window-switcher.style-classic.item.active.bg.color")) {
parse_color(value, switcher_classic_theme->item_active_bg_color);
}
if (match_glob(key, "osd.window-switcher.style-classic.item.icon.size")
|| match_glob(key, "osd.window-switcher.item.icon.size")) {
switcher_classic_theme->item_icon_size =
@ -1754,14 +1746,6 @@ post_processing(struct theme *theme)
memcpy(theme->osd_border_color, theme->osd_label_text_color,
sizeof(theme->osd_border_color));
}
if (switcher_classic_theme->item_active_border_color[0] == FLT_MIN) {
blend_color_with_bg(switcher_classic_theme->item_active_border_color,
theme->osd_label_text_color, 0.50, theme->osd_bg_color);
}
if (switcher_classic_theme->item_active_bg_color[0] == FLT_MIN) {
blend_color_with_bg(switcher_classic_theme->item_active_bg_color,
theme->osd_label_text_color, 0.15, theme->osd_bg_color);
}
if (switcher_thumb_theme->item_active_border_color[0] == FLT_MIN) {
blend_color_with_bg(switcher_thumb_theme->item_active_border_color,
theme->osd_label_text_color, 0.50, theme->osd_bg_color);