[gtk/global-coords: 1/5] surface: Add coordinate translation



commit 926f4142103d4b8fcdeea220bc9f20e546997cc5
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue May 28 23:41:56 2019 -0400

    surface: Add coordinate translation
    
    We maintain offsets for popups, so we can translate
    coordinates between surfaces that are attached directly
    or indirectly to the same toplevel. Add an api for that.

 gdk/gdksurface.c | 38 ++++++++++++++++++++++++++++++++++++++
 gdk/gdksurface.h |  6 ++++++
 2 files changed, 44 insertions(+)
---
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index b3f0c64223..fc30d532d9 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -4076,3 +4076,41 @@ gdk_surface_handle_event (GdkEvent *event)
 
   return handled;
 }
+
+gboolean
+gdk_surface_translate_coordinates (GdkSurface *from,
+                                   GdkSurface *to,
+                                   double     *x,
+                                   double     *y)
+{
+  int x1, y1, x2, y2;
+  GdkSurface *f, *t;
+
+  x1 = 0;
+  y1 = 0;
+  f = from;
+  while (f->parent)
+    {
+      x1 += f->x;
+      y1 += f->y;
+      f = f->parent;
+    }
+
+  x2 = 0;
+  y2 = 0;
+  t = to;
+  while (t->parent)
+    {
+      x2 += t->x;
+      y2 += t->y;
+      t = t->parent;
+    }
+
+  if (f != t)
+    return FALSE;
+
+  *x += x1 - x2;
+  *y += y1 - y2;
+
+  return TRUE;
+}
diff --git a/gdk/gdksurface.h b/gdk/gdksurface.h
index b02d40192a..acca090683 100644
--- a/gdk/gdksurface.h
+++ b/gdk/gdksurface.h
@@ -557,6 +557,12 @@ gint          gdk_surface_get_origin     (GdkSurface      *surface,
                                           gint            *x,
                                           gint            *y);
 GDK_AVAILABLE_IN_ALL
+gboolean gdk_surface_translate_coordinates (GdkSurface *from,
+                                            GdkSurface *to,
+                                            double     *x,
+                                            double     *y);
+
+GDK_AVAILABLE_IN_ALL
 void          gdk_surface_get_frame_extents (GdkSurface     *surface,
                                              GdkRectangle  *rect);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]