[RFC weston 09/16] compositor: use matrix transforms for surface_to_buffer functions

Derek Foreman derekf at osg.samsung.com
Fri Sep 26 14:10:20 PDT 2014


Now that we have weston_matrix_transform and appropriate matrices we can
use that instead of weston_transformed_coord + scaler_surface_to_buffer.

scaler_surface_to_buffer no longer has users, so remove it.
---
 src/compositor.c | 41 ++++-------------------------------------
 1 file changed, 4 insertions(+), 37 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index ca7c938..9bab962 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -818,49 +818,16 @@ weston_transformed_region(int width, int height,
 	free(dest_rects);
 }
 
-static void
-scaler_surface_to_buffer(struct weston_surface *surface,
-			 float sx, float sy, float *bx, float *by)
-{
-	struct weston_buffer_viewport *vp = &surface->buffer_viewport;
-	double src_width, src_height;
-	double src_x, src_y;
-
-	if (vp->buffer.src_width == wl_fixed_from_int(-1)) {
-		if (vp->surface.width == -1) {
-			*bx = sx;
-			*by = sy;
-			return;
-		}
-
-		src_x = 0.0;
-		src_y = 0.0;
-		src_width = surface->width_from_buffer;
-		src_height = surface->height_from_buffer;
-	} else {
-		src_x = wl_fixed_to_double(vp->buffer.src_x);
-		src_y = wl_fixed_to_double(vp->buffer.src_y);
-		src_width = wl_fixed_to_double(vp->buffer.src_width);
-		src_height = wl_fixed_to_double(vp->buffer.src_height);
-	}
-
-	*bx = sx * src_width / surface->width + src_x;
-	*by = sy * src_height / surface->height + src_y;
-}
-
 WL_EXPORT void
 weston_surface_to_buffer_float(struct weston_surface *surface,
 			       float sx, float sy, float *bx, float *by)
 {
-	struct weston_buffer_viewport *vp = &surface->buffer_viewport;
+	struct weston_vector v = {{sx, sy, 0.0, 1.0}};
 
-	/* first transform coordinates if the scaler is set */
-	scaler_surface_to_buffer(surface, sx, sy, bx, by);
+	weston_matrix_transform(&surface->surface_to_buffer_matrix, &v);
 
-	weston_transformed_coord(surface->width_from_buffer,
-				 surface->height_from_buffer,
-				 vp->buffer.transform, vp->buffer.scale,
-				 *bx, *by, bx, by);
+	*bx = v.f[0] / v.f[3];
+	*by = v.f[1] / v.f[3];
 }
 
 WL_EXPORT void
-- 
2.1.0



More information about the wayland-devel mailing list