scene: add wlr_scene_node_coords
This commit is contained in:
		
							parent
							
								
									04d105760d
								
							
						
					
					
						commit
						9195b77e14
					
				|  | @ -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…
	
		Reference in New Issue