Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: cc/base/tiling_data.h

Issue 1017713003: cc: Reduce duplicated tiling data difference iterator code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Naming Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/base/tiling_data.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <utility> 8 #include <utility>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 const gfx::Rect& consider_rect, 94 const gfx::Rect& consider_rect,
95 bool include_borders); 95 bool include_borders);
96 Iterator& operator++(); 96 Iterator& operator++();
97 97
98 private: 98 private:
99 int left_; 99 int left_;
100 int right_; 100 int right_;
101 int bottom_; 101 int bottom_;
102 }; 102 };
103 103
104 // Iterate through all indices whose bounds (not including borders) intersect 104 class CC_EXPORT BaseDifferenceIterator : public BaseIterator {
105 // with |consider| but which also do not intersect with |ignore|. 105 protected:
106 class CC_EXPORT DifferenceIterator : public BaseIterator { 106 BaseDifferenceIterator();
107 public: 107 BaseDifferenceIterator(const TilingData* tiling_data,
108 DifferenceIterator(const TilingData* tiling_data, 108 const gfx::Rect& consider_rect,
109 const gfx::Rect& consider_rect, 109 const gfx::Rect& ignore_rect);
110 const gfx::Rect& ignore_rect);
111 DifferenceIterator& operator++();
112 110
113 private: 111 bool HasConsiderRect() const;
112 bool in_consider_rect() const {
113 return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
114 index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
115 }
114 bool in_ignore_rect() const { 116 bool in_ignore_rect() const {
115 return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ && 117 return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
116 index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_; 118 index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
117 } 119 }
118 120
119 int consider_left_; 121 int consider_left_;
120 int consider_top_; 122 int consider_top_;
121 int consider_right_; 123 int consider_right_;
122 int consider_bottom_; 124 int consider_bottom_;
123 int ignore_left_; 125 int ignore_left_;
124 int ignore_top_; 126 int ignore_top_;
125 int ignore_right_; 127 int ignore_right_;
126 int ignore_bottom_; 128 int ignore_bottom_;
127 }; 129 };
128 130
131 // Iterate through all indices whose bounds (not including borders) intersect
132 // with |consider| but which also do not intersect with |ignore|.
133 class CC_EXPORT DifferenceIterator : public BaseDifferenceIterator {
134 public:
135 DifferenceIterator(const TilingData* tiling_data,
136 const gfx::Rect& consider_rect,
137 const gfx::Rect& ignore_rect);
138 DifferenceIterator& operator++();
139 };
140
129 // Iterate through all indices whose bounds + border intersect with 141 // Iterate through all indices whose bounds + border intersect with
130 // |consider| but which also do not intersect with |ignore|. The iterator 142 // |consider| but which also do not intersect with |ignore|. The iterator
131 // order is a counterclockwise spiral around the given center. 143 // order is a counterclockwise spiral around the given center.
132 class CC_EXPORT SpiralDifferenceIterator : public BaseIterator { 144 class CC_EXPORT SpiralDifferenceIterator : public BaseDifferenceIterator {
133 public: 145 public:
134 SpiralDifferenceIterator(); 146 SpiralDifferenceIterator();
135 SpiralDifferenceIterator(const TilingData* tiling_data, 147 SpiralDifferenceIterator(const TilingData* tiling_data,
136 const gfx::Rect& consider_rect, 148 const gfx::Rect& consider_rect,
137 const gfx::Rect& ignore_rect, 149 const gfx::Rect& ignore_rect,
138 const gfx::Rect& center_rect); 150 const gfx::Rect& center_rect);
139 SpiralDifferenceIterator& operator++(); 151 SpiralDifferenceIterator& operator++();
140 152
141 private: 153 private:
142 bool in_consider_rect() const {
143 return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
144 index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
145 }
146 bool in_ignore_rect() const {
147 return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
148 index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
149 }
150 bool valid_column() const { 154 bool valid_column() const {
151 return index_x_ >= consider_left_ && index_x_ <= consider_right_; 155 return index_x_ >= consider_left_ && index_x_ <= consider_right_;
152 } 156 }
153 bool valid_row() const { 157 bool valid_row() const {
154 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_; 158 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
155 } 159 }
156 160
157 int current_step_count() const { 161 int current_step_count() const {
158 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_ 162 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_
159 : horizontal_step_count_; 163 : horizontal_step_count_;
160 } 164 }
161 165
162 bool needs_direction_switch() const; 166 bool needs_direction_switch() const;
163 void switch_direction(); 167 void switch_direction();
164 168
165 int consider_left_;
166 int consider_top_;
167 int consider_right_;
168 int consider_bottom_;
169 int ignore_left_;
170 int ignore_top_;
171 int ignore_right_;
172 int ignore_bottom_;
173
174 enum Direction { UP, LEFT, DOWN, RIGHT }; 169 enum Direction { UP, LEFT, DOWN, RIGHT };
175 170
176 Direction direction_; 171 Direction direction_;
177 int delta_x_; 172 int delta_x_;
178 int delta_y_; 173 int delta_y_;
179 int current_step_; 174 int current_step_;
180 int horizontal_step_count_; 175 int horizontal_step_count_;
181 int vertical_step_count_; 176 int vertical_step_count_;
182 }; 177 };
183 178
184 class CC_EXPORT ReverseSpiralDifferenceIterator : public BaseIterator { 179 class CC_EXPORT ReverseSpiralDifferenceIterator
180 : public BaseDifferenceIterator {
185 public: 181 public:
186 ReverseSpiralDifferenceIterator(); 182 ReverseSpiralDifferenceIterator();
187 ReverseSpiralDifferenceIterator(const TilingData* tiling_data, 183 ReverseSpiralDifferenceIterator(const TilingData* tiling_data,
188 const gfx::Rect& consider_rect, 184 const gfx::Rect& consider_rect,
189 const gfx::Rect& ignore_rect, 185 const gfx::Rect& ignore_rect,
190 const gfx::Rect& center_rect); 186 const gfx::Rect& center_rect);
191 ReverseSpiralDifferenceIterator& operator++(); 187 ReverseSpiralDifferenceIterator& operator++();
192 188
193 private: 189 private:
194 bool in_consider_rect() const {
195 return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
196 index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
197 }
198 bool in_around_rect() const { 190 bool in_around_rect() const {
199 return index_x_ >= around_left_ && index_x_ <= around_right_ && 191 return index_x_ >= around_left_ && index_x_ <= around_right_ &&
200 index_y_ >= around_top_ && index_y_ <= around_bottom_; 192 index_y_ >= around_top_ && index_y_ <= around_bottom_;
201 } 193 }
202 bool in_ignore_rect() const {
203 return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
204 index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
205 }
206 bool valid_column() const { 194 bool valid_column() const {
207 return index_x_ >= consider_left_ && index_x_ <= consider_right_; 195 return index_x_ >= consider_left_ && index_x_ <= consider_right_;
208 } 196 }
209 bool valid_row() const { 197 bool valid_row() const {
210 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_; 198 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
211 } 199 }
212 200
213 int current_step_count() const { 201 int current_step_count() const {
214 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_ 202 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_
215 : horizontal_step_count_; 203 : horizontal_step_count_;
216 } 204 }
217 205
218 bool needs_direction_switch() const; 206 bool needs_direction_switch() const;
219 void switch_direction(); 207 void switch_direction();
220 208
221 int consider_left_;
222 int consider_top_;
223 int consider_right_;
224 int consider_bottom_;
225 int around_left_; 209 int around_left_;
226 int around_top_; 210 int around_top_;
227 int around_right_; 211 int around_right_;
228 int around_bottom_; 212 int around_bottom_;
229 int ignore_left_;
230 int ignore_top_;
231 int ignore_right_;
232 int ignore_bottom_;
233 213
234 enum Direction { LEFT, UP, RIGHT, DOWN }; 214 enum Direction { LEFT, UP, RIGHT, DOWN };
235 215
236 Direction direction_; 216 Direction direction_;
237 int delta_x_; 217 int delta_x_;
238 int delta_y_; 218 int delta_y_;
239 int current_step_; 219 int current_step_;
240 int horizontal_step_count_; 220 int horizontal_step_count_;
241 int vertical_step_count_; 221 int vertical_step_count_;
242 }; 222 };
(...skipping 13 matching lines...) Expand all
256 int border_texels_; 236 int border_texels_;
257 237
258 // These are computed values. 238 // These are computed values.
259 int num_tiles_x_; 239 int num_tiles_x_;
260 int num_tiles_y_; 240 int num_tiles_y_;
261 }; 241 };
262 242
263 } // namespace cc 243 } // namespace cc
264 244
265 #endif // CC_BASE_TILING_DATA_H_ 245 #endif // CC_BASE_TILING_DATA_H_
OLDNEW
« no previous file with comments | « no previous file | cc/base/tiling_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698