summaryrefslogtreecommitdiffstats
path: root/src/core/delegated_frame_node.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-06-26 15:28:31 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-06-26 15:30:24 +0200
commit6cdd1dc5b48dfe54de4d926fc9a64c46f3fc75f2 (patch)
treed4b626a6041cac6e17bbd825d139b201e708f43d /src/core/delegated_frame_node.cpp
parent7757ec1a562ae36b65a6cae93b3cd308247755ef (diff)
parent6e019f2ad5a5d6341d14762fba5a245da46ebeb3 (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.cpp13
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