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,
 | 
					void wlr_scene_node_reparent(struct wlr_scene_node *node,
 | 
				
			||||||
	struct wlr_scene_node *new_parent);
 | 
						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
 | 
					 * 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
 | 
					 * 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);
 | 
						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,
 | 
					static void scene_node_for_each_surface(struct wlr_scene_node *node,
 | 
				
			||||||
		int lx, int ly, wlr_surface_iterator_func_t user_iterator,
 | 
							int lx, int ly, wlr_surface_iterator_func_t user_iterator,
 | 
				
			||||||
		void *user_data) {
 | 
							void *user_data) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue