| Index: cc/base/tiling_data.h
|
| diff --git a/cc/base/tiling_data.h b/cc/base/tiling_data.h
|
| index 9540c3896b1e3999522f5e34a626ad95cb327b27..17274af142fd8a1001af3dfdfbfe21dd6c057daf 100644
|
| --- a/cc/base/tiling_data.h
|
| +++ b/cc/base/tiling_data.h
|
| @@ -124,7 +124,66 @@ class CC_EXPORT TilingData {
|
| int ignore_bottom_;
|
| };
|
|
|
| + // Iterate through all indices whose bounds + border intersect with
|
| + // |consider| but which also do not intersect with |ignore|. The iterator
|
| + // order is a counterclockwise spiral around the given center.
|
| + class CC_EXPORT SpiralDifferenceIterator : public BaseIterator {
|
| + public:
|
| + SpiralDifferenceIterator(const TilingData* tiling_data,
|
| + const gfx::Rect& consider_rect,
|
| + const gfx::Rect& ignore_rect,
|
| + const gfx::Rect& center_rect);
|
| + SpiralDifferenceIterator& operator++();
|
| +
|
| + private:
|
| + bool in_consider_rect() const {
|
| + return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
|
| + index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
|
| + }
|
| + bool in_ignore_rect() const {
|
| + return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
|
| + index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
|
| + }
|
| + bool valid_column() const {
|
| + return index_x_ >= consider_left_ && index_x_ <= consider_right_;
|
| + }
|
| + bool valid_row() const {
|
| + return index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
|
| + }
|
| +
|
| + int current_step_count() const {
|
| + return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_
|
| + : horizontal_step_count_;
|
| + }
|
| +
|
| + bool needs_direction_switch() const;
|
| + void switch_direction();
|
| +
|
| + int consider_left_;
|
| + int consider_top_;
|
| + int consider_right_;
|
| + int consider_bottom_;
|
| + int ignore_left_;
|
| + int ignore_top_;
|
| + int ignore_right_;
|
| + int ignore_bottom_;
|
| +
|
| + enum Direction { UP, LEFT, DOWN, RIGHT };
|
| +
|
| + Direction direction_;
|
| + int delta_x_;
|
| + int delta_y_;
|
| + int current_step_;
|
| + int horizontal_step_count_;
|
| + int vertical_step_count_;
|
| + };
|
| +
|
| private:
|
| + std::pair<int, int> UnclampedFirstBorderTileIndexFromSrcCoord(int x,
|
| + int y) const;
|
| + std::pair<int, int> UnclampedLastBorderTileIndexFromSrcCoord(int x,
|
| + int y) const;
|
| +
|
| void AssertTile(int i, int j) const {
|
| DCHECK_GE(i, 0);
|
| DCHECK_LT(i, num_tiles_x_);
|
|
|