diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-26 15:28:31 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-26 15:30:24 +0200 |
commit | 6cdd1dc5b48dfe54de4d926fc9a64c46f3fc75f2 (patch) | |
tree | d4b626a6041cac6e17bbd825d139b201e708f43d /src/core/delegated_frame_node.cpp | |
parent | 7757ec1a562ae36b65a6cae93b3cd308247755ef (diff) | |
parent | 6e019f2ad5a5d6341d14762fba5a245da46ebeb3 (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
.qmake.conf
configure.json
src/3rdparty
tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
Change-Id: Id79ff6cf01c2db3a2044881ddcbf044abdf84936
Diffstat (limited to 'src/core/delegated_frame_node.cpp')
-rw-r--r-- | src/core/delegated_frame_node.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp index f829813ff..5b0983924 100644 --- a/src/core/delegated_frame_node.cpp +++ b/src/core/delegated_frame_node.cpp @@ -815,6 +815,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; @@ -857,7 +867,8 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, QScopedPointer<DelegatedNodeTreeHandler> nodeHandler; const QSizeF viewportSizeInPt = apiDelegate->screenRect().size(); - const QSize viewportSize = (viewportSizeInPt * devicePixelRatio).toSize(); + const QSizeF viewportSizeF = viewportSizeInPt * devicePixelRatio; + const QSize viewportSize(std::ceil(viewportSizeF.width()), std::ceil(viewportSizeF.height())); // We first compare if the render passes from the previous frame data are structurally // equivalent to the render passes in the current frame data. If they are, we are going |