macos: add helper to check if surface is opaque
authorChristian Hergert <christian@hergert.me>
Mon, 14 Feb 2022 10:18:51 +0000 (02:18 -0800)
committerChristian Hergert <christian@hergert.me>
Wed, 16 Feb 2022 11:08:55 +0000 (03:08 -0800)
gdk/macos/gdkmacossurface-private.h
gdk/macos/gdkmacossurface.c

index ccb8a8317951461a60c047bdb75de9a4e6d3a4c1..61ea1ba00da821158077af6667005ef6c314cb73 100644 (file)
@@ -131,6 +131,7 @@ void               _gdk_macos_surface_set_opacity             (GdkMacosSurface
 void               _gdk_macos_surface_get_root_coords         (GdkMacosSurface    *self,
                                                                int                *x,
                                                                int                *y);
+gboolean           _gdk_macos_surface_is_opaque               (GdkMacosSurface      *self);
 
 G_END_DECLS
 
index a2c7bb485def42bfa9c00e4b2c5996d9b8496f23..42ac59d059732dd28ebdfca5fba955a6bcdc5cd5 100644 (file)
@@ -603,6 +603,27 @@ _gdk_macos_surface_get_shadow (GdkMacosSurface *self,
     *right = self->shadow_right;
 }
 
+gboolean
+_gdk_macos_surface_is_opaque (GdkMacosSurface *self)
+{
+  g_return_val_if_fail (GDK_IS_MACOS_SURFACE (self), FALSE);
+
+  if (self->opaque_region != NULL &&
+      cairo_region_num_rectangles (self->opaque_region) == 1)
+    {
+      cairo_rectangle_int_t extents;
+
+      cairo_region_get_extents (self->opaque_region, &extents);
+
+      return (extents.x == 0 &&
+              extents.y == 0 &&
+              extents.width == GDK_SURFACE (self)->width &&
+              extents.height == GDK_SURFACE (self)->height);
+    }
+
+  return FALSE;
+}
+
 const char *
 _gdk_macos_surface_get_title (GdkMacosSurface *self)
 {