Bug 539354. When scrolling an area that was partially outside the window into view, make sure we invalidate the destination area on Mac. r=mstange

--HG--
extra : rebase_source : 4cb48c2bc49926d72b00bf3baa59465c149b6d6c
This commit is contained in:
Robert O'Callahan 2010-02-02 12:16:09 +13:00
parent 2fc408988c
commit 70ea1d87f1
2 changed files with 17 additions and 1 deletions

View File

@ -1297,7 +1297,7 @@ AddItemsToRegion(nsDisplayListBuilder* aBuilder, nsDisplayList* aList,
nsRegion clippedOutDestination;
clippedOutDestination.Sub(aUpdateRect, clip);
#ifdef DEBUG
PrintAddedRegion("Adding region for clipped out source frame %p",
PrintAddedRegion("Adding region for clipped out destination frame %p",
clipFrame, clippedOutDestination);
#endif
aRegion->Or(*aRegion, clippedOutDestination);

View File

@ -1760,6 +1760,22 @@ void nsChildView::Scroll(const nsIntPoint& aDelta,
}
}
#endif // NS_LEOPARD_AND_LATER
// Invalidate the area that was scrolled into view from outside the window
// First, compute the destination region whose source was outside the
// window. We do this by subtracting from destRegion the window bounds,
// translated by the scroll amount.
NSView* rootView = [[mView window] contentView];
NSRect rootViewRect = [mView convertRect:[rootView bounds] fromView: rootView];
nsIntRect windowBounds;
NSRectToGeckoRect(rootViewRect, windowBounds);
destRegion.Sub(destRegion, windowBounds + aDelta);
nsIntRegionRectIterator iter(destRegion);
const nsIntRect* invalidate;
while ((invalidate = iter.Next()) != nsnull) {
NSRect rect;
GeckoRectToNSRect(*invalidate, rect);
[mView setNeedsDisplayInRect:rect];
}
// Leopard, at least, has a nasty bug where calling scrollRect:by: doesn't
// actually trigger a window update. A window update is only triggered