[PATCH wayland v3 5/5] Input: Convert pointer co-ordinates to signed_24_8

Daniel Stone daniel at fooishbar.org
Fri May 4 03:21:23 PDT 2012


This offers more precision when using devices like tablets, and also for
transformed surfaces.

Signed-off-by: Daniel Stone <daniel at fooishbar.org>
---
 protocol/wayland.xml |   24 ++++++++++++------------
 src/wayland-server.c |    6 +++---
 src/wayland-server.h |   18 +++++++++++-------
 3 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index c618c64..9ead4e6 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -345,8 +345,8 @@
     <event name="enter">
       <arg name="serial" type="uint"/>
       <arg name="surface" type="object" interface="wl_surface"/>
-      <arg name="x" type="int"/>
-      <arg name="y" type="int"/>
+      <arg name="x" type="signed_24_8"/>
+      <arg name="y" type="signed_24_8"/>
       <arg name="id" type="object" interface="wl_data_offer"/>
     </event>
 
@@ -354,8 +354,8 @@
 
     <event name="motion">
       <arg name="time" type="uint"/>
-      <arg name="x" type="int"/>
-      <arg name="y" type="int"/>
+      <arg name="x" type="signed_24_8"/>
+      <arg name="y" type="signed_24_8"/>
     </event>
 
     <event name="drop"/>
@@ -725,8 +725,8 @@
       </description>
 
       <arg name="time" type="uint"/>
-      <arg name="surface_x" type="int"/>
-      <arg name="surface_y" type="int"/>
+      <arg name="surface_x" type="signed_24_8"/>
+      <arg name="surface_y" type="signed_24_8"/>
     </event>
 
     <event name="button">
@@ -778,8 +778,8 @@
 
       <arg name="serial" type="uint"/>
       <arg name="surface" type="object" interface="wl_surface"/>
-      <arg name="surface_x" type="int"/>
-      <arg name="surface_y" type="int"/>
+      <arg name="surface_x" type="signed_24_8"/>
+      <arg name="surface_y" type="signed_24_8"/>
     </event>
 
     <event name="pointer_leave">
@@ -805,8 +805,8 @@
       <arg name="time" type="uint"/>
       <arg name="surface" type="object" interface="wl_surface"/>
       <arg name="id" type="int" />
-      <arg name="x" type="int" />
-      <arg name="y" type="int" />
+      <arg name="x" type="signed_24_8" />
+      <arg name="y" type="signed_24_8" />
     </event>
 
     <event name="touch_up">
@@ -818,8 +818,8 @@
     <event name="touch_motion">
       <arg name="time" type="uint"/>
       <arg name="id" type="int" />
-      <arg name="x" type="int" />
-      <arg name="y" type="int" />
+      <arg name="x" type="signed_24_8" />
+      <arg name="y" type="signed_24_8" />
     </event>
 
     <event name="touch_frame">
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 9d519fb..7ec5b64 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -472,7 +472,7 @@ lose_keyboard_focus(struct wl_listener *listener, void *data)
 
 static void
 default_grab_focus(struct wl_pointer_grab *grab,
-		   struct wl_surface *surface, int32_t x, int32_t y)
+		   struct wl_surface *surface, wl_signed_24_8_t x, wl_signed_24_8_t y)
 {
 	struct wl_input_device *device = grab->input_device;
 
@@ -484,7 +484,7 @@ default_grab_focus(struct wl_pointer_grab *grab,
 
 static void
 default_grab_motion(struct wl_pointer_grab *grab,
-		    uint32_t time, int32_t x, int32_t y)
+		    uint32_t time, wl_signed_24_8_t x, wl_signed_24_8_t y)
 {
 	struct wl_resource *resource;
 
@@ -601,7 +601,7 @@ find_resource_for_surface(struct wl_list *list, struct wl_surface *surface)
 WL_EXPORT void
 wl_input_device_set_pointer_focus(struct wl_input_device *device,
 				  struct wl_surface *surface,
-				  int32_t sx, int32_t sy)
+				  wl_signed_24_8_t sx, wl_signed_24_8_t sy)
 {
 	struct wl_resource *resource;
 	uint32_t serial;
diff --git a/src/wayland-server.h b/src/wayland-server.h
index 73c6f57..3b599a7 100644
--- a/src/wayland-server.h
+++ b/src/wayland-server.h
@@ -185,9 +185,13 @@ struct wl_surface {
 struct wl_pointer_grab;
 struct wl_pointer_grab_interface {
 	void (*focus)(struct wl_pointer_grab *grab,
-		      struct wl_surface *surface, int32_t x, int32_t y);
+		      struct wl_surface *surface,
+		      wl_signed_24_8_t x,
+		      wl_signed_24_8_t y);
 	void (*motion)(struct wl_pointer_grab *grab,
-		       uint32_t time, int32_t x, int32_t y);
+		       uint32_t time,
+		       wl_signed_24_8_t x,
+		       wl_signed_24_8_t y);
 	void (*button)(struct wl_pointer_grab *grab,
 		       uint32_t time, uint32_t button, uint32_t is_down);
 };
@@ -196,7 +200,7 @@ struct wl_pointer_grab {
 	const struct wl_pointer_grab_interface *interface;
 	struct wl_input_device *input_device;
 	struct wl_surface *focus;
-	int32_t x, y;
+	wl_signed_24_8_t x, y;
 };
 
 struct wl_keyboard_grab;
@@ -238,9 +242,9 @@ struct wl_input_device {
 	struct wl_listener pointer_focus_listener;
 	struct wl_listener keyboard_focus_listener;
 
-	int32_t x, y;
+	wl_signed_24_8_t x, y;
 	struct wl_surface *current;
-	int32_t current_x, current_y;
+	wl_signed_24_8_t current_x, current_y;
 
 	struct wl_pointer_grab *pointer_grab;
 	struct wl_pointer_grab default_pointer_grab;
@@ -249,7 +253,7 @@ struct wl_input_device {
 	uint32_t button_count;
 	uint32_t grab_time;
 	uint32_t grab_serial;
-	int32_t grab_x, grab_y;
+	wl_signed_24_8_t grab_x, grab_y;
 	uint32_t grab_button;
 	uint32_t grab_key;
 	struct wl_listener grab_listener;
@@ -320,7 +324,7 @@ wl_input_device_release(struct wl_input_device *device);
 void
 wl_input_device_set_pointer_focus(struct wl_input_device *device,
 				  struct wl_surface *surface,
-				  int32_t sx, int32_t sy);
+				  wl_signed_24_8_t sx, wl_signed_24_8_t sy);
 
 void
 wl_input_device_set_keyboard_focus(struct wl_input_device *device,
-- 
1.7.10



More information about the wayland-devel mailing list