macOS: Clamp damage region to surface size
authorLuca Bacci <luca.bacci982@gmail.com>
Wed, 13 Sep 2023 14:50:08 +0000 (16:50 +0200)
committerLuca Bacci <luca.bacci982@gmail.com>
Wed, 13 Sep 2023 15:39:51 +0000 (17:39 +0200)
...in _gdk_macos_cairo_context_begin_frame ()

GdkMacosCairoContext needs regions that are clamped to the
actual surface size.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5812

gdk/macos/gdkmacoscairocontext.c

index 17c2b32811dbdc993b0b4a2913498b7ab4c1b634..31a9091b75a69647429d54e3055d347ea13ffc8a 100644 (file)
@@ -188,6 +188,14 @@ copy_surface_data (GdkMacosBuffer       *from,
     }
 }
 
+static void
+clamp_region_to_surface (cairo_region_t *region,
+                         GdkSurface     *surface)
+{
+  cairo_rectangle_int_t rectangle = {0, 0, surface->width, surface->height};
+  cairo_region_intersect_rectangle (region, &rectangle);
+}
+
 static void
 _gdk_macos_cairo_context_begin_frame (GdkDrawContext *draw_context,
                                       GdkMemoryDepth  depth,
@@ -205,6 +213,8 @@ _gdk_macos_cairo_context_begin_frame (GdkDrawContext *draw_context,
   surface = GDK_MACOS_SURFACE (gdk_draw_context_get_surface (draw_context));
   buffer = _gdk_macos_surface_get_buffer (surface);
 
+  clamp_region_to_surface (region, GDK_SURFACE (surface));
+
   _gdk_macos_buffer_set_damage (buffer, region);
   _gdk_macos_buffer_set_flipped (buffer, FALSE);