]> git.mdlowis.com Git - proto/labwc.git/commitdiff
ssd: respect logical size when displaying window icon
authorJohn Lindgren <john@jlindgren.net>
Mon, 7 Oct 2024 01:29:40 +0000 (21:29 -0400)
committerJohn Lindgren <john@jlindgren.net>
Mon, 7 Oct 2024 01:29:40 +0000 (21:29 -0400)
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.

include/ssd-internal.h
src/ssd/ssd-part.c
src/ssd/ssd-titlebar.c

index a0786dfc5e30d1860ce0e695c9150a181ccdabee..5c5aa8e87fe0e1c4210b0478f709091668d2c889 100644 (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 view *view);
 void update_window_icon_buffer(struct wlr_scene_node *button_node,
-       struct wlr_buffer *buffer);
+       struct lab_data_buffer *buffer);
 
 /* SSD internal helpers */
 struct ssd_part *ssd_get_part(
index 57b2e63f94f5b4b2165aa5ee5dd4342c7629cf1d..2e572966744f389d6e78cadab3ac51f86b00dc37 100644 (file)
@@ -80,12 +80,12 @@ add_scene_buffer(struct wl_list *list, enum ssd_part_type type,
 }
 
 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)
 {
        struct wlr_box icon_geo = {
-               .width = buffer->width,
-               .height = buffer->height
+               .width = buffer->logical_width,
+               .height = buffer->logical_height
        };
 
        /* Scale down buffer if required */
@@ -107,7 +107,7 @@ get_scale_box(struct wlr_buffer *buffer, double container_width,
 
 void
 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 =
                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->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,
                icon_geo.width, icon_geo.height);
        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]) {
                        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,
                        rc.theme->window_button_width, rc.theme->title_height);
                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 */
                wlr_scene_buffer_set_dest_size(
                        wlr_scene_buffer_from_node(icon_part->node),
index 530b92103e0e4759d9c300359ce0ff2e37ce98b3..5e5b9769751ea5bc61a7f75f219e81468f455071 100644 (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++) {
                        if (button->nodes[state_set]) {
                                update_window_icon_buffer(button->nodes[state_set],
-                                       &icon_buffer->base);
+                                       icon_buffer);
                        }
                }
        } FOR_EACH_END