From: Timm Bäder Date: Sun, 17 May 2020 06:53:47 +0000 (+0200) Subject: gl renderer: Apply scaled clip when rendering offscreen clipped child X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~17^2~20 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=01c0acb707e2ac86b8b96a5cb077a94723b9a55e;p=gtk4.git gl renderer: Apply scaled clip when rendering offscreen clipped child --- diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index ea2c4d9243..2061a12fec 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -1177,20 +1177,27 @@ render_clipped_child (GskGLRenderer *self, &transformed_clip)) { /* well fuck */ + const float scale = ops_get_scale (builder); gboolean is_offscreen; TextureRegion region; + GskRoundedRect scaled_clip; - gsk_rounded_rect_init_from_rect (&child_clip, &transformed_clip, 0.0f); + memset (&scaled_clip, 0, sizeof (GskRoundedRect)); - ops_push_clip (builder, &child_clip); + 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, ®ion, &is_offscreen, - RESET_OPACITY | RESET_CLIP)) + RESET_OPACITY | FORCE_OFFSCREEN)) g_assert_not_reached (); - ops_pop_clip (builder); + ops_set_program (builder, &self->programs->blit_program); ops_set_texture (builder, region.texture_id);