mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 16:32:59 +00:00
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:
parent
2fc408988c
commit
70ea1d87f1
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user