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*/ 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
|
bool
|
||||||
nsIFrame::TryUpdateTransformOnly(Layer** aLayerResult)
|
nsIFrame::TryUpdateTransformOnly(Layer** aLayerResult)
|
||||||
{
|
{
|
||||||
@ -5288,6 +5322,14 @@ nsIFrame::TryUpdateTransformOnly(Layer** aLayerResult)
|
|||||||
return false;
|
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;
|
gfx::Matrix4x4 transform3d;
|
||||||
if (!nsLayoutUtils::GetLayerTransformForFrame(this, &transform3d)) {
|
if (!nsLayoutUtils::GetLayerTransformForFrame(this, &transform3d)) {
|
||||||
// We're not able to compute a layer transform that we know would
|
// We're not able to compute a layer transform that we know would
|
||||||
|
Loading…
Reference in New Issue
Block a user