Title: [110495] trunk/Source/WebCore
- Revision
- 110495
- Author
- [email protected]
- Date
- 2012-03-12 15:48:42 -0700 (Mon, 12 Mar 2012)
Log Message
Use smaller tiles for right and bottom edges
https://bugs.webkit.org/show_bug.cgi?id=80893
<rdar://problem/11032873>
Reviewed by Sam Weinig.
* platform/graphics/ca/mac/TileCache.mm:
(WebCore::TileCache::rectForTileIndex):
Intersect the rect with the tile cache bounds.
(WebCore::TileCache::revalidateTiles):
Resize already existing tiles if needed.
(WebCore::TileCache::createTileLayer):
This now takes a tile rect. Use setFrame instead of setting the bounds and position separately.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (110494 => 110495)
--- trunk/Source/WebCore/ChangeLog 2012-03-12 22:45:47 UTC (rev 110494)
+++ trunk/Source/WebCore/ChangeLog 2012-03-12 22:48:42 UTC (rev 110495)
@@ -1,3 +1,21 @@
+2012-03-12 Anders Carlsson <[email protected]>
+
+ Use smaller tiles for right and bottom edges
+ https://bugs.webkit.org/show_bug.cgi?id=80893
+ <rdar://problem/11032873>
+
+ Reviewed by Sam Weinig.
+
+ * platform/graphics/ca/mac/TileCache.mm:
+ (WebCore::TileCache::rectForTileIndex):
+ Intersect the rect with the tile cache bounds.
+
+ (WebCore::TileCache::revalidateTiles):
+ Resize already existing tiles if needed.
+
+ (WebCore::TileCache::createTileLayer):
+ This now takes a tile rect. Use setFrame instead of setting the bounds and position separately.
+
2012-03-12 Enrica Casucci <[email protected]>
WebKit2: remove NSPasteboard access for promised data from the WebProcess
Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h (110494 => 110495)
--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h 2012-03-12 22:45:47 UTC (rev 110494)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.h 2012-03-12 22:48:42 UTC (rev 110495)
@@ -86,7 +86,7 @@
void revalidateTiles();
WebTileLayer* tileLayerAtIndex(const TileIndex&) const;
- RetainPtr<WebTileLayer> createTileLayer();
+ RetainPtr<WebTileLayer> createTileLayer(const IntRect&);
bool shouldShowRepaintCounters() const;
Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm (110494 => 110495)
--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm 2012-03-12 22:45:47 UTC (rev 110494)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm 2012-03-12 22:48:42 UTC (rev 110495)
@@ -237,7 +237,10 @@
IntRect TileCache::rectForTileIndex(const TileIndex& tileIndex) const
{
- return IntRect(IntPoint(tileIndex.x() * m_tileSize.width(), tileIndex.y() * m_tileSize.height()), m_tileSize);
+ IntRect rect(tileIndex.x() * m_tileSize.width(), tileIndex.y() * m_tileSize.height(), m_tileSize.width(), m_tileSize.height());
+ rect.intersect(bounds());
+
+ return rect;
}
void TileCache::getTileIndexRangeForRect(const IntRect& rect, TileIndex& topLeft, TileIndex& bottomRight)
@@ -310,24 +313,29 @@
TileIndex bottomRight;
getTileIndexRangeForRect(tileCoverageRect, topLeft, bottomRight);
- bool didCreateNewTiles = false;
+ bool didCreateOrResizeTiles = false;
for (int y = topLeft.y(); y <= bottomRight.y(); ++y) {
for (int x = topLeft.x(); x <= bottomRight.x(); ++x) {
TileIndex tileIndex(x, y);
+ IntRect tileRect = rectForTileIndex(tileIndex);
RetainPtr<WebTileLayer>& tileLayer = m_tiles.add(tileIndex, 0).first->second;
if (tileLayer) {
- // We already have a layer for this tile.
+ // We already have a layer for this tile. Ensure that its size is correct.
+ if (!CGSizeEqualToSize([tileLayer.get() frame].size, tileRect.size())) {
+ [tileLayer.get() setFrame:tileRect];
+ [tileLayer.get() setNeedsDisplay];
+ didCreateOrResizeTiles = true;
+ }
continue;
}
- didCreateNewTiles = true;
+ didCreateOrResizeTiles = true;
- tileLayer = createTileLayer();
+ tileLayer = createTileLayer(tileRect);
[tileLayer.get() setNeedsDisplay];
- [tileLayer.get() setPosition:CGPointMake(x * m_tileSize.width(), y * m_tileSize.height())];
[m_tileContainerLayer.get() addSublayer:tileLayer.get()];
}
}
@@ -339,7 +347,7 @@
m_tileCoverageRect.unite(rectForTileIndex(tileIndex));
}
- if (!didCreateNewTiles)
+ if (!didCreateOrResizeTiles)
return;
platformLayer->owner()->platformCALayerDidCreateTiles();
@@ -350,11 +358,11 @@
return m_tiles.get(index).get();
}
-RetainPtr<WebTileLayer> TileCache::createTileLayer()
+RetainPtr<WebTileLayer> TileCache::createTileLayer(const IntRect& tileRect)
{
RetainPtr<WebTileLayer> layer = adoptNS([[WebTileLayer alloc] init]);
- [layer.get() setBounds:CGRectMake(0, 0, m_tileSize.width(), m_tileSize.height())];
[layer.get() setAnchorPoint:CGPointZero];
+ [layer.get() setFrame:tileRect];
[layer.get() setTileCache:this];
[layer.get() setBorderColor:m_tileDebugBorderColor.get()];
[layer.get() setBorderWidth:m_tileDebugBorderWidth];
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes