From f67d99ca0edf794b82e41509553a098eddb87739 Mon Sep 17 00:00:00 2001 From: Seth Fowler Date: Wed, 26 Jun 2013 11:43:27 -0500 Subject: [PATCH] Bug 695763. Part 7. Invalidate img's if they are not decoded and we are asked to do a sync decode. r=matt.woodrow --- layout/generic/nsImageFrame.cpp | 13 +++++++++++++ layout/generic/nsImageFrame.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp index 40cf8c1a4da4..8d6713be4df8 100644 --- a/layout/generic/nsImageFrame.cpp +++ b/layout/generic/nsImageFrame.cpp @@ -1215,6 +1215,19 @@ nsDisplayImage::Paint(nsDisplayListBuilder* aBuilder, PaintImage(*aCtx, ToReferenceFrame(), mVisibleRect, mImage, flags); } +void +nsDisplayImage::ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder, + const nsDisplayItemGeometry* aGeometry, + nsRegion* aInvalidRegion) +{ + if (aBuilder->ShouldSyncDecodeImages() && mImage && !mImage->IsDecoded()) { + bool snap; + aInvalidRegion->Or(*aInvalidRegion, GetBounds(aBuilder, &snap)); + } + + nsDisplayImageContainer::ComputeInvalidationRegion(aBuilder, aGeometry, aInvalidRegion); +} + already_AddRefed nsDisplayImage::GetContainer(LayerManager* aManager, nsDisplayListBuilder* aBuilder) diff --git a/layout/generic/nsImageFrame.h b/layout/generic/nsImageFrame.h index 01307c992832..91b5bb5df17a 100644 --- a/layout/generic/nsImageFrame.h +++ b/layout/generic/nsImageFrame.h @@ -364,6 +364,9 @@ public: virtual ~nsDisplayImage() { MOZ_COUNT_DTOR(nsDisplayImage); } + virtual void ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder, + const nsDisplayItemGeometry* aGeometry, + nsRegion* aInvalidRegion) MOZ_OVERRIDE; virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx) MOZ_OVERRIDE;