mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1255068 - Do not allow empty transaction transform changes if the scroll position has changed since the last paint. r=kats, r=mattwoodrow, a=ritu
MozReview-Commit-ID: 7exuhuf3HTJ *** Bug 1255068 - Add a check for null scrollid. r=kats MozReview-Commit-ID: 15lbTMb76np
This commit is contained in:
parent
d7175ca42c
commit
3dadaea877
@ -5276,6 +5276,40 @@ nsIFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
|
||||
|
||||
/*static*/ uint8_t nsIFrame::sLayerIsPrerenderedDataKey;
|
||||
|
||||
static bool
|
||||
DoesLayerHaveOutOfDateFrameMetrics(Layer* aLayer)
|
||||
{
|
||||
for (uint32_t i = 0; i < aLayer->GetFrameMetricsCount(); i++) {
|
||||
const FrameMetrics& metrics = aLayer->GetFrameMetrics(i);
|
||||
if (!metrics.IsScrollable()) {
|
||||
continue;
|
||||
}
|
||||
nsIScrollableFrame* scrollableFrame =
|
||||
nsLayoutUtils::FindScrollableFrameFor(metrics.GetScrollId());
|
||||
if (!scrollableFrame) {
|
||||
// This shouldn't happen, so let's do the safe thing and trigger a full
|
||||
// paint if it does.
|
||||
return true;
|
||||
}
|
||||
nsPoint scrollPosition = scrollableFrame->GetScrollPosition();
|
||||
if (metrics.GetScrollOffset() != CSSPoint::FromAppUnits(scrollPosition)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
DoesLayerOrAncestorsHaveOutOfDateFrameMetrics(Layer* aLayer)
|
||||
{
|
||||
for (Layer* layer = aLayer; layer; layer = layer->GetParent()) {
|
||||
if (DoesLayerHaveOutOfDateFrameMetrics(layer)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
nsIFrame::TryUpdateTransformOnly(Layer** aLayerResult)
|
||||
{
|
||||
@ -5288,6 +5322,14 @@ nsIFrame::TryUpdateTransformOnly(Layer** aLayerResult)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DoesLayerOrAncestorsHaveOutOfDateFrameMetrics(layer)) {
|
||||
// At least one scroll frame that can affect the position of this layer
|
||||
// has changed its scroll offset since the last paint. Schedule a full
|
||||
// paint to make sure that this layer's transform and all the frame
|
||||
// metrics that affect it are in sync.
|
||||
return false;
|
||||
}
|
||||
|
||||
gfx::Matrix4x4 transform3d;
|
||||
if (!nsLayoutUtils::GetLayerTransformForFrame(this, &transform3d)) {
|
||||
// We're not able to compute a layer transform that we know would
|
||||
|
Loading…
Reference in New Issue
Block a user