[libhandy/wip/exalm/leaflet-transltions: 2/10] shadow-helper: Mark the shadow area for GdkWindow



commit 814b9d41a440d82fbb29e13547dd4037db55227b
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Sun May 31 22:00:42 2020 +0500

    shadow-helper: Mark the shadow area for GdkWindow
    
    This is one of the needed steps to have it drawn over OpenGL content.

 src/hdy-shadow-helper.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
---
diff --git a/src/hdy-shadow-helper.c b/src/hdy-shadow-helper.c
index 242a6073..7a835320 100644
--- a/src/hdy-shadow-helper.c
+++ b/src/hdy-shadow-helper.c
@@ -362,6 +362,29 @@ hdy_shadow_helper_draw_shadow (HdyShadowHelper *self,
   if (remaining_distance < shadow_size)
     shadow_opacity = (remaining_distance / shadow_size);
 
+  cairo_save (cr);
+
+  switch (direction) {
+  case GTK_PAN_DIRECTION_RIGHT:
+    cairo_rectangle (cr, 0, 0, width + self->outline_size, height);
+    break;
+  case GTK_PAN_DIRECTION_DOWN:
+    cairo_rectangle (cr, 0, 0, width, height + self->outline_size);
+    break;
+  case GTK_PAN_DIRECTION_LEFT:
+    cairo_rectangle (cr, -self->outline_size, 0, width + self->outline_size, height);
+    break;
+  case GTK_PAN_DIRECTION_UP:
+    cairo_rectangle (cr, 0, -self->outline_size, width, height + self->outline_size);
+    break;
+  default:
+    g_assert_not_reached ();
+  }
+
+  cairo_clip (cr);
+
+  gdk_window_mark_paint_from_clip (gtk_widget_get_window (self->widget), cr);
+
   cairo_save (cr);
   cairo_set_operator (cr, CAIRO_OPERATOR_ATOP);
   cairo_set_source (cr, self->dimming_pattern);
@@ -430,4 +453,6 @@ hdy_shadow_helper_draw_shadow (HdyShadowHelper *self,
   cairo_set_source (cr, self->outline_pattern);
   cairo_paint (cr);
   cairo_restore (cr);
+
+  cairo_restore (cr);
 }


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