diff options
| author | emersion <contact@emersion.fr> | 2017-11-01 14:36:58 +0100 | 
|---|---|---|
| committer | emersion <contact@emersion.fr> | 2017-11-01 14:36:58 +0100 | 
| commit | a15b35aa105048fa01ac76eefcf0919cad29df20 (patch) | |
| tree | 83bd00601d7e16bc2e1a6089e2b89cd3922142b9 /backend/drm/drm.c | |
| parent | 60c018c01760bef047d156a60e9ab32799a26f14 (diff) | |
| download | wlroots-a15b35aa105048fa01ac76eefcf0919cad29df20.tar.xz | |
Remove mysterious hotspot switch in DRM backend
Diffstat (limited to 'backend/drm/drm.c')
| -rw-r--r-- | backend/drm/drm.c | 57 | 
1 files changed, 26 insertions, 31 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 137ca85e..08e6296b 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -533,13 +533,14 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output,  			return false;  		} -		if (!wlr_drm_surface_init(&plane->surf, renderer, w, h, GBM_FORMAT_ARGB8888, 0)) { +		if (!wlr_drm_surface_init(&plane->surf, renderer, w, h, +				GBM_FORMAT_ARGB8888, 0)) {  			wlr_log(L_ERROR, "Cannot allocate cursor resources");  			return false;  		} -		plane->cursor_bo = gbm_bo_create(renderer->gbm, w, h, GBM_FORMAT_ARGB8888, -			GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE); +		plane->cursor_bo = gbm_bo_create(renderer->gbm, w, h, +			GBM_FORMAT_ARGB8888, GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE);  		if (!plane->cursor_bo) {  			wlr_log_errno(L_ERROR, "Failed to create cursor bo");  			return false; @@ -552,34 +553,26 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output,  		// TODO the image needs to be rotated depending on the output rotation -		plane->wlr_tex = wlr_render_texture_create(plane->surf.renderer->wlr_rend); +		plane->wlr_tex = +			wlr_render_texture_create(plane->surf.renderer->wlr_rend);  		if (!plane->wlr_tex) {  			return false;  		}  	} -	switch (output->transform) { -	case WL_OUTPUT_TRANSFORM_NORMAL: -	case WL_OUTPUT_TRANSFORM_FLIPPED_90: -		plane->cursor_hotspot_x = hotspot_x; -		plane->cursor_hotspot_y = hotspot_y; -		break; -	case WL_OUTPUT_TRANSFORM_90: -	case WL_OUTPUT_TRANSFORM_FLIPPED_180: -		plane->cursor_hotspot_x = hotspot_x; -		plane->cursor_hotspot_y = -plane->surf.height + hotspot_y; -		break; -	case WL_OUTPUT_TRANSFORM_180: -	case WL_OUTPUT_TRANSFORM_FLIPPED_270: -		plane->cursor_hotspot_x = -plane->surf.width + hotspot_x; -		plane->cursor_hotspot_y = -plane->surf.height + hotspot_y; -		break; -	case WL_OUTPUT_TRANSFORM_FLIPPED: -	case WL_OUTPUT_TRANSFORM_270: -		plane->cursor_hotspot_x = -plane->surf.width + hotspot_x; -		plane->cursor_hotspot_y = hotspot_y; -		break; -	} +	struct wlr_box hotspot = { +		.width = plane->surf.width, +		.height = plane->surf.height, +		.x = hotspot_x, +		.y = hotspot_y, +	}; +	enum wl_output_transform transform = +		wlr_output_transform_invert(output->transform); +	struct wlr_box transformed_hotspot; +	wlr_output_transform_apply_to_box(transform, &hotspot, +		&transformed_hotspot); +	plane->cursor_hotspot_x = transformed_hotspot.x; +	plane->cursor_hotspot_y = transformed_hotspot.y;  	if (!update_pixels) {  		// Only update the cursor hotspot @@ -609,11 +602,13 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output,  	float matrix[16];  	wlr_texture_get_matrix(plane->wlr_tex, &matrix, &plane->matrix, 0, 0); -	wlr_render_with_matrix(plane->surf.renderer->wlr_rend, plane->wlr_tex, &matrix); +	wlr_render_with_matrix(plane->surf.renderer->wlr_rend, plane->wlr_tex, +		&matrix);  	glFinish();  	glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, bo_stride); -	glReadPixels(0, 0, plane->surf.width, plane->surf.height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, bo_data); +	glReadPixels(0, 0, plane->surf.width, plane->surf.height, GL_BGRA_EXT, +		GL_UNSIGNED_BYTE, bo_data);  	glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, 0);  	wlr_drm_surface_swap_buffers(&plane->surf); @@ -627,10 +622,7 @@ static bool wlr_drm_connector_move_cursor(struct wlr_output *output,  		int x, int y) {  	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;  	struct wlr_box box;  	box.x = x; @@ -642,6 +634,9 @@ static bool wlr_drm_connector_move_cursor(struct wlr_output *output,  	struct wlr_box transformed_box;  	wlr_output_transform_apply_to_box(transform, &box, &transformed_box); +	transformed_box.x -= plane->cursor_hotspot_x; +	transformed_box.y -= plane->cursor_hotspot_y; +  	return drm->iface->crtc_move_cursor(drm, conn->crtc, transformed_box.x,  		transformed_box.y);  }  | 
