mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	src/osd.c: Add preview outlines
This commit is contained in:
		
							parent
							
								
									fb36463c34
								
							
						
					
					
						commit
						b39020213a
					
				
					 2 changed files with 34 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -202,6 +202,8 @@ struct server {
 | 
			
		|||
	/* Tree for built in menu */
 | 
			
		||||
	struct wlr_scene_tree *menu_tree;
 | 
			
		||||
 | 
			
		||||
	struct multi_rect *osd_preview_outline;
 | 
			
		||||
 | 
			
		||||
	/* Workspaces */
 | 
			
		||||
	struct wl_list workspaces;  /* struct workspace.link */
 | 
			
		||||
	struct workspace *workspace_current;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										32
									
								
								src/osd.c
									
										
									
									
									
								
							
							
						
						
									
										32
									
								
								src/osd.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -83,6 +83,32 @@ destroy_osd_nodes(struct output *output)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
osd_update_preview_outlines(struct view *view)
 | 
			
		||||
{
 | 
			
		||||
	/* Create / Update preview outline tree */
 | 
			
		||||
	struct server *server = view->server;
 | 
			
		||||
	struct multi_rect *rect = view->server->osd_preview_outline;
 | 
			
		||||
	if (!rect) {
 | 
			
		||||
		int line_width = server->theme->osd_border_width;
 | 
			
		||||
		float *colors[] = {
 | 
			
		||||
			server->theme->osd_bg_color,
 | 
			
		||||
			server->theme->osd_label_text_color,
 | 
			
		||||
			server->theme->osd_bg_color
 | 
			
		||||
		};
 | 
			
		||||
		rect = multi_rect_create(&server->scene->tree, colors, line_width);
 | 
			
		||||
		wlr_scene_node_place_above(&rect->tree->node, &server->menu_tree->node);
 | 
			
		||||
		server->osd_preview_outline = rect;
 | 
			
		||||
	}
 | 
			
		||||
	/* A multi_rect consists of 3 layered rects */
 | 
			
		||||
	int line_width = rect->line_width * 3;
 | 
			
		||||
	struct wlr_box geo = ssd_max_extents(view);
 | 
			
		||||
	multi_rect_set_size(rect,
 | 
			
		||||
		geo.width + line_width * 2, geo.height + line_width * 2);
 | 
			
		||||
	wlr_scene_node_set_position(&rect->tree->node,
 | 
			
		||||
		geo.x - line_width, geo.y - line_width);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
osd_finish(struct server *server)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -91,6 +117,11 @@ osd_finish(struct server *server)
 | 
			
		|||
		destroy_osd_nodes(output);
 | 
			
		||||
		wlr_scene_node_set_enabled(&output->osd_tree->node, false);
 | 
			
		||||
	}
 | 
			
		||||
	if (server->osd_preview_outline) {
 | 
			
		||||
		/* Destroy the whole multi_rect so we can easily react to new themes */
 | 
			
		||||
		wlr_scene_node_destroy(&server->osd_preview_outline->tree->node);
 | 
			
		||||
		server->osd_preview_outline = NULL;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
| 
						 | 
				
			
			@ -158,6 +189,7 @@ osd_update(struct server *server)
 | 
			
		|||
				cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
 | 
			
		||||
					OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
 | 
			
		||||
				cairo_stroke(cairo);
 | 
			
		||||
				osd_update_preview_outlines(view);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			y += OSD_ITEM_HEIGHT;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue