mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	rootston: fix input events for rotated views
This commit is contained in:
		
							parent
							
								
									c2178d51a8
								
							
						
					
					
						commit
						6a60dafe59
					
				
					 2 changed files with 6 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -51,22 +51,8 @@ static bool view_at(struct roots_view *view, double lx, double ly,
 | 
			
		|||
 | 
			
		||||
	double view_sx = lx - view->box.x;
 | 
			
		||||
	double view_sy = ly - view->box.y;
 | 
			
		||||
 | 
			
		||||
	struct wlr_surface_state *state = &view->wlr_surface->current;
 | 
			
		||||
	struct wlr_box box = {
 | 
			
		||||
		.x = 0, .y = 0,
 | 
			
		||||
		.width = state->width, .height = state->height,
 | 
			
		||||
	};
 | 
			
		||||
	if (view->rotation != 0.0) {
 | 
			
		||||
		// Coordinates relative to the center of the view
 | 
			
		||||
		double ox = view_sx - (double)box.width/2,
 | 
			
		||||
			oy = view_sy - (double)box.height/2;
 | 
			
		||||
		// Rotated coordinates
 | 
			
		||||
		double rx = cos(view->rotation)*ox + sin(view->rotation)*oy,
 | 
			
		||||
			ry = cos(view->rotation)*oy - sin(view->rotation)*ox;
 | 
			
		||||
		view_sx = rx + (double)box.width/2;
 | 
			
		||||
		view_sy = ry + (double)box.height/2;
 | 
			
		||||
	}
 | 
			
		||||
	rotate_child_position(&view_sx, &view_sy, 0, 0,
 | 
			
		||||
		view->box.width, view->box.height, -view->rotation);
 | 
			
		||||
 | 
			
		||||
	double _sx, _sy;
 | 
			
		||||
	struct wlr_surface *_surface = NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,11 +30,11 @@ void rotate_child_position(double *sx, double *sy, double sw, double sh,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	// Coordinates relative to the center of the subsurface
 | 
			
		||||
	double ox = *sx - pw/2 + sw/2,
 | 
			
		||||
		oy = *sy - ph/2 + sh/2;
 | 
			
		||||
	double cx = *sx - pw/2 + sw/2,
 | 
			
		||||
		cy = *sy - ph/2 + sh/2;
 | 
			
		||||
	// Rotated coordinates
 | 
			
		||||
	double rx = cos(rotation)*ox - sin(rotation)*oy,
 | 
			
		||||
		ry = cos(rotation)*oy + sin(rotation)*ox;
 | 
			
		||||
	double rx = cos(rotation)*cx - sin(rotation)*cy,
 | 
			
		||||
		ry = cos(rotation)*cy + sin(rotation)*cx;
 | 
			
		||||
	*sx = rx + pw/2 - sw/2;
 | 
			
		||||
	*sy = ry + ph/2 - sh/2;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue