ssd: respect logical size when displaying window icon

get_scale_box() was using the raw pixel size of the icon buffer for
layout, which caused the icon to be incorrectly scaled up if the buffer
scale was >1.
This commit is contained in:
John Lindgren 2024-10-06 21:29:40 -04:00
parent ddfaae98ad
commit 465aac5514
3 changed files with 9 additions and 9 deletions

View file

@ -149,7 +149,7 @@ struct ssd_part *add_scene_button(struct wl_list *part_list,
struct lab_data_buffer *buffers[LAB_BS_ALL + 1], int x, struct lab_data_buffer *buffers[LAB_BS_ALL + 1], int x,
struct view *view); struct view *view);
void update_window_icon_buffer(struct wlr_scene_node *button_node, void update_window_icon_buffer(struct wlr_scene_node *button_node,
struct wlr_buffer *buffer); struct lab_data_buffer *buffer);
/* SSD internal helpers */ /* SSD internal helpers */
struct ssd_part *ssd_get_part( struct ssd_part *ssd_get_part(

View file

@ -80,12 +80,12 @@ add_scene_buffer(struct wl_list *list, enum ssd_part_type type,
} }
static struct wlr_box static struct wlr_box
get_scale_box(struct wlr_buffer *buffer, double container_width, get_scale_box(struct lab_data_buffer *buffer, double container_width,
double container_height) double container_height)
{ {
struct wlr_box icon_geo = { struct wlr_box icon_geo = {
.width = buffer->width, .width = buffer->logical_width,
.height = buffer->height .height = buffer->logical_height
}; };
/* Scale down buffer if required */ /* Scale down buffer if required */
@ -107,7 +107,7 @@ get_scale_box(struct wlr_buffer *buffer, double container_width,
void void
update_window_icon_buffer(struct wlr_scene_node *button_node, update_window_icon_buffer(struct wlr_scene_node *button_node,
struct wlr_buffer *buffer) struct lab_data_buffer *buffer)
{ {
struct wlr_scene_buffer *scene_buffer = struct wlr_scene_buffer *scene_buffer =
wlr_scene_buffer_from_node(button_node); wlr_scene_buffer_from_node(button_node);
@ -116,7 +116,7 @@ update_window_icon_buffer(struct wlr_scene_node *button_node,
rc.theme->window_button_width, rc.theme->window_button_width,
rc.theme->title_height); rc.theme->title_height);
wlr_scene_buffer_set_buffer(scene_buffer, buffer); wlr_scene_buffer_set_buffer(scene_buffer, &buffer->base);
wlr_scene_buffer_set_dest_size(scene_buffer, wlr_scene_buffer_set_dest_size(scene_buffer,
icon_geo.width, icon_geo.height); icon_geo.width, icon_geo.height);
wlr_scene_node_set_position(button_node, icon_geo.x, icon_geo.y); wlr_scene_node_set_position(button_node, icon_geo.x, icon_geo.y);
@ -145,11 +145,11 @@ add_scene_button(struct wl_list *part_list, enum ssd_part_type type,
if (!buffers[state_set]) { if (!buffers[state_set]) {
continue; continue;
} }
struct wlr_buffer *icon_buffer = &buffers[state_set]->base; struct lab_data_buffer *icon_buffer = buffers[state_set];
struct wlr_box icon_geo = get_scale_box(icon_buffer, struct wlr_box icon_geo = get_scale_box(icon_buffer,
rc.theme->window_button_width, rc.theme->title_height); rc.theme->window_button_width, rc.theme->title_height);
struct ssd_part *icon_part = add_scene_buffer(part_list, type, struct ssd_part *icon_part = add_scene_buffer(part_list, type,
parent, icon_buffer, icon_geo.x, icon_geo.y); parent, &icon_buffer->base, icon_geo.x, icon_geo.y);
/* Make sure big icons are scaled down if necessary */ /* Make sure big icons are scaled down if necessary */
wlr_scene_buffer_set_dest_size( wlr_scene_buffer_set_dest_size(
wlr_scene_buffer_from_node(icon_part->node), wlr_scene_buffer_from_node(icon_part->node),

View file

@ -635,7 +635,7 @@ ssd_update_window_icon(struct ssd *ssd)
for (uint8_t state_set = 0; state_set <= LAB_BS_ALL; state_set++) { for (uint8_t state_set = 0; state_set <= LAB_BS_ALL; state_set++) {
if (button->nodes[state_set]) { if (button->nodes[state_set]) {
update_window_icon_buffer(button->nodes[state_set], update_window_icon_buffer(button->nodes[state_set],
&icon_buffer->base); icon_buffer);
} }
} }
} FOR_EACH_END } FOR_EACH_END