From: Benjamin Otte Date: Thu, 7 Sep 2023 20:57:57 +0000 (+0200) Subject: rendernode: Shadow nodes need offscreen for opacity X-Git-Tag: archive/raspbian/4.12.4+ds-3+rpi1^2~21^2~2^2~17 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=77d5b5e94fdfc0805c6c0dea52fa611f7fc503fe;p=gtk4.git rendernode: Shadow nodes need offscreen for opacity Otherwise the shadow will not be properly computed as opaque regions become translucent after applying opacity. Testcase included. --- diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c index 08bdc58e47..80bf406ae3 100644 --- a/gsk/gskrendernodeimpl.c +++ b/gsk/gskrendernodeimpl.c @@ -4593,7 +4593,7 @@ gsk_shadow_node_new (GskRenderNode *child, self = gsk_render_node_alloc (GSK_SHADOW_NODE); node = (GskRenderNode *) self; - node->offscreen_for_opacity = child->offscreen_for_opacity; + node->offscreen_for_opacity = TRUE; self->child = gsk_render_node_ref (child); self->n_shadows = n_shadows; diff --git a/testsuite/gsk/compare/shadow-opacity.node b/testsuite/gsk/compare/shadow-opacity.node new file mode 100644 index 0000000000..d9bded6b84 --- /dev/null +++ b/testsuite/gsk/compare/shadow-opacity.node @@ -0,0 +1,10 @@ +opacity { + opacity: 0.6; + child: shadow { + shadows: rgb(255,0,0) 10 10; + child: color { + bounds: 0 0 50 50; + color: rgb(0,0,255); + } + } +} diff --git a/testsuite/gsk/compare/shadow-opacity.png b/testsuite/gsk/compare/shadow-opacity.png new file mode 100644 index 0000000000..ab25ef430a Binary files /dev/null and b/testsuite/gsk/compare/shadow-opacity.png differ diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build index eb76c4a889..944d4f8f99 100644 --- a/testsuite/gsk/meson.build +++ b/testsuite/gsk/meson.build @@ -90,6 +90,7 @@ compare_render_tests = [ 'scaled-cairo', 'scaled-texture', 'shadow-in-opacity', + 'shadow-opacity', 'texture-scale-magnify-10000x', 'texture-scale-magnify-rotate', 'texture-scale-stripes',