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

Reply via email to