| Index: cc/base/tiling_data.cc
|
| diff --git a/cc/base/tiling_data.cc b/cc/base/tiling_data.cc
|
| index cf2bb57f64c623a09329ee9eecc257358b3bdd7f..d328dfdd3f0fe30398ef33cded94effba5252976 100644
|
| --- a/cc/base/tiling_data.cc
|
| +++ b/cc/base/tiling_data.cc
|
| @@ -11,6 +11,11 @@
|
|
|
| namespace cc {
|
|
|
| +namespace {
|
| +// IndexRect which is at left top corner of the positive quadrant.
|
| +const IndexRect kNonPositiveQuadrantIndexRect(-1, -1, -1, -1);
|
| +}
|
| +
|
| static int ComputeNumTiles(int max_texture_size,
|
| int total_size,
|
| int border_texels) {
|
| @@ -296,14 +301,14 @@ void TilingData::RecomputeNumTiles() {
|
| TilingData::BaseIterator::BaseIterator() : index_x_(-1), index_y_(-1) {
|
| }
|
|
|
| -TilingData::Iterator::Iterator() {
|
| +TilingData::Iterator::Iterator() : index_rect_(kNonPositiveQuadrantIndexRect) {
|
| done();
|
| }
|
|
|
| TilingData::Iterator::Iterator(const TilingData* tiling_data,
|
| const gfx::Rect& consider_rect,
|
| bool include_borders)
|
| - : left_(-1), right_(-1), bottom_(-1) {
|
| + : index_rect_(kNonPositiveQuadrantIndexRect) {
|
| if (tiling_data->num_tiles_x() <= 0 || tiling_data->num_tiles_y() <= 0) {
|
| done();
|
| return;
|
| @@ -317,17 +322,22 @@ TilingData::Iterator::Iterator(const TilingData* tiling_data,
|
| if (include_borders) {
|
| index_x_ = tiling_data->FirstBorderTileXIndexFromSrcCoord(rect.x());
|
| index_y_ = tiling_data->FirstBorderTileYIndexFromSrcCoord(rect.y());
|
| - right_ = tiling_data->LastBorderTileXIndexFromSrcCoord(rect.right() - 1);
|
| - bottom_ = tiling_data->LastBorderTileYIndexFromSrcCoord(rect.bottom() - 1);
|
| + index_rect_ = IndexRect(
|
| + index_x_,
|
| + tiling_data->LastBorderTileXIndexFromSrcCoord(rect.right() - 1),
|
| + index_y_,
|
| + tiling_data->LastBorderTileYIndexFromSrcCoord(rect.bottom() - 1));
|
| + DCHECK(index_rect_.is_valid());
|
| top_left_tile = tiling_data->TileBoundsWithBorder(index_x_, index_y_);
|
| } else {
|
| index_x_ = tiling_data->TileXIndexFromSrcCoord(rect.x());
|
| index_y_ = tiling_data->TileYIndexFromSrcCoord(rect.y());
|
| - right_ = tiling_data->TileXIndexFromSrcCoord(rect.right() - 1);
|
| - bottom_ = tiling_data->TileYIndexFromSrcCoord(rect.bottom() - 1);
|
| + index_rect_ = IndexRect(
|
| + index_x_, tiling_data->TileXIndexFromSrcCoord(rect.right() - 1),
|
| + index_y_, tiling_data->TileYIndexFromSrcCoord(rect.bottom() - 1));
|
| + DCHECK(index_rect_.is_valid());
|
| top_left_tile = tiling_data->TileBounds(index_x_, index_y_);
|
| }
|
| - left_ = index_x_;
|
|
|
| // Index functions always return valid indices, so explicitly check
|
| // for non-intersecting rects.
|
| @@ -340,17 +350,19 @@ TilingData::Iterator& TilingData::Iterator::operator++() {
|
| return *this;
|
|
|
| index_x_++;
|
| - if (index_x_ > right_) {
|
| - index_x_ = left_;
|
| + if (index_x_ > index_rect_.right()) {
|
| + index_x_ = index_rect_.left();
|
| index_y_++;
|
| - if (index_y_ > bottom_)
|
| + if (index_y_ > index_rect_.bottom())
|
| done();
|
| }
|
|
|
| return *this;
|
| }
|
|
|
| -TilingData::BaseDifferenceIterator::BaseDifferenceIterator() {
|
| +TilingData::BaseDifferenceIterator::BaseDifferenceIterator()
|
| + : consider_index_rect_(kNonPositiveQuadrantIndexRect),
|
| + ignore_index_rect_(kNonPositiveQuadrantIndexRect) {
|
| done();
|
| }
|
|
|
| @@ -358,14 +370,8 @@ TilingData::BaseDifferenceIterator::BaseDifferenceIterator(
|
| const TilingData* tiling_data,
|
| const gfx::Rect& consider_rect,
|
| const gfx::Rect& ignore_rect)
|
| - : consider_left_(-1),
|
| - consider_top_(-1),
|
| - consider_right_(-1),
|
| - consider_bottom_(-1),
|
| - ignore_left_(-1),
|
| - ignore_top_(-1),
|
| - ignore_right_(-1),
|
| - ignore_bottom_(-1) {
|
| + : consider_index_rect_(kNonPositiveQuadrantIndexRect),
|
| + ignore_index_rect_(kNonPositiveQuadrantIndexRect) {
|
| if (tiling_data->num_tiles_x() <= 0 || tiling_data->num_tiles_y() <= 0) {
|
| done();
|
| return;
|
| @@ -380,29 +386,33 @@ TilingData::BaseDifferenceIterator::BaseDifferenceIterator(
|
| return;
|
| }
|
|
|
| - 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);
|
| + consider_index_rect_ =
|
| + IndexRect(tiling_data->TileXIndexFromSrcCoord(consider.x()),
|
| + tiling_data->TileXIndexFromSrcCoord(consider.right() - 1),
|
| + tiling_data->TileYIndexFromSrcCoord(consider.y()),
|
| + tiling_data->TileYIndexFromSrcCoord(consider.bottom() - 1));
|
| + DCHECK(consider_index_rect_.is_valid());
|
|
|
| gfx::Rect ignore(ignore_rect);
|
| ignore.Intersect(tiling_bounds_rect);
|
|
|
| if (!ignore.IsEmpty()) {
|
| - 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);
|
| + ignore_index_rect_ =
|
| + IndexRect(tiling_data->TileXIndexFromSrcCoord(ignore.x()),
|
| + tiling_data->TileXIndexFromSrcCoord(ignore.right() - 1),
|
| + tiling_data->TileYIndexFromSrcCoord(ignore.y()),
|
| + tiling_data->TileYIndexFromSrcCoord(ignore.bottom() - 1));
|
| + DCHECK(ignore_index_rect_.is_valid());
|
|
|
| // Clamp ignore indices to consider indices.
|
| - ignore_left_ = std::max(ignore_left_, consider_left_);
|
| - ignore_top_ = std::max(ignore_top_, consider_top_);
|
| - ignore_right_ = std::min(ignore_right_, consider_right_);
|
| - ignore_bottom_ = std::min(ignore_bottom_, consider_bottom_);
|
| -
|
| - if (ignore_left_ == consider_left_ && ignore_right_ == consider_right_ &&
|
| - ignore_top_ == consider_top_ && ignore_bottom_ == consider_bottom_) {
|
| - consider_left_ = consider_top_ = consider_right_ = consider_bottom_ = -1;
|
| + ignore_index_rect_.ClampTo(consider_index_rect_);
|
| +
|
| + // If ignore rect is invalid, reset.
|
| + if (!ignore_index_rect_.is_valid())
|
| + ignore_index_rect_ = kNonPositiveQuadrantIndexRect;
|
| +
|
| + if (ignore_index_rect_ == consider_index_rect_) {
|
| + consider_index_rect_ = kNonPositiveQuadrantIndexRect;
|
| done();
|
| return;
|
| }
|
| @@ -411,11 +421,9 @@ TilingData::BaseDifferenceIterator::BaseDifferenceIterator(
|
|
|
| bool TilingData::BaseDifferenceIterator::HasConsiderRect() const {
|
| // Consider indices are either all valid or all equal to -1.
|
| - DCHECK((0 <= consider_left_ && consider_left_ <= consider_right_ &&
|
| - 0 <= consider_top_ && consider_top_ <= consider_bottom_) ||
|
| - (consider_left_ == -1 && consider_top_ == -1 &&
|
| - consider_right_ == -1 && consider_bottom_ == -1));
|
| - return consider_left_ != -1;
|
| + DCHECK(consider_index_rect_.is_in_positive_quadrant() ||
|
| + consider_index_rect_ == kNonPositiveQuadrantIndexRect);
|
| + return consider_index_rect_.left() != -1;
|
| }
|
|
|
| TilingData::DifferenceIterator::DifferenceIterator() {
|
| @@ -431,10 +439,10 @@ TilingData::DifferenceIterator::DifferenceIterator(
|
| return;
|
| }
|
|
|
| - index_x_ = consider_left_;
|
| - index_y_ = consider_top_;
|
| + index_x_ = consider_index_rect_.left();
|
| + index_y_ = consider_index_rect_.top();
|
|
|
| - if (in_ignore_rect())
|
| + if (ignore_index_rect_.Contains(index_x_, index_y_))
|
| ++(*this);
|
| }
|
|
|
| @@ -443,24 +451,25 @@ TilingData::DifferenceIterator& TilingData::DifferenceIterator::operator++() {
|
| return *this;
|
|
|
| index_x_++;
|
| - if (in_ignore_rect())
|
| - index_x_ = ignore_right_ + 1;
|
| + if (ignore_index_rect_.Contains(index_x_, index_y_))
|
| + index_x_ = ignore_index_rect_.right() + 1;
|
|
|
| - if (index_x_ > consider_right_) {
|
| - index_x_ = consider_left_;
|
| + if (index_x_ > consider_index_rect_.right()) {
|
| + index_x_ = consider_index_rect_.left();
|
| index_y_++;
|
|
|
| - if (in_ignore_rect()) {
|
| - index_x_ = ignore_right_ + 1;
|
| + if (ignore_index_rect_.Contains(index_x_, index_y_)) {
|
| + index_x_ = ignore_index_rect_.right() + 1;
|
| // If the ignore rect spans the whole consider rect horizontally, then
|
| // ignore_right + 1 will be out of bounds.
|
| - if (in_ignore_rect() || index_x_ > consider_right_) {
|
| - index_y_ = ignore_bottom_ + 1;
|
| - index_x_ = consider_left_;
|
| + if (ignore_index_rect_.Contains(index_x_, index_y_) ||
|
| + index_x_ > consider_index_rect_.right()) {
|
| + index_y_ = ignore_index_rect_.bottom() + 1;
|
| + index_x_ = consider_index_rect_.left();
|
| }
|
| }
|
|
|
| - if (index_y_ > consider_bottom_)
|
| + if (index_y_ > consider_index_rect_.bottom())
|
| done();
|
| }
|
|
|
| @@ -551,10 +560,10 @@ operator++() {
|
| index_y_ += delta_y_;
|
| ++current_step_;
|
|
|
| - if (in_consider_rect()) {
|
| + if (consider_index_rect_.Contains(index_x_, index_y_)) {
|
| cannot_hit_consider_count = 0;
|
|
|
| - if (!in_ignore_rect())
|
| + if (!ignore_index_rect_.Contains(index_x_, index_y_))
|
| break;
|
|
|
| // Steps needed to reach the very edge of the ignore rect, while remaining
|
| @@ -562,16 +571,16 @@ operator++() {
|
| int steps_to_edge = 0;
|
| switch (direction_) {
|
| case UP:
|
| - steps_to_edge = index_y_ - ignore_top_;
|
| + steps_to_edge = index_y_ - ignore_index_rect_.top();
|
| break;
|
| case LEFT:
|
| - steps_to_edge = index_x_ - ignore_left_;
|
| + steps_to_edge = index_x_ - ignore_index_rect_.left();
|
| break;
|
| case DOWN:
|
| - steps_to_edge = ignore_bottom_ - index_y_;
|
| + steps_to_edge = ignore_index_rect_.bottom() - index_y_;
|
| break;
|
| case RIGHT:
|
| - steps_to_edge = ignore_right_ - index_x_;
|
| + steps_to_edge = ignore_index_rect_.right() - index_x_;
|
| break;
|
| }
|
|
|
| @@ -590,24 +599,28 @@ operator++() {
|
| bool can_hit_consider_rect = false;
|
| switch (direction_) {
|
| case UP:
|
| - if (valid_column() && consider_bottom_ < index_y_)
|
| - steps_to_take = index_y_ - consider_bottom_ - 1;
|
| - can_hit_consider_rect |= consider_right_ >= index_x_;
|
| + if (consider_index_rect_.valid_column(index_x_) &&
|
| + consider_index_rect_.bottom() < index_y_)
|
| + steps_to_take = index_y_ - consider_index_rect_.bottom() - 1;
|
| + can_hit_consider_rect |= consider_index_rect_.right() >= index_x_;
|
| break;
|
| case LEFT:
|
| - if (valid_row() && consider_right_ < index_x_)
|
| - steps_to_take = index_x_ - consider_right_ - 1;
|
| - can_hit_consider_rect |= consider_top_ <= index_y_;
|
| + if (consider_index_rect_.valid_row(index_y_) &&
|
| + consider_index_rect_.right() < index_x_)
|
| + steps_to_take = index_x_ - consider_index_rect_.right() - 1;
|
| + can_hit_consider_rect |= consider_index_rect_.top() <= index_y_;
|
| break;
|
| case DOWN:
|
| - if (valid_column() && consider_top_ > index_y_)
|
| - steps_to_take = consider_top_ - index_y_ - 1;
|
| - can_hit_consider_rect |= consider_left_ <= index_x_;
|
| + if (consider_index_rect_.valid_column(index_x_) &&
|
| + consider_index_rect_.top() > index_y_)
|
| + steps_to_take = consider_index_rect_.top() - index_y_ - 1;
|
| + can_hit_consider_rect |= consider_index_rect_.left() <= index_x_;
|
| break;
|
| case RIGHT:
|
| - if (valid_row() && consider_left_ > index_x_)
|
| - steps_to_take = consider_left_ - index_x_ - 1;
|
| - can_hit_consider_rect |= consider_bottom_ >= index_y_;
|
| + if (consider_index_rect_.valid_row(index_y_) &&
|
| + consider_index_rect_.left() > index_x_)
|
| + steps_to_take = consider_index_rect_.left() - index_x_ - 1;
|
| + can_hit_consider_rect |= consider_index_rect_.bottom() >= index_y_;
|
| break;
|
| }
|
| steps_to_take = std::min(steps_to_take, max_steps);
|
| @@ -648,7 +661,8 @@ void TilingData::SpiralDifferenceIterator::switch_direction() {
|
| }
|
| }
|
|
|
| -TilingData::ReverseSpiralDifferenceIterator::ReverseSpiralDifferenceIterator() {
|
| +TilingData::ReverseSpiralDifferenceIterator::ReverseSpiralDifferenceIterator()
|
| + : around_index_rect_(kNonPositiveQuadrantIndexRect) {
|
| done();
|
| }
|
|
|
| @@ -658,10 +672,7 @@ TilingData::ReverseSpiralDifferenceIterator::ReverseSpiralDifferenceIterator(
|
| const gfx::Rect& ignore_rect,
|
| const gfx::Rect& center_rect)
|
| : BaseDifferenceIterator(tiling_data, consider_rect, ignore_rect),
|
| - around_left_(-1),
|
| - around_top_(-1),
|
| - around_right_(-1),
|
| - around_bottom_(-1),
|
| + around_index_rect_(kNonPositiveQuadrantIndexRect),
|
| direction_(LEFT),
|
| delta_x_(-1),
|
| delta_y_(0),
|
| @@ -673,53 +684,65 @@ TilingData::ReverseSpiralDifferenceIterator::ReverseSpiralDifferenceIterator(
|
| return;
|
| }
|
|
|
| + int around_left = 0;
|
| // Determine around left, such that it is between -1 and num_tiles_x.
|
| if (center_rect.x() < 0 || center_rect.IsEmpty())
|
| - around_left_ = -1;
|
| + around_left = -1;
|
| else if (center_rect.x() >= tiling_data->tiling_size().width())
|
| - around_left_ = tiling_data->num_tiles_x();
|
| + around_left = tiling_data->num_tiles_x();
|
| else
|
| - around_left_ = tiling_data->TileXIndexFromSrcCoord(center_rect.x());
|
| + around_left = tiling_data->TileXIndexFromSrcCoord(center_rect.x());
|
|
|
| // Determine around top, such that it is between -1 and num_tiles_y.
|
| + int around_top = 0;
|
| if (center_rect.y() < 0 || center_rect.IsEmpty())
|
| - around_top_ = -1;
|
| + around_top = -1;
|
| else if (center_rect.y() >= tiling_data->tiling_size().height())
|
| - around_top_ = tiling_data->num_tiles_y();
|
| + around_top = tiling_data->num_tiles_y();
|
| else
|
| - around_top_ = tiling_data->TileYIndexFromSrcCoord(center_rect.y());
|
| + around_top = tiling_data->TileYIndexFromSrcCoord(center_rect.y());
|
|
|
| // Determine around right, such that it is between -1 and num_tiles_x.
|
| + int around_right = 0;
|
| int right_src_coord = center_rect.right() - 1;
|
| if (right_src_coord < 0 || center_rect.IsEmpty()) {
|
| - around_right_ = -1;
|
| + around_right = -1;
|
| } else if (right_src_coord >= tiling_data->tiling_size().width()) {
|
| - around_right_ = tiling_data->num_tiles_x();
|
| + around_right = tiling_data->num_tiles_x();
|
| } else {
|
| - around_right_ = tiling_data->TileXIndexFromSrcCoord(right_src_coord);
|
| + around_right = tiling_data->TileXIndexFromSrcCoord(right_src_coord);
|
| }
|
|
|
| // Determine around bottom, such that it is between -1 and num_tiles_y.
|
| + int around_bottom = 0;
|
| int bottom_src_coord = center_rect.bottom() - 1;
|
| if (bottom_src_coord < 0 || center_rect.IsEmpty()) {
|
| - around_bottom_ = -1;
|
| + around_bottom = -1;
|
| } else if (bottom_src_coord >= tiling_data->tiling_size().height()) {
|
| - around_bottom_ = tiling_data->num_tiles_y();
|
| + around_bottom = tiling_data->num_tiles_y();
|
| } else {
|
| - around_bottom_ = tiling_data->TileYIndexFromSrcCoord(bottom_src_coord);
|
| + around_bottom = tiling_data->TileYIndexFromSrcCoord(bottom_src_coord);
|
| }
|
|
|
| + around_index_rect_ =
|
| + IndexRect(around_left, around_right, around_top, around_bottom);
|
| + DCHECK(around_index_rect_.is_valid());
|
| +
|
| // Figure out the maximum distance from the around edge to consider edge.
|
| int max_distance = 0;
|
| - max_distance = std::max(max_distance, around_top_ - consider_top_);
|
| - max_distance = std::max(max_distance, around_left_ - consider_left_);
|
| - max_distance = std::max(max_distance, consider_bottom_ - around_bottom_);
|
| - max_distance = std::max(max_distance, consider_right_ - around_right_);
|
| -
|
| - // The step count is the length of the edge (around_right_ - around_left_ + 1)
|
| - // plus twice the max distance to pad (to the right and to the left). This way
|
| - // the initial rect is the size proportional to the center, but big enough
|
| - // to cover the consider rect.
|
| + max_distance = std::max(
|
| + max_distance, around_index_rect_.top() - consider_index_rect_.top());
|
| + max_distance = std::max(
|
| + max_distance, around_index_rect_.left() - consider_index_rect_.left());
|
| + max_distance = std::max(max_distance, consider_index_rect_.bottom() -
|
| + around_index_rect_.bottom());
|
| + max_distance = std::max(
|
| + max_distance, consider_index_rect_.right() - around_index_rect_.right());
|
| +
|
| + // The step count is the length of the edge
|
| + // (around_index_rect_.num_indices_x()) plus twice the max distance to pad
|
| + // (to the right and to the left). This way the initial rect is the size
|
| + // proportional to the center, but big enough to cover the consider rect.
|
| //
|
| // C = consider rect
|
| // A = around rect
|
| @@ -740,12 +763,13 @@ TilingData::ReverseSpiralDifferenceIterator::ReverseSpiralDifferenceIterator(
|
| // m ..........
|
| // d ..........
|
| // - ..........I
|
| - vertical_step_count_ = around_bottom_ - around_top_ + 1 + 2 * max_distance;
|
| - horizontal_step_count_ = around_right_ - around_left_ + 1 + 2 * max_distance;
|
| + vertical_step_count_ = around_index_rect_.num_indices_y() + 2 * max_distance;
|
| + horizontal_step_count_ =
|
| + around_index_rect_.num_indices_x() + 2 * max_distance;
|
|
|
| // Start with one to the right of the padded around rect.
|
| - index_x_ = around_right_ + max_distance + 1;
|
| - index_y_ = around_bottom_ + max_distance;
|
| + index_x_ = around_index_rect_.right() + max_distance + 1;
|
| + index_y_ = around_index_rect_.bottom() + max_distance;
|
|
|
| // The current index is outside a valid tile, so advance immediately.
|
| ++(*this);
|
| @@ -754,7 +778,7 @@ TilingData::ReverseSpiralDifferenceIterator::ReverseSpiralDifferenceIterator(
|
| TilingData::ReverseSpiralDifferenceIterator&
|
| TilingData::ReverseSpiralDifferenceIterator::
|
| operator++() {
|
| - while (!in_around_rect()) {
|
| + while (!around_index_rect_.Contains(index_x_, index_y_)) {
|
| if (needs_direction_switch())
|
| switch_direction();
|
|
|
| @@ -762,12 +786,12 @@ TilingData::ReverseSpiralDifferenceIterator&
|
| index_y_ += delta_y_;
|
| ++current_step_;
|
|
|
| - if (in_around_rect()) {
|
| + if (around_index_rect_.Contains(index_x_, index_y_)) {
|
| break;
|
| - } else if (in_consider_rect()) {
|
| + } else if (consider_index_rect_.Contains(index_x_, index_y_)) {
|
| // If the tile is in the consider rect but not in ignore rect, then it's a
|
| // valid tile to visit.
|
| - if (!in_ignore_rect())
|
| + if (!ignore_index_rect_.Contains(index_x_, index_y_))
|
| break;
|
|
|
| // Steps needed to reach the very edge of the ignore rect, while remaining
|
| @@ -775,16 +799,16 @@ TilingData::ReverseSpiralDifferenceIterator&
|
| int steps_to_edge = 0;
|
| switch (direction_) {
|
| case UP:
|
| - steps_to_edge = index_y_ - ignore_top_;
|
| + steps_to_edge = index_y_ - ignore_index_rect_.top();
|
| break;
|
| case LEFT:
|
| - steps_to_edge = index_x_ - ignore_left_;
|
| + steps_to_edge = index_x_ - ignore_index_rect_.left();
|
| break;
|
| case DOWN:
|
| - steps_to_edge = ignore_bottom_ - index_y_;
|
| + steps_to_edge = ignore_index_rect_.bottom() - index_y_;
|
| break;
|
| case RIGHT:
|
| - steps_to_edge = ignore_right_ - index_x_;
|
| + steps_to_edge = ignore_index_rect_.right() - index_x_;
|
| break;
|
| }
|
|
|
| @@ -807,20 +831,24 @@ TilingData::ReverseSpiralDifferenceIterator&
|
| // update steps to take.
|
| switch (direction_) {
|
| case UP:
|
| - if (valid_column() && consider_bottom_ < index_y_)
|
| - steps_to_take = index_y_ - consider_bottom_ - 1;
|
| + if (consider_index_rect_.valid_column(index_x_) &&
|
| + consider_index_rect_.bottom() < index_y_)
|
| + steps_to_take = index_y_ - consider_index_rect_.bottom() - 1;
|
| break;
|
| case LEFT:
|
| - if (valid_row() && consider_right_ < index_x_)
|
| - steps_to_take = index_x_ - consider_right_ - 1;
|
| + if (consider_index_rect_.valid_row(index_y_) &&
|
| + consider_index_rect_.right() < index_x_)
|
| + steps_to_take = index_x_ - consider_index_rect_.right() - 1;
|
| break;
|
| case DOWN:
|
| - if (valid_column() && consider_top_ > index_y_)
|
| - steps_to_take = consider_top_ - index_y_ - 1;
|
| + if (consider_index_rect_.valid_column(index_x_) &&
|
| + consider_index_rect_.top() > index_y_)
|
| + steps_to_take = consider_index_rect_.top() - index_y_ - 1;
|
| break;
|
| case RIGHT:
|
| - if (valid_row() && consider_left_ > index_x_)
|
| - steps_to_take = consider_left_ - index_x_ - 1;
|
| + if (consider_index_rect_.valid_row(index_y_) &&
|
| + consider_index_rect_.left() > index_x_)
|
| + steps_to_take = consider_index_rect_.left() - index_x_ - 1;
|
| break;
|
| }
|
| steps_to_take = std::min(steps_to_take, max_steps);
|
| @@ -833,7 +861,7 @@ TilingData::ReverseSpiralDifferenceIterator&
|
| }
|
|
|
| // Once we enter the around rect, we're done.
|
| - if (in_around_rect())
|
| + if (around_index_rect_.Contains(index_x_, index_y_))
|
| done();
|
| return *this;
|
| }
|
|
|