summaryrefslogtreecommitdiff
path: root/gsk
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-05-24 08:31:55 +0200
committerTimm Bäder <mail@baedert.org>2020-05-24 15:59:05 +0200
commit094788f1a37e090ffab3ffb37c380dae764e2252 (patch)
treed6c80868a457b791b50e6daafe9f19016fbfd00a /gsk
parent23e68c09886a3823353c4d8bc67fd59b43d2ea34 (diff)
downloadgtk+-094788f1a37e090ffab3ffb37c380dae764e2252.tar.gz
gl renderer: Refactor render_clipped_child
Diffstat (limited to 'gsk')
-rw-r--r--gsk/gl/gskglrenderer.c78
1 files changed, 40 insertions, 38 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 592796287f..8212ca30fd 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -1164,52 +1164,54 @@ render_clipped_child (GskGLRenderer *self,
ops_transform_bounds_modelview (builder, clip, &transformed_clip);
+ if (builder->clip_is_rectilinear)
+ {
+ /* Simple case: */
+ graphene_rect_intersection (&transformed_clip,
+ &builder->current_clip->bounds,
+ &intersection);
+
+ gsk_rounded_rect_init_from_rect (&child_clip, &intersection, 0.0f);
+
+ ops_push_clip (builder, &child_clip);
+ gsk_gl_renderer_add_render_ops (self, child, builder);
+ ops_pop_clip (builder);
+ return;
+ }
+
/* Intersection might end up having rounded corners again */
- if (!gsk_rounded_rect_is_rectilinear (builder->current_clip))
+ if (!rounded_inner_rect_contains_rect (builder->current_clip,
+ &transformed_clip))
{
- if (!rounded_inner_rect_contains_rect (builder->current_clip,
- &transformed_clip))
- {
- /* well fuck */
- const float scale = ops_get_scale (builder);
- gboolean is_offscreen;
- TextureRegion region;
- GskRoundedRect scaled_clip;
-
- memset (&scaled_clip, 0, sizeof (GskRoundedRect));
-
- scaled_clip.bounds.origin.x = clip->origin.x * scale;
- scaled_clip.bounds.origin.y = clip->origin.y * scale;
- scaled_clip.bounds.size.width = clip->size.width * scale;
- scaled_clip.bounds.size.height = clip->size.height * scale;
-
- ops_push_clip (builder, &scaled_clip);
- if (!add_offscreen_ops (self, builder, &child->bounds,
- child,
- &region, &is_offscreen,
- RESET_OPACITY | FORCE_OFFSCREEN))
- g_assert_not_reached ();
- ops_pop_clip (builder);
+ /* well fuck */
+ const float scale = ops_get_scale (builder);
+ gboolean is_offscreen;
+ TextureRegion region;
+ GskRoundedRect scaled_clip;
+ memset (&scaled_clip, 0, sizeof (GskRoundedRect));
- ops_set_program (builder, &self->programs->blit_program);
- ops_set_texture (builder, region.texture_id);
+ scaled_clip.bounds.origin.x = clip->origin.x * scale;
+ scaled_clip.bounds.origin.y = clip->origin.y * scale;
+ scaled_clip.bounds.size.width = clip->size.width * scale;
+ scaled_clip.bounds.size.height = clip->size.height * scale;
- load_offscreen_vertex_data (ops_draw (builder, NULL), child, builder);
- return;
- }
- }
+ ops_push_clip (builder, &scaled_clip);
+ if (!add_offscreen_ops (self, builder, &child->bounds,
+ child,
+ &region, &is_offscreen,
+ RESET_OPACITY | FORCE_OFFSCREEN))
+ g_assert_not_reached ();
+ ops_pop_clip (builder);
- /* Simple case: */
- graphene_rect_intersection (&transformed_clip,
- &builder->current_clip->bounds,
- &intersection);
- gsk_rounded_rect_init_from_rect (&child_clip, &intersection, 0.0f);
+ ops_set_program (builder, &self->programs->blit_program);
+ ops_set_texture (builder, region.texture_id);
+
+ load_offscreen_vertex_data (ops_draw (builder, NULL), child, builder);
+ return;
+ }
- ops_push_clip (builder, &child_clip);
- gsk_gl_renderer_add_render_ops (self, child, builder);
- ops_pop_clip (builder);
}
static inline void