summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2012-05-08 17:17:53 +0100
committerKristian Høgsberg <krh@bitplanet.net>2012-05-08 14:40:51 -0400
commitbd3489b6e1657a036327c079abbd7da1c50799dc (patch)
tree36c1848b74261cf97db1d0af0a9d616e64058e65 /src
parenteb95d0de7ea5f9a5e23eb6757987dcec4a9add3b (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.c38
-rw-r--r--src/compositor.h10
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,