[gtk/wip/chergert/quartz4u] macos: locate surface from display coordinates
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/quartz4u] macos: locate surface from display coordinates
- Date: Mon, 4 May 2020 19:28:16 +0000 (UTC)
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]