mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	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:
		
							parent
							
								
									ddfaae98ad
								
							
						
					
					
						commit
						465aac5514
					
				
					 3 changed files with 9 additions and 9 deletions
				
			
		| 
						 | 
					@ -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(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue