| 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_);
|
|
|