Bug 539356 - Handled scrolled inactive layers trees correctly. r=roc

This commit is contained in:
Matt Woodrow 2012-09-17 10:57:22 +12:00
parent a980777bb7
commit 6ad714c685
3 changed files with 13 additions and 0 deletions

View File

@ -91,6 +91,8 @@ struct LayerPropertiesBase : public LayerProperties
virtual nsIntRect ComputeDifferences(Layer* aRoot,
NotifySubDocInvalidationFunc aCallback);
virtual void MoveBy(const nsIntPoint& aOffset);
nsIntRect ComputeChange(NotifySubDocInvalidationFunc aCallback)
{
bool transformChanged = mTransform != mLayer->GetTransform();
@ -343,6 +345,12 @@ LayerPropertiesBase::ComputeDifferences(Layer* aRoot, NotifySubDocInvalidationFu
return ComputeChange(aCallback);
}
}
void
LayerPropertiesBase::MoveBy(const nsIntPoint& aOffset)
{
mTransform.TranslatePost(gfxPoint3D(aOffset.x, aOffset.y, 0));
}
} // namespace layers
} // namespace mozilla

View File

@ -59,6 +59,9 @@ struct LayerProperties
*/
virtual nsIntRect ComputeDifferences(Layer* aRoot,
NotifySubDocInvalidationFunc aCallback) = 0;
virtual void MoveBy(const nsIntPoint& aOffset) = 0;
};
} // namespace layers

View File

@ -2378,6 +2378,8 @@ FrameLayerBuilder::AddThebesDisplayItem(ThebesLayer* aLayer,
tempManager->SetRoot(layer);
layerBuilder->WillEndTransaction();
nsIntPoint offset = GetLastPaintOffset(aLayer) - GetTranslationForThebesLayer(aLayer);
props->MoveBy(-offset);
nsIntRect invalid = props->ComputeDifferences(layer, nullptr);
if (aLayerState == LAYER_SVG_EFFECTS) {
invalid = nsSVGIntegrationUtils::AdjustInvalidAreaForSVGEffects(aItem->GetUnderlyingFrame(), invalid);