mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	scene: add wlr_scene_node_coords
This commit is contained in:
		
							parent
							
								
									04d105760d
								
							
						
					
					
						commit
						9195b77e14
					
				
					 2 changed files with 22 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -118,6 +118,12 @@ void wlr_scene_node_place_below(struct wlr_scene_node *node,
 | 
			
		|||
 */
 | 
			
		||||
void wlr_scene_node_reparent(struct wlr_scene_node *node,
 | 
			
		||||
	struct wlr_scene_node *new_parent);
 | 
			
		||||
/**
 | 
			
		||||
 * Get the node's layout-local coordinates.
 | 
			
		||||
 *
 | 
			
		||||
 * True is returned if the node and all of its ancestors are enabled.
 | 
			
		||||
 */
 | 
			
		||||
bool wlr_scene_node_coords(struct wlr_scene_node *node, int *lx, int *ly);
 | 
			
		||||
/**
 | 
			
		||||
 * Call `iterator` on each surface in the scene-graph, with the surface's
 | 
			
		||||
 * position in layout coordinates. The function is called from root to leaves
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -193,6 +193,22 @@ void wlr_scene_node_reparent(struct wlr_scene_node *node,
 | 
			
		|||
	wl_list_insert(new_parent->state.children.prev, &node->state.link);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wlr_scene_node_coords(struct wlr_scene_node *node,
 | 
			
		||||
		int *lx_ptr, int *ly_ptr) {
 | 
			
		||||
	int lx = 0, ly = 0;
 | 
			
		||||
	bool enabled = true;
 | 
			
		||||
	while (node != NULL) {
 | 
			
		||||
		lx += node->state.x;
 | 
			
		||||
		ly += node->state.y;
 | 
			
		||||
		enabled = enabled && node->state.enabled;
 | 
			
		||||
		node = node->parent;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*lx_ptr = lx;
 | 
			
		||||
	*ly_ptr = ly;
 | 
			
		||||
	return enabled;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void scene_node_for_each_surface(struct wlr_scene_node *node,
 | 
			
		||||
		int lx, int ly, wlr_surface_iterator_func_t user_iterator,
 | 
			
		||||
		void *user_data) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue