[gtk/wip/baedert/for-master: 80/86] gl renderer: Ignore rounded clip that only increase the clip



commit f149a5ffc39c9f4c7bf2bf0c03243f4859bffdb8
Author: Timm Bäder <mail baedert org>
Date:   Fri Jul 3 06:41:29 2020 +0200

    gl renderer: Ignore rounded clip that only increase the clip
    
    This fixes the widget factory rendering too much.
    
    In the widget-factory, we generally have a pretty small update area (two
    spinners and a progressbar). We take the extents of that as a update
    area and inital clip.
    
    However, the first clip node we see is from the toplevel window, which
    essentially increases the clip again to almost the entire window.
    
    Fix that by ignoring such cases.

 gsk/gl/gskglrenderer.c | 9 +++++++++
 1 file changed, 9 insertions(+)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 130971e7b9..699da4f35d 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -1313,6 +1313,15 @@ render_rounded_clip_node (GskGLRenderer       *self,
           transformed_clip.corner[i].height = clip->corner[i].height * scale;
         }
 
+      /* If the new clip entirely contains the current clip, the intersection is simply
+       * the current clip, so we can ignore the new one */
+      if (rounded_inner_rect_contains_rect (&transformed_clip, &builder->current_clip->bounds))
+        {
+          gsk_gl_renderer_add_render_ops (self, child, builder);
+          return;
+        }
+
+      /* TODO: Intersect current and new clip */
       ops_push_clip (builder, &transformed_clip);
       gsk_gl_renderer_add_render_ops (self, child, builder);
       ops_pop_clip (builder);


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