diff options
author | Daniel Stone <daniel@fooishbar.org> | 2012-05-08 17:17:53 +0100 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2012-05-08 14:40:51 -0400 |
commit | bd3489b6e1657a036327c079abbd7da1c50799dc (patch) | |
tree | 36c1848b74261cf97db1d0af0a9d616e64058e65 /src | |
parent | eb95d0de7ea5f9a5e23eb6757987dcec4a9add3b (diff) |
Add fixed-point versions of weston_surface_{to, from}_global
To be used by input code, paralleling the existing integer versions.
Enlarge the surface_{to,from}_global_float input types to GLfloat to
avoid losing precision.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/compositor.c | 38 | ||||
-rw-r--r-- | src/compositor.h | 10 |
2 files changed, 44 insertions, 4 deletions
diff --git a/src/compositor.c b/src/compositor.c index f508745..2e1c9e4 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -266,7 +266,7 @@ weston_surface_set_color(struct weston_surface *surface, static void surface_to_global_float(struct weston_surface *surface, - int32_t sx, int32_t sy, GLfloat *x, GLfloat *y) + GLfloat sx, GLfloat sy, GLfloat *x, GLfloat *y) { if (surface->transform.enabled) { struct weston_vector v = { { sx, sy, 0.0f, 1.0f } }; @@ -436,7 +436,7 @@ weston_surface_update_transform(struct weston_surface *surface) WL_EXPORT void weston_surface_to_global_float(struct weston_surface *surface, - int32_t sx, int32_t sy, GLfloat *x, GLfloat *y) + GLfloat sx, GLfloat sy, GLfloat *x, GLfloat *y) { weston_surface_update_transform(surface); @@ -444,6 +444,21 @@ weston_surface_to_global_float(struct weston_surface *surface, } WL_EXPORT void +weston_surface_to_global_fixed(struct weston_surface *surface, + wl_fixed_t sx, wl_fixed_t sy, + wl_fixed_t *x, wl_fixed_t *y) +{ + GLfloat xf, yf; + + weston_surface_to_global_float(surface, + wl_fixed_to_double(sx), + wl_fixed_to_double(sy), + &xf, &yf); + *x = wl_fixed_from_double(xf); + *y = wl_fixed_from_double(yf); +} + +WL_EXPORT void weston_surface_to_global(struct weston_surface *surface, int32_t sx, int32_t sy, int32_t *x, int32_t *y) { @@ -456,7 +471,7 @@ weston_surface_to_global(struct weston_surface *surface, static void surface_from_global_float(struct weston_surface *surface, - int32_t x, int32_t y, GLfloat *sx, GLfloat *sy) + GLfloat x, GLfloat y, GLfloat *sx, GLfloat *sy) { if (surface->transform.enabled) { struct weston_vector v = { { x, y, 0.0f, 1.0f } }; @@ -481,6 +496,23 @@ surface_from_global_float(struct weston_surface *surface, } WL_EXPORT void +weston_surface_from_global_fixed(struct weston_surface *surface, + wl_fixed_t x, wl_fixed_t y, + wl_fixed_t *sx, wl_fixed_t *sy) +{ + GLfloat sxf, syf; + + weston_surface_update_transform(surface); + + surface_from_global_float(surface, + wl_fixed_to_double(x), + wl_fixed_to_double(y), + &sxf, &syf); + *sx = wl_fixed_from_double(sxf); + *sy = wl_fixed_from_double(syf); +} + +WL_EXPORT void weston_surface_from_global(struct weston_surface *surface, int32_t x, int32_t y, int32_t *sx, int32_t *sy) { diff --git a/src/compositor.h b/src/compositor.h index 8a3a4a0..3d9ddd8 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -389,12 +389,20 @@ void weston_surface_to_global(struct weston_surface *surface, int32_t sx, int32_t sy, int32_t *x, int32_t *y); void +weston_surface_to_global_fixed(struct weston_surface *surface, + wl_fixed_t sx, wl_fixed_t sy, + wl_fixed_t *x, wl_fixed_t *y); +void weston_surface_to_global_float(struct weston_surface *surface, - int32_t sx, int32_t sy, GLfloat *x, GLfloat *y); + GLfloat sx, GLfloat sy, GLfloat *x, GLfloat *y); void weston_surface_from_global(struct weston_surface *surface, int32_t x, int32_t y, int32_t *sx, int32_t *sy); +void +weston_surface_from_global_fixed(struct weston_surface *surface, + wl_fixed_t x, wl_fixed_t y, + wl_fixed_t *sx, wl_fixed_t *sy); void weston_spring_init(struct weston_spring *spring, |