OLD | NEW |
---|---|
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CC_BASE_TILING_DATA_H_ | 5 #ifndef CC_BASE_TILING_DATA_H_ |
6 #define CC_BASE_TILING_DATA_H_ | 6 #define CC_BASE_TILING_DATA_H_ |
7 | 7 |
8 #include <list> | |
8 #include <utility> | 9 #include <utility> |
10 #include <vector> | |
9 | 11 |
10 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/memory/ptr_util.h" | |
11 #include "cc/base/cc_export.h" | 14 #include "cc/base/cc_export.h" |
15 #include "cc/base/pyramid_sequence.h" | |
12 #include "ui/gfx/geometry/rect.h" | 16 #include "ui/gfx/geometry/rect.h" |
13 #include "ui/gfx/geometry/size.h" | 17 #include "ui/gfx/geometry/size.h" |
14 | 18 |
15 namespace gfx { | 19 namespace gfx { |
16 class Vector2d; | 20 class Vector2d; |
17 } | 21 } |
18 | 22 |
19 namespace cc { | 23 namespace cc { |
20 | 24 |
21 class CC_EXPORT TilingData { | 25 class CC_EXPORT TilingData { |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 // with |consider| but which also do not intersect with |ignore|. | 137 // with |consider| but which also do not intersect with |ignore|. |
134 class CC_EXPORT DifferenceIterator : public BaseDifferenceIterator { | 138 class CC_EXPORT DifferenceIterator : public BaseDifferenceIterator { |
135 public: | 139 public: |
136 DifferenceIterator(); | 140 DifferenceIterator(); |
137 DifferenceIterator(const TilingData* tiling_data, | 141 DifferenceIterator(const TilingData* tiling_data, |
138 const gfx::Rect& consider_rect, | 142 const gfx::Rect& consider_rect, |
139 const gfx::Rect& ignore_rect); | 143 const gfx::Rect& ignore_rect); |
140 DifferenceIterator& operator++(); | 144 DifferenceIterator& operator++(); |
141 }; | 145 }; |
142 | 146 |
147 struct LevelDistance { | |
148 int level; | |
149 int distance; | |
150 }; | |
151 | |
152 class LDSequence { | |
vmpstr
2016/06/16 18:28:58
I prefer to not abberviate here
vmpstr
2016/06/16 18:28:58
Needs a comment
| |
153 public: | |
154 typedef std::list<LDSequence> List; | |
155 | |
156 LDSequence(PyramidSequence traversal_seq, | |
vmpstr
2016/06/16 18:28:58
don't abbreviate seq
| |
157 PyramidSequence level_seq, | |
158 bool swapped, | |
159 int distance); | |
160 LDSequence(const LDSequence& other); | |
161 ~LDSequence(); | |
162 | |
163 bool IsValid() const { return !level_distances_.empty(); } | |
164 int GetIndexX() const; | |
165 int GetIndexY() const; | |
166 int GetTopDistance(); | |
167 bool Advance(); | |
168 | |
169 private: | |
170 void Reset(); | |
171 | |
172 PyramidSequence traversal_seq_; | |
173 bool swapped_; | |
174 int current_seq_index_; | |
175 int current_level_index_; | |
176 std::vector<LevelDistance> level_distances_; | |
177 }; | |
178 | |
143 // Iterate through all indices whose bounds + border intersect with | 179 // Iterate through all indices whose bounds + border intersect with |
144 // |consider| but which also do not intersect with |ignore|. The iterator | 180 // |consider| but which also do not intersect with |ignore|. The iterator |
145 // order is a counterclockwise spiral around the given center. | 181 // order is a counterclockwise spiral around the given center. |
146 class CC_EXPORT SpiralDifferenceIterator : public BaseDifferenceIterator { | 182 class CC_EXPORT SpiralDifferenceIterator : public BaseDifferenceIterator { |
147 public: | 183 public: |
148 SpiralDifferenceIterator(); | 184 SpiralDifferenceIterator(); |
149 SpiralDifferenceIterator(const TilingData* tiling_data, | 185 SpiralDifferenceIterator(const TilingData* tiling_data, |
150 const gfx::Rect& consider_rect, | 186 const gfx::Rect& consider_rect, |
151 const gfx::Rect& ignore_rect, | 187 const gfx::Rect& ignore_rect, |
152 const gfx::Rect& center_rect); | 188 const gfx::Rect& center_rect); |
189 ~SpiralDifferenceIterator(); | |
153 SpiralDifferenceIterator& operator++(); | 190 SpiralDifferenceIterator& operator++(); |
154 | 191 |
155 private: | 192 bool valid_column(int column) const { |
156 bool valid_column() const { | 193 return column >= 0 && column <= num_tiles_x_; |
157 return index_x_ >= consider_left_ && index_x_ <= consider_right_; | |
158 } | |
159 bool valid_row() const { | |
160 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_; | |
161 } | 194 } |
162 | 195 |
163 int current_step_count() const { | 196 bool valid_row(int row) const { return row >= 0 && row <= num_tiles_y_; } |
164 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_ | |
165 : horizontal_step_count_; | |
166 } | |
167 | 197 |
168 bool needs_direction_switch() const; | 198 private: |
169 void switch_direction(); | 199 LDSequence::List::iterator GetNextLDSequence(); |
170 | 200 |
171 enum Direction { UP, LEFT, DOWN, RIGHT }; | 201 int num_tiles_x_; |
172 | 202 int num_tiles_y_; |
173 Direction direction_; | 203 LDSequence::List ld_sequences_; |
174 int delta_x_; | 204 LDSequence::List::iterator current_ld_seq; |
175 int delta_y_; | |
176 int current_step_; | |
177 int horizontal_step_count_; | |
178 int vertical_step_count_; | |
179 }; | 205 }; |
180 | 206 |
181 class CC_EXPORT ReverseSpiralDifferenceIterator | 207 class CC_EXPORT ReverseSpiralDifferenceIterator |
182 : public BaseDifferenceIterator { | 208 : public BaseDifferenceIterator { |
183 public: | 209 public: |
184 ReverseSpiralDifferenceIterator(); | 210 ReverseSpiralDifferenceIterator(); |
185 ReverseSpiralDifferenceIterator(const TilingData* tiling_data, | 211 ReverseSpiralDifferenceIterator(const TilingData* tiling_data, |
186 const gfx::Rect& consider_rect, | 212 const gfx::Rect& consider_rect, |
187 const gfx::Rect& ignore_rect, | 213 const gfx::Rect& ignore_rect, |
188 const gfx::Rect& center_rect); | 214 const gfx::Rect& center_rect); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
239 gfx::Size borderless_max_texture_size_; | 265 gfx::Size borderless_max_texture_size_; |
240 | 266 |
241 // These are computed values. | 267 // These are computed values. |
242 int num_tiles_x_; | 268 int num_tiles_x_; |
243 int num_tiles_y_; | 269 int num_tiles_y_; |
244 }; | 270 }; |
245 | 271 |
246 } // namespace cc | 272 } // namespace cc |
247 | 273 |
248 #endif // CC_BASE_TILING_DATA_H_ | 274 #endif // CC_BASE_TILING_DATA_H_ |
OLD | NEW |