Index: cc/tiled_layer.cc |
diff --git a/cc/tiled_layer.cc b/cc/tiled_layer.cc |
index 7232042dec28cb639050764f2aa41122323db1f8..fd2b4d5e5ede902de1043047ca8fc549b7ec9714 100644 |
--- a/cc/tiled_layer.cc |
+++ b/cc/tiled_layer.cc |
@@ -8,11 +8,13 @@ |
#include "Region.h" |
#include "base/basictypes.h" |
+#include "cc/geometry.h" |
#include "cc/layer_impl.h" |
#include "cc/layer_tree_host.h" |
#include "cc/overdraw_metrics.h" |
#include "cc/tiled_layer_impl.h" |
#include "third_party/khronos/GLES2/gl2.h" |
+#include "ui/gfx/rect_conversions.h" |
using namespace std; |
using WebKit::WebTransformationMatrix; |
@@ -39,7 +41,7 @@ public: |
LayerUpdater::Resource* updaterResource() { return m_updaterResource.get(); } |
PrioritizedTexture* managedTexture() { return m_updaterResource->texture(); } |
- bool isDirty() const { return !dirtyRect.isEmpty(); } |
+ bool isDirty() const { return !dirtyRect.IsEmpty(); } |
// Reset update state for the current frame. This should occur before painting |
// for all layers. Since painting one layer can invalidate another layer |
@@ -47,7 +49,7 @@ public: |
// such that invalidations during painting won't prevent them from being pushed. |
void resetUpdateState() |
{ |
- updateRect = IntRect(); |
+ updateRect = gfx::Rect(); |
occluded = false; |
partialUpdate = false; |
validForFrame = !isDirty(); |
@@ -60,11 +62,11 @@ public: |
{ |
validForFrame = true; |
updateRect = dirtyRect; |
- dirtyRect = IntRect(); |
+ dirtyRect = gfx::Rect(); |
} |
- IntRect dirtyRect; |
- IntRect updateRect; |
+ gfx::Rect dirtyRect; |
+ gfx::Rect updateRect; |
bool partialUpdate; |
bool validForFrame; |
bool occluded; |
@@ -90,7 +92,7 @@ TiledLayer::TiledLayer() |
, m_failedUpdate(false) |
, m_tilingOption(AutoTile) |
{ |
- m_tiler = LayerTilingData::create(IntSize(), LayerTilingData::HasBorderTexels); |
+ m_tiler = LayerTilingData::create(gfx::Size(), LayerTilingData::HasBorderTexels); |
} |
TiledLayer::~TiledLayer() |
@@ -106,22 +108,22 @@ void TiledLayer::updateTileSizeAndTilingOption() |
{ |
DCHECK(layerTreeHost()); |
- const IntSize& defaultTileSize = layerTreeHost()->settings().defaultTileSize; |
- const IntSize& maxUntiledLayerSize = layerTreeHost()->settings().maxUntiledLayerSize; |
+ gfx::Size defaultTileSize = layerTreeHost()->settings().defaultTileSize; |
+ gfx::Size maxUntiledLayerSize = layerTreeHost()->settings().maxUntiledLayerSize; |
int layerWidth = contentBounds().width(); |
int layerHeight = contentBounds().height(); |
- const IntSize tileSize(min(defaultTileSize.width(), layerWidth), min(defaultTileSize.height(), layerHeight)); |
+ gfx::Size tileSize(min(defaultTileSize.width(), layerWidth), min(defaultTileSize.height(), layerHeight)); |
// Tile if both dimensions large, or any one dimension large and the other |
// extends into a second tile but the total layer area isn't larger than that |
// of the largest possible untiled layer. This heuristic allows for long skinny layers |
// (e.g. scrollbars) that are Nx1 tiles to minimize wasted texture space but still avoids |
// creating very large tiles. |
- const bool anyDimensionLarge = layerWidth > maxUntiledLayerSize.width() || layerHeight > maxUntiledLayerSize.height(); |
- const bool anyDimensionOneTile = (layerWidth <= defaultTileSize.width() || layerHeight <= defaultTileSize.height()) |
+ bool anyDimensionLarge = layerWidth > maxUntiledLayerSize.width() || layerHeight > maxUntiledLayerSize.height(); |
+ bool anyDimensionOneTile = (layerWidth <= defaultTileSize.width() || layerHeight <= defaultTileSize.height()) |
&& (layerWidth * layerHeight) <= (maxUntiledLayerSize.width() * maxUntiledLayerSize.height()); |
- const bool autoTiled = anyDimensionLarge && !anyDimensionOneTile; |
+ bool autoTiled = anyDimensionLarge && !anyDimensionOneTile; |
bool isTiled; |
if (m_tilingOption == AlwaysTile) |
@@ -131,30 +133,30 @@ void TiledLayer::updateTileSizeAndTilingOption() |
else |
isTiled = autoTiled; |
- IntSize requestedSize = isTiled ? tileSize : contentBounds(); |
+ gfx::Size requestedSize = isTiled ? tileSize : contentBounds(); |
const int maxSize = layerTreeHost()->rendererCapabilities().maxTextureSize; |
- IntSize clampedSize = requestedSize.shrunkTo(IntSize(maxSize, maxSize)); |
+ gfx::Size clampedSize = ClampSizeFromAbove(requestedSize, gfx::Size(maxSize, maxSize)); |
setTileSize(clampedSize); |
} |
void TiledLayer::updateBounds() |
{ |
- IntSize oldBounds = m_tiler->bounds(); |
- IntSize newBounds = contentBounds(); |
+ gfx::Size oldBounds = m_tiler->bounds(); |
+ gfx::Size newBounds = contentBounds(); |
if (oldBounds == newBounds) |
return; |
m_tiler->setBounds(newBounds); |
// Invalidate any areas that the new bounds exposes. |
- Region oldRegion(IntRect(IntPoint(), oldBounds)); |
- Region newRegion(IntRect(IntPoint(), newBounds)); |
+ Region oldRegion = IntRect(IntPoint(), cc::IntSize(oldBounds)); |
+ Region newRegion = IntRect(IntPoint(), cc::IntSize(newBounds)); |
newRegion.subtract(oldRegion); |
Vector<WebCore::IntRect> rects = newRegion.rects(); |
for (size_t i = 0; i < rects.size(); ++i) |
- invalidateContentRect(rects[i]); |
+ invalidateContentRect(cc::IntRect(rects[i])); |
} |
-void TiledLayer::setTileSize(const IntSize& size) |
+void TiledLayer::setTileSize(const gfx::Size& size) |
{ |
m_tiler->setTileSize(size); |
} |
@@ -269,7 +271,7 @@ UpdatableTile* TiledLayer::createTile(int i, int j) |
return addedTile; |
} |
-void TiledLayer::setNeedsDisplayRect(const FloatRect& dirtyRect) |
+void TiledLayer::setNeedsDisplayRect(const gfx::RectF& dirtyRect) |
{ |
invalidateContentRect(layerRectToContentRect(dirtyRect)); |
ContentsScalingLayer::setNeedsDisplayRect(dirtyRect); |
@@ -289,10 +291,10 @@ void TiledLayer::setUseLCDText(bool useLCDText) |
setBorderTexelOption(borderTexelOption); |
} |
-void TiledLayer::invalidateContentRect(const IntRect& contentRect) |
+void TiledLayer::invalidateContentRect(const gfx::Rect& contentRect) |
{ |
updateBounds(); |
- if (m_tiler->isEmpty() || contentRect.isEmpty() || m_skipsDraw) |
+ if (m_tiler->isEmpty() || contentRect.IsEmpty() || m_skipsDraw) |
return; |
for (LayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begin(); iter != m_tiler->tiles().end(); ++iter) { |
@@ -301,16 +303,16 @@ void TiledLayer::invalidateContentRect(const IntRect& contentRect) |
// FIXME: This should not ever be null. |
if (!tile) |
continue; |
- IntRect bound = m_tiler->tileRect(tile); |
- bound.intersect(contentRect); |
- tile->dirtyRect.unite(bound); |
+ gfx::Rect bound = m_tiler->tileRect(tile); |
+ bound.Intersect(contentRect); |
+ tile->dirtyRect.Union(bound); |
} |
} |
// Returns true if tile is dirty and only part of it needs to be updated. |
bool TiledLayer::tileOnlyNeedsPartialUpdate(UpdatableTile* tile) |
{ |
- return !tile->dirtyRect.contains(m_tiler->tileRect(tile)) && tile->managedTexture()->haveBackingTexture(); |
+ return !tile->dirtyRect.Contains(m_tiler->tileRect(tile)) && tile->managedTexture()->haveBackingTexture(); |
} |
bool TiledLayer::updateTiles(int left, int top, int right, int bottom, ResourceUpdateQueue& queue, const OcclusionTracker* occlusion, RenderingStats& stats, bool& didPaint) |
@@ -324,12 +326,12 @@ bool TiledLayer::updateTiles(int left, int top, int right, int bottom, ResourceU |
return false; |
} |
- IntRect paintRect = markTilesForUpdate(left, top, right, bottom, ignoreOcclusions); |
+ gfx::Rect paintRect = markTilesForUpdate(left, top, right, bottom, ignoreOcclusions); |
if (occlusion) |
- occlusion->overdrawMetrics().didPaint(paintRect); |
+ occlusion->overdrawMetrics().didPaint(cc::IntRect(paintRect)); |
- if (paintRect.isEmpty()) |
+ if (paintRect.IsEmpty()) |
return true; |
didPaint = true; |
@@ -355,7 +357,7 @@ void TiledLayer::markOcclusionsAndRequestTextures(int left, int top, int right, |
if (!tile) |
continue; |
DCHECK(!tile->occluded); // Did resetUpdateState get skipped? Are we doing more than one occlusion pass? |
- IntRect visibleTileRect = intersection(m_tiler->tileBounds(i, j), visibleContentRect()); |
+ gfx::Rect visibleTileRect = gfx::IntersectRects(m_tiler->tileBounds(i, j), visibleContentRect()); |
if (occlusion && occlusion->occluded(renderTarget(), visibleTileRect, drawTransform(), drawTransformIsAnimating(), drawableContentRect())) { |
tile->occluded = true; |
occludedTileCount++; |
@@ -397,9 +399,9 @@ bool TiledLayer::haveTexturesForTiles(int left, int top, int right, int bottom, |
return true; |
} |
-IntRect TiledLayer::markTilesForUpdate(int left, int top, int right, int bottom, bool ignoreOcclusions) |
+gfx::Rect TiledLayer::markTilesForUpdate(int left, int top, int right, int bottom, bool ignoreOcclusions) |
{ |
- IntRect paintRect; |
+ gfx::Rect paintRect; |
for (int j = top; j <= bottom; ++j) { |
for (int i = left; i <= right; ++i) { |
UpdatableTile* tile = tileAt(i, j); |
@@ -424,20 +426,19 @@ IntRect TiledLayer::markTilesForUpdate(int left, int top, int right, int bottom, |
} |
} |
- paintRect.unite(tile->dirtyRect); |
+ paintRect.Union(tile->dirtyRect); |
tile->markForUpdate(); |
} |
} |
return paintRect; |
} |
-void TiledLayer::updateTileTextures(const IntRect& paintRect, int left, int top, int right, int bottom, ResourceUpdateQueue& queue, const OcclusionTracker* occlusion, RenderingStats& stats) |
+void TiledLayer::updateTileTextures(const gfx::Rect& paintRect, int left, int top, int right, int bottom, ResourceUpdateQueue& queue, const OcclusionTracker* occlusion, RenderingStats& stats) |
{ |
// The updateRect should be in layer space. So we have to convert the paintRect from content space to layer space. |
- m_updateRect = FloatRect(paintRect); |
float widthScale = bounds().width() / static_cast<float>(contentBounds().width()); |
float heightScale = bounds().height() / static_cast<float>(contentBounds().height()); |
- m_updateRect.scale(widthScale, heightScale); |
+ m_updateRect = gfx::ScaleRect(paintRect, widthScale, heightScale); |
// Calling prepareToUpdate() calls into WebKit to paint, which may have the side |
// effect of disabling compositing, which causes our reference to the texture updater to be deleted. |
@@ -455,49 +456,49 @@ void TiledLayer::updateTileTextures(const IntRect& paintRect, int left, int top, |
if (!tile) |
continue; |
- IntRect tileRect = m_tiler->tileBounds(i, j); |
+ gfx::Rect tileRect = m_tiler->tileBounds(i, j); |
// Use updateRect as the above loop copied the dirty rect for this frame to updateRect. |
- const IntRect& dirtyRect = tile->updateRect; |
- if (dirtyRect.isEmpty()) |
+ const gfx::Rect& dirtyRect = tile->updateRect; |
+ if (dirtyRect.IsEmpty()) |
continue; |
// Save what was painted opaque in the tile. Keep the old area if the paint didn't touch it, and didn't paint some |
// other part of the tile opaque. |
- IntRect tilePaintedRect = intersection(tileRect, paintRect); |
- IntRect tilePaintedOpaqueRect = intersection(tileRect, cc::IntRect(paintedOpaqueRect)); |
- if (!tilePaintedRect.isEmpty()) { |
- IntRect paintInsideTileOpaqueRect = intersection(tile->opaqueRect(), tilePaintedRect); |
- bool paintInsideTileOpaqueRectIsNonOpaque = !tilePaintedOpaqueRect.contains(paintInsideTileOpaqueRect); |
- bool opaquePaintNotInsideTileOpaqueRect = !tilePaintedOpaqueRect.isEmpty() && !tile->opaqueRect().contains(tilePaintedOpaqueRect); |
+ gfx::Rect tilePaintedRect = gfx::IntersectRects(tileRect, paintRect); |
+ gfx::Rect tilePaintedOpaqueRect = gfx::IntersectRects(tileRect, paintedOpaqueRect); |
+ if (!tilePaintedRect.IsEmpty()) { |
+ gfx::Rect paintInsideTileOpaqueRect = gfx::IntersectRects(tile->opaqueRect(), tilePaintedRect); |
+ bool paintInsideTileOpaqueRectIsNonOpaque = !tilePaintedOpaqueRect.Contains(paintInsideTileOpaqueRect); |
+ bool opaquePaintNotInsideTileOpaqueRect = !tilePaintedOpaqueRect.IsEmpty() && !tile->opaqueRect().Contains(tilePaintedOpaqueRect); |
if (paintInsideTileOpaqueRectIsNonOpaque || opaquePaintNotInsideTileOpaqueRect) |
tile->setOpaqueRect(tilePaintedOpaqueRect); |
} |
// sourceRect starts as a full-sized tile with border texels included. |
- IntRect sourceRect = m_tiler->tileRect(tile); |
- sourceRect.intersect(dirtyRect); |
+ gfx::Rect sourceRect = m_tiler->tileRect(tile); |
+ sourceRect.Intersect(dirtyRect); |
// Paint rect not guaranteed to line up on tile boundaries, so |
// make sure that sourceRect doesn't extend outside of it. |
- sourceRect.intersect(paintRect); |
+ sourceRect.Intersect(paintRect); |
tile->updateRect = sourceRect; |
- if (sourceRect.isEmpty()) |
+ if (sourceRect.IsEmpty()) |
continue; |
- const IntPoint anchor = m_tiler->tileRect(tile).location(); |
+ const gfx::Point anchor = m_tiler->tileRect(tile).origin(); |
// Calculate tile-space rectangle to upload into. |
- gfx::Vector2d destOffset(sourceRect.x() - anchor.x(), sourceRect.y() - anchor.y()); |
+ gfx::Vector2d destOffset = sourceRect.origin() - anchor; |
if (destOffset.x() < 0) |
CRASH(); |
if (destOffset.y() < 0) |
CRASH(); |
// Offset from paint rectangle to this tile's dirty rectangle. |
- gfx::Vector2d paintOffset(sourceRect.x() - paintRect.x(), sourceRect.y() - paintRect.y()); |
+ gfx::Vector2d paintOffset = sourceRect.origin() - paintRect.origin(); |
if (paintOffset.x() < 0) |
CRASH(); |
if (paintOffset.y() < 0) |
@@ -509,7 +510,7 @@ void TiledLayer::updateTileTextures(const IntRect& paintRect, int left, int top, |
tile->updaterResource()->update(queue, sourceRect, destOffset, tile->partialUpdate, stats); |
if (occlusion) |
- occlusion->overdrawMetrics().didUpload(WebTransformationMatrix(), sourceRect, tile->opaqueRect()); |
+ occlusion->overdrawMetrics().didUpload(WebTransformationMatrix(), cc::IntRect(sourceRect), cc::IntRect(tile->opaqueRect())); |
} |
} |
@@ -523,8 +524,8 @@ bool isSmallAnimatedLayer(TiledLayer* layer) |
{ |
if (!layer->drawTransformIsAnimating() && !layer->screenSpaceTransformIsAnimating()) |
return false; |
- IntSize viewportSize = layer->layerTreeHost() ? layer->layerTreeHost()->deviceViewportSize() : IntSize(); |
- IntRect contentRect(IntPoint::zero(), layer->contentBounds()); |
+ gfx::Size viewportSize = layer->layerTreeHost() ? layer->layerTreeHost()->deviceViewportSize() : gfx::Size(); |
+ gfx::Rect contentRect(gfx::Point(), layer->contentBounds()); |
return contentRect.width() <= viewportSize.width() + 64 |
&& contentRect.height() <= viewportSize.height() + 64; |
} |
@@ -532,14 +533,14 @@ bool isSmallAnimatedLayer(TiledLayer* layer) |
// FIXME: Remove this and make this based on distance once distance can be calculated |
// for offscreen layers. For now, prioritize all small animated layers after 512 |
// pixels of pre-painting. |
-void setPriorityForTexture(const IntRect& visibleRect, |
- const IntRect& tileRect, |
+void setPriorityForTexture(const gfx::Rect& visibleRect, |
+ const gfx::Rect& tileRect, |
bool drawsToRoot, |
bool isSmallAnimatedLayer, |
PrioritizedTexture* texture) |
{ |
int priority = PriorityCalculator::lowestPriority(); |
- if (!visibleRect.isEmpty()) |
+ if (!visibleRect.IsEmpty()) |
priority = PriorityCalculator::priorityFromDistance(visibleRect, tileRect, drawsToRoot); |
if (isSmallAnimatedLayer) |
priority = PriorityCalculator::maxPriority(priority, PriorityCalculator::smallAnimatedLayerMinPriority()); |
@@ -561,10 +562,10 @@ void TiledLayer::setTexturePriorities(const PriorityCalculator& priorityCalc) |
bool smallAnimatedLayer = isSmallAnimatedLayer(this); |
// Minimally create the tiles in the desired pre-paint rect. |
- IntRect createTilesRect = idlePaintRect(); |
+ gfx::Rect createTilesRect = idlePaintRect(); |
if (smallAnimatedLayer) |
- createTilesRect = IntRect(IntPoint::zero(), contentBounds()); |
- if (!createTilesRect.isEmpty()) { |
+ createTilesRect = gfx::Rect(gfx::Point(), contentBounds()); |
+ if (!createTilesRect.IsEmpty()) { |
int left, top, right, bottom; |
m_tiler->contentRectToTileIndices(createTilesRect, left, top, right, bottom); |
for (int j = top; j <= bottom; ++j) { |
@@ -581,7 +582,7 @@ void TiledLayer::setTexturePriorities(const PriorityCalculator& priorityCalc) |
// FIXME: This should not ever be null. |
if (!tile) |
continue; |
- IntRect tileRect = m_tiler->tileRect(tile); |
+ gfx::Rect tileRect = m_tiler->tileRect(tile); |
setPriorityForTexture(m_predictedVisibleRect, tileRect, drawsToRoot, smallAnimatedLayer, tile->managedTexture()); |
} |
} |
@@ -591,7 +592,7 @@ Region TiledLayer::visibleContentOpaqueRegion() const |
if (m_skipsDraw) |
return Region(); |
if (contentsOpaque()) |
- return visibleContentRect(); |
+ return cc::IntRect(visibleContentRect()); |
return m_tiler->opaqueRegionInContentRect(visibleContentRect()); |
} |
@@ -611,12 +612,12 @@ void TiledLayer::resetUpdateState() |
} |
namespace { |
-IntRect expandRectByDelta(IntRect rect, IntSize delta) { |
- int width = rect.width() + abs(delta.width()); |
- int height = rect.height() + abs(delta.height()); |
- int x = rect.x() + ((delta.width() < 0) ? delta.width() : 0); |
- int y = rect.y() + ((delta.height() < 0) ? delta.height() : 0); |
- return IntRect(x, y, width, height); |
+gfx::Rect expandRectByDelta(gfx::Rect rect, gfx::Vector2d delta) { |
+ int width = rect.width() + abs(delta.x()); |
+ int height = rect.height() + abs(delta.y()); |
+ int x = rect.x() + ((delta.x() < 0) ? delta.x() : 0); |
+ int y = rect.y() + ((delta.y() < 0) ? delta.y() : 0); |
+ return gfx::Rect(x, y, width, height); |
} |
} |
@@ -630,21 +631,21 @@ void TiledLayer::updateScrollPrediction() |
// - visibleRect.size() hasn't changed. |
// These two conditions prevent rotations, scales, pinch-zooms etc. where |
// the prediction would be incorrect. |
- IntSize delta = visibleContentRect().center() - m_previousVisibleRect.center(); |
+ gfx::Vector2d delta = visibleContentRect().CenterPoint() - m_previousVisibleRect.CenterPoint(); |
m_predictedScroll = -delta; |
m_predictedVisibleRect = visibleContentRect(); |
if (m_previousContentBounds == contentBounds() && m_previousVisibleRect.size() == visibleContentRect().size()) { |
// Only expand the visible rect in the major scroll direction, to prevent |
// massive paints due to diagonal scrolls. |
- IntSize majorScrollDelta = (abs(delta.width()) > abs(delta.height())) ? IntSize(delta.width(), 0) : IntSize(0, delta.height()); |
+ gfx::Vector2d majorScrollDelta = (abs(delta.x()) > abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) : gfx::Vector2d(0, delta.y()); |
m_predictedVisibleRect = expandRectByDelta(visibleContentRect(), majorScrollDelta); |
// Bound the prediction to prevent unbounded paints, and clamp to content bounds. |
- IntRect bound = visibleContentRect(); |
- bound.inflateX(m_tiler->tileSize().width() * maxPredictiveTilesCount); |
- bound.inflateY(m_tiler->tileSize().height() * maxPredictiveTilesCount); |
- bound.intersect(IntRect(IntPoint::zero(), contentBounds())); |
- m_predictedVisibleRect.intersect(bound); |
+ gfx::Rect bound = visibleContentRect(); |
+ bound.Inset(-m_tiler->tileSize().width() * maxPredictiveTilesCount, |
+ -m_tiler->tileSize().height() * maxPredictiveTilesCount); |
+ bound.Intersect(gfx::Rect(gfx::Point(), contentBounds())); |
+ m_predictedVisibleRect.Intersect(bound); |
} |
m_previousContentBounds = contentBounds(); |
m_previousVisibleRect = visibleContentRect(); |
@@ -664,7 +665,7 @@ void TiledLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occl |
// hiccups while it is animating. |
if (isSmallAnimatedLayer(this)) { |
int left, top, right, bottom; |
- m_tiler->contentRectToTileIndices(IntRect(IntPoint::zero(), contentBounds()), left, top, right, bottom); |
+ m_tiler->contentRectToTileIndices(gfx::Rect(gfx::Point(), contentBounds()), left, top, right, bottom); |
updateTiles(left, top, right, bottom, queue, 0, stats, didPaint); |
if (didPaint) |
return; |
@@ -673,7 +674,7 @@ void TiledLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occl |
m_failedUpdate = false; |
} |
- if (m_predictedVisibleRect.isEmpty()) |
+ if (m_predictedVisibleRect.IsEmpty()) |
return; |
// Visible painting. First occlude visible tiles and paint the non-occluded tiles. |
@@ -687,8 +688,8 @@ void TiledLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occl |
return; |
// If we have already painting everything visible. Do some pre-painting while idle. |
- IntRect idlePaintContentRect = idlePaintRect(); |
- if (idlePaintContentRect.isEmpty()) |
+ gfx::Rect idlePaintContentRect = idlePaintRect(); |
+ if (idlePaintContentRect.IsEmpty()) |
return; |
// Prepaint anything that was occluded but inside the layer's visible region. |
@@ -700,35 +701,35 @@ void TiledLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occl |
// Then expand outwards one row/column at a time until we find a dirty row/column |
// to update. Increment along the major and minor scroll directions first. |
- IntSize delta = -m_predictedScroll; |
- delta = IntSize(delta.width() == 0 ? 1 : delta.width(), |
- delta.height() == 0 ? 1 : delta.height()); |
- IntSize majorDelta = (abs(delta.width()) > abs(delta.height())) ? IntSize(delta.width(), 0) : IntSize(0, delta.height()); |
- IntSize minorDelta = (abs(delta.width()) <= abs(delta.height())) ? IntSize(delta.width(), 0) : IntSize(0, delta.height()); |
- IntSize deltas[4] = {majorDelta, minorDelta, -majorDelta, -minorDelta}; |
+ gfx::Vector2d delta = -m_predictedScroll; |
+ delta = gfx::Vector2d(delta.x() == 0 ? 1 : delta.x(), |
+ delta.y() == 0 ? 1 : delta.y()); |
+ gfx::Vector2d majorDelta = (abs(delta.x()) > abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) : gfx::Vector2d(0, delta.y()); |
+ gfx::Vector2d minorDelta = (abs(delta.x()) <= abs(delta.y())) ? gfx::Vector2d(delta.x(), 0) : gfx::Vector2d(0, delta.y()); |
+ gfx::Vector2d deltas[4] = {majorDelta, minorDelta, -majorDelta, -minorDelta}; |
for(int i = 0; i < 4; i++) { |
- if (deltas[i].height() > 0) { |
+ if (deltas[i].y() > 0) { |
while (bottom < prepaintBottom) { |
++bottom; |
if (!updateTiles(left, bottom, right, bottom, queue, 0, stats, didPaint) || didPaint) |
return; |
} |
} |
- if (deltas[i].height() < 0) { |
+ if (deltas[i].y() < 0) { |
while (top > prepaintTop) { |
--top; |
if (!updateTiles(left, top, right, top, queue, 0, stats, didPaint) || didPaint) |
return; |
} |
} |
- if (deltas[i].width() < 0) { |
+ if (deltas[i].x() < 0) { |
while (left > prepaintLeft) { |
--left; |
if (!updateTiles(left, top, left, bottom, queue, 0, stats, didPaint) || didPaint) |
return; |
} |
} |
- if (deltas[i].width() > 0) { |
+ if (deltas[i].x() > 0) { |
while (right < prepaintRight) { |
++right; |
if (!updateTiles(right, top, right, bottom, queue, 0, stats, didPaint) || didPaint) |
@@ -741,11 +742,11 @@ void TiledLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occl |
bool TiledLayer::needsIdlePaint() |
{ |
// Don't trigger more paints if we failed (as we'll just fail again). |
- if (m_failedUpdate || visibleContentRect().isEmpty() || m_tiler->hasEmptyBounds() || !drawsContent()) |
+ if (m_failedUpdate || visibleContentRect().IsEmpty() || m_tiler->hasEmptyBounds() || !drawsContent()) |
return false; |
- IntRect idlePaintContentRect = idlePaintRect(); |
- if (idlePaintContentRect.isEmpty()) |
+ gfx::Rect idlePaintContentRect = idlePaintRect(); |
+ if (idlePaintContentRect.IsEmpty()) |
return false; |
int left, top, right, bottom; |
@@ -758,7 +759,7 @@ bool TiledLayer::needsIdlePaint() |
if (!tile) |
continue; |
- bool updated = !tile->updateRect.isEmpty(); |
+ bool updated = !tile->updateRect.IsEmpty(); |
bool canAcquire = tile->managedTexture()->canAcquireBackingTexture(); |
bool dirty = tile->isDirty() || !tile->managedTexture()->haveBackingTexture(); |
if (!updated && canAcquire && dirty) |
@@ -768,17 +769,17 @@ bool TiledLayer::needsIdlePaint() |
return false; |
} |
-IntRect TiledLayer::idlePaintRect() |
+gfx::Rect TiledLayer::idlePaintRect() |
{ |
// Don't inflate an empty rect. |
- if (visibleContentRect().isEmpty()) |
- return IntRect(); |
- |
- IntRect prepaintRect = visibleContentRect(); |
- prepaintRect.inflateX(m_tiler->tileSize().width() * prepaintColumns); |
- prepaintRect.inflateY(m_tiler->tileSize().height() * prepaintRows); |
- IntRect contentRect(IntPoint::zero(), contentBounds()); |
- prepaintRect.intersect(contentRect); |
+ if (visibleContentRect().IsEmpty()) |
+ return gfx::Rect(); |
+ |
+ gfx::Rect prepaintRect = visibleContentRect(); |
+ prepaintRect.Inset(-m_tiler->tileSize().width() * prepaintColumns, |
+ -m_tiler->tileSize().height() * prepaintRows); |
+ gfx::Rect contentRect(gfx::Point(), contentBounds()); |
+ prepaintRect.Intersect(contentRect); |
return prepaintRect; |
} |