void Decoder::FlushInvalidations() { NS_ABORT_IF_FALSE(!HasDecoderError(), "Not allowed to make more decoder calls after error!"); // If we've got an empty invalidation rect, we have nothing to do if (mInvalidRect.IsEmpty()) return; if (mObserver) { #ifdef XP_MACOSX // Bug 703231 // Because of high quality down sampling on mac we show scan lines while decoding. // Bypass this problem by redrawing the border. if (mImageMetadata.HasSize()) { nsIntRect mImageBound(0, 0, mImageMetadata.GetWidth(), mImageMetadata.GetHeight()); mInvalidRect.Inflate(1); mInvalidRect = mInvalidRect.Intersect(mImageBound); } #endif mObserver->FrameChanged(&mInvalidRect); } // Clear the invalidation rectangle mInvalidRect.SetEmpty(); }
void Decoder::FlushInvalidations() { NS_ABORT_IF_FALSE(!HasDecoderError(), "Not allowed to make more decoder calls after error!"); // If we've got an empty invalidation rect, we have nothing to do if (mInvalidRect.IsEmpty()) return; // Tell the image that it's been updated mImage.FrameUpdated(mFrameCount - 1, mInvalidRect); // Fire OnDataAvailable if (mObserver) { #ifdef XP_MACOSX // Bug 703231 // Because of high quality down sampling on mac we show scan lines while decoding. // Bypass this problem by redrawing the border. PRInt32 width; PRInt32 height; mImage.GetWidth(&width); mImage.GetHeight(&height); nsIntRect mImageBound(0, 0, width, height); mInvalidRect.Inflate(1); mInvalidRect = mInvalidRect.Intersect(mImageBound); #endif bool isCurrentFrame = mImage.GetCurrentFrameIndex() == (mFrameCount - 1); mObserver->OnDataAvailable(nsnull, isCurrentFrame, &mInvalidRect); } // Clear the invalidation rectangle mInvalidRect.SetEmpty(); }