[gtk/wip/chergert/quartz4u] macos: locate surface from display coordinates



commit 11e7a896d7d022c0ae63700b6846e389f27c827a
Author: Christian Hergert <chergert redhat com>
Date:   Mon May 4 12:16:18 2020 -0700

    macos: locate surface from display coordinates

 gdk/macos/gdkmacosdisplay.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
---
diff --git a/gdk/macos/gdkmacosdisplay.c b/gdk/macos/gdkmacosdisplay.c
index d8cc9eff34..1976fae03e 100644
--- a/gdk/macos/gdkmacosdisplay.c
+++ b/gdk/macos/gdkmacosdisplay.c
@@ -590,3 +590,43 @@ _gdk_macos_display_queue_events (GdkMacosDisplay *self)
 
   gdk_macos_display_queue_events (GDK_DISPLAY (self));
 }
+
+GdkMacosSurface *
+_gdk_macos_display_get_surface_at_display_coords (GdkMacosDisplay *self,
+                                                  double           x,
+                                                  double           y,
+                                                  int             *surface_x,
+                                                  int             *surface_y)
+{
+  int x_gdk;
+  int y_gdk;
+
+  g_return_val_if_fail (GDK_IS_MACOS_DISPLAY (self), NULL);
+  g_return_val_if_fail (surface_x != NULL, NULL);
+  g_return_val_if_fail (surface_y != NULL, NULL);
+
+  _gdk_macos_display_from_display_coords (self, x, y, &x_gdk, &y_gdk);
+
+  for (const GList *iter = self->surfaces.head; iter; iter = iter->next)
+    {
+      GdkSurface *surface = iter->data;
+
+      g_assert (GDK_IS_MACOS_SURFACE (surface));
+
+      if (x_gdk >= surface->x &&
+          y_gdk >= surface->y &&
+          x_gdk <= (surface->x + surface->width) &&
+          y_gdk >= (surface->y + surface->height))
+        {
+          *surface_x = x_gdk - surface->x;
+          *surface_y = y_gdk - surface->y;
+
+          return GDK_MACOS_SURFACE (surface);
+        }
+    }
+
+  *surface_x = 0;
+  *surface_y = 0;
+
+  return NULL;
+}


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