diff options
Diffstat (limited to 'backend/drm')
| -rw-r--r-- | backend/drm/drm.c | 35 | 
1 files changed, 21 insertions, 14 deletions
| diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 27a8490c..6cbb0535 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -560,33 +560,36 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output,  	switch (output->transform) {  	case WL_OUTPUT_TRANSFORM_90: -		output->cursor.hotspot_x = hotspot_x; -		output->cursor.hotspot_y = -plane->surf.height + hotspot_y; +		plane->cursor_hotspot_x = hotspot_x; +		plane->cursor_hotspot_y = -plane->surf.height + hotspot_y;  		break;  	case WL_OUTPUT_TRANSFORM_180: -		output->cursor.hotspot_x = plane->surf.width - hotspot_x; -		output->cursor.hotspot_y = plane->surf.height - hotspot_y; +		plane->cursor_hotspot_x = plane->surf.width - hotspot_x; +		plane->cursor_hotspot_y = plane->surf.height - hotspot_y;  		break;  	case WL_OUTPUT_TRANSFORM_270: -		output->cursor.hotspot_x = -plane->surf.height + hotspot_x; -		output->cursor.hotspot_y = hotspot_y; +		plane->cursor_hotspot_x = -plane->surf.height + hotspot_x; +		plane->cursor_hotspot_y = hotspot_y;  		break;  	case WL_OUTPUT_TRANSFORM_FLIPPED: -		output->cursor.hotspot_x = plane->surf.width - hotspot_x; -		output->cursor.hotspot_y = hotspot_y; +		plane->cursor_hotspot_x = plane->surf.width - hotspot_x; +		plane->cursor_hotspot_y = hotspot_y;  		break;  	case WL_OUTPUT_TRANSFORM_FLIPPED_90: -		output->cursor.hotspot_x = hotspot_x; -		output->cursor.hotspot_y = -hotspot_y; +		plane->cursor_hotspot_x = hotspot_x; +		plane->cursor_hotspot_y = -hotspot_y;  		break;  	case WL_OUTPUT_TRANSFORM_FLIPPED_180: -		output->cursor.hotspot_x = hotspot_x; -		output->cursor.hotspot_y = plane->surf.height - hotspot_y; +		plane->cursor_hotspot_x = hotspot_x; +		plane->cursor_hotspot_y = plane->surf.height - hotspot_y;  		break;  	case WL_OUTPUT_TRANSFORM_FLIPPED_270: -		output->cursor.hotspot_x = -plane->surf.height + hotspot_x; -		output->cursor.hotspot_y = plane->surf.width - hotspot_y; +		plane->cursor_hotspot_x = -plane->surf.height + hotspot_x; +		plane->cursor_hotspot_y = plane->surf.width - hotspot_y;  		break; +	default: // WL_OUTPUT_TRANSFORM_NORMAL +		plane->cursor_hotspot_x = hotspot_x; +		plane->cursor_hotspot_y = hotspot_y;  	}  	if (!update_pixels) { @@ -636,6 +639,10 @@ static bool wlr_drm_connector_move_cursor(struct wlr_output *output,  	struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output;  	struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; +	struct wlr_drm_plane *plane = conn->crtc->cursor; +	x -= plane->cursor_hotspot_x; +	y -= plane->cursor_hotspot_y; +  	int width, height, tmp;  	wlr_output_effective_resolution(output, &width, &height); | 
