summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-06-19 15:54:17 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-06-22 12:26:12 +0000
commit6e019f2ad5a5d6341d14762fba5a245da46ebeb3 (patch)
tree46d9fad85ac95ca999c2fffdc31a7eccc1f4420c
parent23747d6220fd039a802e873b00127f391076a8bb (diff)
Fix mismatch of updated scenegraphs when clipping
Regenerate the tree when different nodes are clipped. Task-number: QTBUG-68699 Change-Id: Ib59a0b92463c47f89b7a6c662abe532fb4130c3c Reviewed-by: Florian Bruhin <qt-project.org@the-compiler.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r--src/core/delegated_frame_node.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index c0f515ad8..7f791df29 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -810,6 +810,16 @@ static bool areRenderPassStructuresEqual(viz::CompositorFrame *frameData,
#endif // QT_NO_OPENGL
if (!areSharedQuadStatesEqual(quad->shared_quad_state, prevQuad->shared_quad_state))
return false;
+ if (quad->shared_quad_state->is_clipped && quad->visible_rect != prevQuad->visible_rect) {
+ gfx::Rect targetRect1 =
+ cc::MathUtil::MapEnclosingClippedRect(quad->shared_quad_state->quad_to_target_transform, quad->visible_rect);
+ gfx::Rect targetRect2 =
+ cc::MathUtil::MapEnclosingClippedRect(quad->shared_quad_state->quad_to_target_transform, prevQuad->visible_rect);
+ targetRect1.Intersect(quad->shared_quad_state->clip_rect);
+ targetRect2.Intersect(quad->shared_quad_state->clip_rect);
+ if (targetRect1.IsEmpty() != targetRect2.IsEmpty())
+ return false;
+ }
}
}
return true;