Index: cc/base/tiling_data.cc |
diff --git a/cc/base/tiling_data.cc b/cc/base/tiling_data.cc |
index 9d4185dc4f8c71453eb9ca22fa6cbe1cc7de85f9..a39df585493708e89a6efd62406794f3bf730d9a 100644 |
--- a/cc/base/tiling_data.cc |
+++ b/cc/base/tiling_data.cc |
@@ -313,6 +313,10 @@ TilingData::Iterator::Iterator(const TilingData* tiling_data, |
gfx::Rect tiling_bounds_rect(tiling_data_->tiling_size()); |
gfx::Rect rect(consider_rect); |
rect.Intersect(tiling_bounds_rect); |
+ if (rect.IsEmpty()) { |
+ done(); |
+ return; |
+ } |
gfx::Rect top_left_tile; |
if (include_borders) { |
@@ -354,7 +358,8 @@ TilingData::Iterator& TilingData::Iterator::operator++() { |
TilingData::DifferenceIterator::DifferenceIterator( |
const TilingData* tiling_data, |
const gfx::Rect& consider_rect, |
- const gfx::Rect& ignore_rect) |
+ const gfx::Rect& ignore_rect, |
+ bool include_borders) |
: BaseIterator(tiling_data), |
consider_left_(-1), |
consider_top_(-1), |
@@ -379,24 +384,40 @@ TilingData::DifferenceIterator::DifferenceIterator( |
return; |
} |
- consider_left_ = |
- tiling_data_->FirstBorderTileXIndexFromSrcCoord(consider.x()); |
- consider_top_ = |
- tiling_data_->FirstBorderTileYIndexFromSrcCoord(consider.y()); |
- consider_right_ = |
- tiling_data_->LastBorderTileXIndexFromSrcCoord(consider.right() - 1); |
- consider_bottom_ = |
- tiling_data_->LastBorderTileYIndexFromSrcCoord(consider.bottom() - 1); |
+ if (include_borders) { |
+ consider_left_ = |
+ tiling_data_->FirstBorderTileXIndexFromSrcCoord(consider.x()); |
+ consider_top_ = |
+ tiling_data_->FirstBorderTileYIndexFromSrcCoord(consider.y()); |
+ consider_right_ = |
+ tiling_data_->LastBorderTileXIndexFromSrcCoord(consider.right() - 1); |
+ consider_bottom_ = |
+ tiling_data_->LastBorderTileYIndexFromSrcCoord(consider.bottom() - 1); |
+ } else { |
+ consider_left_ = tiling_data_->TileXIndexFromSrcCoord(consider.x()); |
+ consider_top_ = tiling_data_->TileYIndexFromSrcCoord(consider.y()); |
+ consider_right_ = |
+ tiling_data_->TileXIndexFromSrcCoord(consider.right() - 1); |
+ consider_bottom_ = |
+ tiling_data_->TileYIndexFromSrcCoord(consider.bottom() - 1); |
+ } |
if (!ignore.IsEmpty()) { |
- ignore_left_ = |
- tiling_data_->FirstBorderTileXIndexFromSrcCoord(ignore.x()); |
- ignore_top_ = |
- tiling_data_->FirstBorderTileYIndexFromSrcCoord(ignore.y()); |
- ignore_right_ = |
- tiling_data_->LastBorderTileXIndexFromSrcCoord(ignore.right() - 1); |
- ignore_bottom_ = |
- tiling_data_->LastBorderTileYIndexFromSrcCoord(ignore.bottom() - 1); |
+ if (include_borders) { |
+ ignore_left_ = |
+ tiling_data_->FirstBorderTileXIndexFromSrcCoord(ignore.x()); |
+ ignore_top_ = tiling_data_->FirstBorderTileYIndexFromSrcCoord(ignore.y()); |
+ ignore_right_ = |
+ tiling_data_->LastBorderTileXIndexFromSrcCoord(ignore.right() - 1); |
+ ignore_bottom_ = |
+ tiling_data_->LastBorderTileYIndexFromSrcCoord(ignore.bottom() - 1); |
+ } else { |
+ ignore_left_ = tiling_data_->TileXIndexFromSrcCoord(ignore.x()); |
+ ignore_top_ = tiling_data_->TileYIndexFromSrcCoord(ignore.y()); |
+ ignore_right_ = tiling_data_->TileXIndexFromSrcCoord(ignore.right() - 1); |
+ ignore_bottom_ = |
+ tiling_data_->TileYIndexFromSrcCoord(ignore.bottom() - 1); |
+ } |
// Clamp ignore indices to consider indices. |
ignore_left_ = std::max(ignore_left_, consider_left_); |