зеркало из https://github.com/mozilla/gecko-dev.git
Bug 523988 - Dirty Tiles show up when trying to zoom during a page load [r=mfinkle]
This commit is contained in:
Родитель
1a5c97365a
Коммит
635cb33b18
|
@ -778,10 +778,14 @@ BrowserView.prototype = {
|
||||||
BrowserView.Util.getBrowserDOMWindowUtils(this._browser).clearMozAfterPaintEvents();
|
BrowserView.Util.getBrowserDOMWindowUtils(this._browser).clearMozAfterPaintEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let vr = this.getVisibleRect();
|
||||||
this._tileManager.viewportChangeHandler(bvs.viewportRect,
|
this._tileManager.viewportChangeHandler(bvs.viewportRect,
|
||||||
BrowserView.Util.visibleRectToCriticalRect(this.getVisibleRect(), bvs),
|
BrowserView.Util.visibleRectToCriticalRect(vr, bvs),
|
||||||
viewportSizeChanged,
|
viewportSizeChanged,
|
||||||
dirtyAll);
|
dirtyAll);
|
||||||
|
|
||||||
|
let rects = vr.subtract(bvs.viewportRect);
|
||||||
|
this._tileManager.clearRects(rects);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -236,6 +236,28 @@ TileManager.prototype = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erase everything in these rects. Useful for tiles that are outside of the viewport rect but
|
||||||
|
* still visible.
|
||||||
|
*/
|
||||||
|
clearRects: function clearRects(rects) {
|
||||||
|
let criticalIsDirty = false;
|
||||||
|
let criticalRect = this._criticalRect;
|
||||||
|
let tc = this._tileCache;
|
||||||
|
let crawler = this._crawler;
|
||||||
|
|
||||||
|
for (let i = rects.length - 1; i >= 0; --i) {
|
||||||
|
let rect = rects[i];
|
||||||
|
|
||||||
|
BEGIN_FOREACH_IN_RECT(rect, tc, tile)
|
||||||
|
tile.clear(rect);
|
||||||
|
END_FOREACH_IN_RECT
|
||||||
|
}
|
||||||
|
|
||||||
|
if (criticalIsDirty && doCriticalRender)
|
||||||
|
this.criticalRectPaint();
|
||||||
|
},
|
||||||
|
|
||||||
dirtyRects: function dirtyRects(rects, doCriticalRender) {
|
dirtyRects: function dirtyRects(rects, doCriticalRender) {
|
||||||
let criticalIsDirty = false;
|
let criticalIsDirty = false;
|
||||||
let criticalRect = this._criticalRect;
|
let criticalRect = this._criticalRect;
|
||||||
|
@ -252,8 +274,7 @@ TileManager.prototype = {
|
||||||
else
|
else
|
||||||
criticalIsDirty = true;
|
criticalIsDirty = true;
|
||||||
|
|
||||||
let intersection = tile.boundRect.intersect(rects[i]);
|
tile.markDirty(rects[i]);
|
||||||
tile.markDirty(intersection);
|
|
||||||
|
|
||||||
if (crawler)
|
if (crawler)
|
||||||
crawler.enqueue(tile.i, tile.j);
|
crawler.enqueue(tile.i, tile.j);
|
||||||
|
@ -775,6 +796,15 @@ TileManager.Tile.prototype = {
|
||||||
|
|
||||||
isDirty: function isDirty() { return this._dirtyTileCanvas; },
|
isDirty: function isDirty() { return this._dirtyTileCanvas; },
|
||||||
|
|
||||||
|
/** Clear region in rect. */
|
||||||
|
clear: function clear(rect) {
|
||||||
|
let boundRect = this.boundRect;
|
||||||
|
let region = rect.intersect(boundRect).expandToIntegers().translate(-boundRect.left, -boundRect.top);
|
||||||
|
let ctx = this._canvas.getContext("2d");
|
||||||
|
ctx.fillStyle = "white";
|
||||||
|
ctx.fillRect(region.left, region.top, region.right - region.left, region.bottom - region.top);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This will mark dirty at least everything in dirtyRect (which must be
|
* This will mark dirty at least everything in dirtyRect (which must be
|
||||||
* specified in canvas coordinates). If dirtyRect is not given then
|
* specified in canvas coordinates). If dirtyRect is not given then
|
||||||
|
|
Загрузка…
Ссылка в новой задаче