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

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

Issue 235753002: cc: Give TilingData a Rect instead of a Size (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
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 #include "cc/base/tiling_data.h" 5 #include "cc/base/tiling_data.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ui/gfx/rect.h" 9 #include "ui/gfx/rect.h"
10 #include "ui/gfx/vector2d.h" 10 #include "ui/gfx/vector2d.h"
(...skipping 12 matching lines...) Expand all
23 return total_size > 0 ? num_tiles : 0; 23 return total_size > 0 ? num_tiles : 0;
24 } 24 }
25 25
26 TilingData::TilingData() 26 TilingData::TilingData()
27 : border_texels_(0) { 27 : border_texels_(0) {
28 RecomputeNumTiles(); 28 RecomputeNumTiles();
29 } 29 }
30 30
31 TilingData::TilingData( 31 TilingData::TilingData(
32 const gfx::Size& max_texture_size, 32 const gfx::Size& max_texture_size,
33 const gfx::Size& total_size, 33 const gfx::Rect& tiling_rect,
34 bool has_border_texels) 34 bool has_border_texels)
35 : max_texture_size_(max_texture_size), 35 : max_texture_size_(max_texture_size),
36 total_size_(total_size), 36 tiling_rect_(tiling_rect),
37 border_texels_(has_border_texels ? 1 : 0) { 37 border_texels_(has_border_texels ? 1 : 0) {
38 RecomputeNumTiles(); 38 RecomputeNumTiles();
39 } 39 }
40 40
41 TilingData::TilingData( 41 TilingData::TilingData(
42 const gfx::Size& max_texture_size, 42 const gfx::Size& max_texture_size,
43 const gfx::Size& total_size, 43 const gfx::Rect& tiling_rect,
44 int border_texels) 44 int border_texels)
45 : max_texture_size_(max_texture_size), 45 : max_texture_size_(max_texture_size),
46 total_size_(total_size), 46 tiling_rect_(tiling_rect),
47 border_texels_(border_texels) { 47 border_texels_(border_texels) {
48 RecomputeNumTiles(); 48 RecomputeNumTiles();
49 } 49 }
50 50
51 void TilingData::SetTotalSize(const gfx::Size& total_size) { 51 void TilingData::SetTilingRect(const gfx::Rect& tiling_rect) {
52 total_size_ = total_size; 52 tiling_rect_ = tiling_rect;
53 RecomputeNumTiles(); 53 RecomputeNumTiles();
54 } 54 }
55 55
56 void TilingData::SetMaxTextureSize(const gfx::Size& max_texture_size) { 56 void TilingData::SetMaxTextureSize(const gfx::Size& max_texture_size) {
57 max_texture_size_ = max_texture_size; 57 max_texture_size_ = max_texture_size;
58 RecomputeNumTiles(); 58 RecomputeNumTiles();
59 } 59 }
60 60
61 void TilingData::SetHasBorderTexels(bool has_border_texels) { 61 void TilingData::SetHasBorderTexels(bool has_border_texels) {
62 border_texels_ = has_border_texels ? 1 : 0; 62 border_texels_ = has_border_texels ? 1 : 0;
63 RecomputeNumTiles(); 63 RecomputeNumTiles();
64 } 64 }
65 65
66 void TilingData::SetBorderTexels(int border_texels) { 66 void TilingData::SetBorderTexels(int border_texels) {
67 border_texels_ = border_texels; 67 border_texels_ = border_texels;
68 RecomputeNumTiles(); 68 RecomputeNumTiles();
69 } 69 }
70 70
71 int TilingData::TileXIndexFromSrcCoord(int src_position) const { 71 int TilingData::TileXIndexFromSrcCoord(int src_position) const {
72 if (num_tiles_x_ <= 1) 72 if (num_tiles_x_ <= 1)
73 return 0; 73 return 0;
74 74
75 src_position -= tiling_rect_.x();
76
75 DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0); 77 DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
76 int x = (src_position - border_texels_) / 78 int x = (src_position - border_texels_) /
77 (max_texture_size_.width() - 2 * border_texels_); 79 (max_texture_size_.width() - 2 * border_texels_);
78 return std::min(std::max(x, 0), num_tiles_x_ - 1); 80 return std::min(std::max(x, 0), num_tiles_x_ - 1);
79 } 81 }
80 82
81 int TilingData::TileYIndexFromSrcCoord(int src_position) const { 83 int TilingData::TileYIndexFromSrcCoord(int src_position) const {
82 if (num_tiles_y_ <= 1) 84 if (num_tiles_y_ <= 1)
83 return 0; 85 return 0;
84 86
87 src_position -= tiling_rect_.y();
88
85 DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0); 89 DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
86 int y = (src_position - border_texels_) / 90 int y = (src_position - border_texels_) /
87 (max_texture_size_.height() - 2 * border_texels_); 91 (max_texture_size_.height() - 2 * border_texels_);
88 return std::min(std::max(y, 0), num_tiles_y_ - 1); 92 return std::min(std::max(y, 0), num_tiles_y_ - 1);
89 } 93 }
90 94
91 int TilingData::FirstBorderTileXIndexFromSrcCoord(int src_position) const { 95 int TilingData::FirstBorderTileXIndexFromSrcCoord(int src_position) const {
92 if (num_tiles_x_ <= 1) 96 if (num_tiles_x_ <= 1)
93 return 0; 97 return 0;
94 98
99 src_position -= tiling_rect_.x();
100
95 DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0); 101 DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
96 int inner_tile_size = max_texture_size_.width() - 2 * border_texels_; 102 int inner_tile_size = max_texture_size_.width() - 2 * border_texels_;
97 int x = (src_position - 2 * border_texels_) / inner_tile_size; 103 int x = (src_position - 2 * border_texels_) / inner_tile_size;
98 return std::min(std::max(x, 0), num_tiles_x_ - 1); 104 return std::min(std::max(x, 0), num_tiles_x_ - 1);
99 } 105 }
100 106
101 int TilingData::FirstBorderTileYIndexFromSrcCoord(int src_position) const { 107 int TilingData::FirstBorderTileYIndexFromSrcCoord(int src_position) const {
102 if (num_tiles_y_ <= 1) 108 if (num_tiles_y_ <= 1)
103 return 0; 109 return 0;
104 110
111 src_position -= tiling_rect_.y();
112
105 DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0); 113 DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
106 int inner_tile_size = max_texture_size_.height() - 2 * border_texels_; 114 int inner_tile_size = max_texture_size_.height() - 2 * border_texels_;
107 int y = (src_position - 2 * border_texels_) / inner_tile_size; 115 int y = (src_position - 2 * border_texels_) / inner_tile_size;
108 return std::min(std::max(y, 0), num_tiles_y_ - 1); 116 return std::min(std::max(y, 0), num_tiles_y_ - 1);
109 } 117 }
110 118
111 int TilingData::LastBorderTileXIndexFromSrcCoord(int src_position) const { 119 int TilingData::LastBorderTileXIndexFromSrcCoord(int src_position) const {
112 if (num_tiles_x_ <= 1) 120 if (num_tiles_x_ <= 1)
113 return 0; 121 return 0;
114 122
123 src_position -= tiling_rect_.x();
124
115 DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0); 125 DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
116 int inner_tile_size = max_texture_size_.width() - 2 * border_texels_; 126 int inner_tile_size = max_texture_size_.width() - 2 * border_texels_;
117 int x = src_position / inner_tile_size; 127 int x = src_position / inner_tile_size;
118 return std::min(std::max(x, 0), num_tiles_x_ - 1); 128 return std::min(std::max(x, 0), num_tiles_x_ - 1);
119 } 129 }
120 130
121 int TilingData::LastBorderTileYIndexFromSrcCoord(int src_position) const { 131 int TilingData::LastBorderTileYIndexFromSrcCoord(int src_position) const {
122 if (num_tiles_y_ <= 1) 132 if (num_tiles_y_ <= 1)
123 return 0; 133 return 0;
124 134
135 src_position -= tiling_rect_.y();
136
125 DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0); 137 DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
126 int inner_tile_size = max_texture_size_.height() - 2 * border_texels_; 138 int inner_tile_size = max_texture_size_.height() - 2 * border_texels_;
127 int y = src_position / inner_tile_size; 139 int y = src_position / inner_tile_size;
128 return std::min(std::max(y, 0), num_tiles_y_ - 1); 140 return std::min(std::max(y, 0), num_tiles_y_ - 1);
129 } 141 }
130 142
131 gfx::Rect TilingData::TileBounds(int i, int j) const { 143 gfx::Rect TilingData::TileBounds(int i, int j) const {
132 AssertTile(i, j); 144 AssertTile(i, j);
133 int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_; 145 int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_;
134 int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_; 146 int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_;
135 int total_size_x = total_size_.width();
136 int total_size_y = total_size_.height();
137 147
138 int lo_x = max_texture_size_x * i; 148 int lo_x = max_texture_size_x * i;
139 if (i != 0) 149 if (i != 0)
140 lo_x += border_texels_; 150 lo_x += border_texels_;
141 151
142 int lo_y = max_texture_size_y * j; 152 int lo_y = max_texture_size_y * j;
143 if (j != 0) 153 if (j != 0)
144 lo_y += border_texels_; 154 lo_y += border_texels_;
145 155
146 int hi_x = max_texture_size_x * (i + 1) + border_texels_; 156 int hi_x = max_texture_size_x * (i + 1) + border_texels_;
147 if (i + 1 == num_tiles_x_) 157 if (i + 1 == num_tiles_x_)
148 hi_x += border_texels_; 158 hi_x += border_texels_;
149 159
150 int hi_y = max_texture_size_y * (j + 1) + border_texels_; 160 int hi_y = max_texture_size_y * (j + 1) + border_texels_;
151 if (j + 1 == num_tiles_y_) 161 if (j + 1 == num_tiles_y_)
152 hi_y += border_texels_; 162 hi_y += border_texels_;
153 163
154 hi_x = std::min(hi_x, total_size_x); 164 lo_x += tiling_rect_.x();
155 hi_y = std::min(hi_y, total_size_y); 165 hi_x += tiling_rect_.x();
166 lo_y += tiling_rect_.y();
167 hi_y += tiling_rect_.y();
168
169 hi_x = std::min(hi_x, tiling_rect_.right());
170 hi_y = std::min(hi_y, tiling_rect_.bottom());
156 171
157 int x = lo_x; 172 int x = lo_x;
158 int y = lo_y; 173 int y = lo_y;
159 int width = hi_x - lo_x; 174 int width = hi_x - lo_x;
160 int height = hi_y - lo_y; 175 int height = hi_y - lo_y;
161 DCHECK_GE(x, 0); 176 DCHECK_GE(x, 0);
162 DCHECK_GE(y, 0); 177 DCHECK_GE(y, 0);
163 DCHECK_GE(width, 0); 178 DCHECK_GE(width, 0);
164 DCHECK_GE(height, 0); 179 DCHECK_GE(height, 0);
165 DCHECK_LE(x, total_size_.width()); 180 DCHECK_LE(x, tiling_rect_.right());
166 DCHECK_LE(y, total_size_.height()); 181 DCHECK_LE(y, tiling_rect_.bottom());
167 return gfx::Rect(x, y, width, height); 182 return gfx::Rect(x, y, width, height);
168 } 183 }
169 184
170 gfx::Rect TilingData::TileBoundsWithBorder(int i, int j) const { 185 gfx::Rect TilingData::TileBoundsWithBorder(int i, int j) const {
171 AssertTile(i, j); 186 AssertTile(i, j);
172 int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_; 187 int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_;
173 int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_; 188 int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_;
174 int total_size_x = total_size_.width();
175 int total_size_y = total_size_.height();
176 189
177 int lo_x = max_texture_size_x * i; 190 int lo_x = max_texture_size_x * i;
178 int lo_y = max_texture_size_y * j; 191 int lo_y = max_texture_size_y * j;
179 192
180 int hi_x = lo_x + max_texture_size_x + 2 * border_texels_; 193 int hi_x = lo_x + max_texture_size_x + 2 * border_texels_;
181 int hi_y = lo_y + max_texture_size_y + 2 * border_texels_; 194 int hi_y = lo_y + max_texture_size_y + 2 * border_texels_;
182 195
183 hi_x = std::min(hi_x, total_size_x); 196 lo_x += tiling_rect_.x();
enne (OOO) 2014/04/11 20:19:51 microoptimization: You could move the offset after
ernstm 2014/04/11 23:43:51 Done.
184 hi_y = std::min(hi_y, total_size_y); 197 hi_x += tiling_rect_.x();
198 lo_y += tiling_rect_.y();
199 hi_y += tiling_rect_.y();
200
201 hi_x = std::min(hi_x, tiling_rect_.right());
202 hi_y = std::min(hi_y, tiling_rect_.bottom());
185 203
186 int x = lo_x; 204 int x = lo_x;
187 int y = lo_y; 205 int y = lo_y;
188 int width = hi_x - lo_x; 206 int width = hi_x - lo_x;
189 int height = hi_y - lo_y; 207 int height = hi_y - lo_y;
190 DCHECK_GE(x, 0); 208 DCHECK_GE(x, 0);
191 DCHECK_GE(y, 0); 209 DCHECK_GE(y, 0);
192 DCHECK_GE(width, 0); 210 DCHECK_GE(width, 0);
193 DCHECK_GE(height, 0); 211 DCHECK_GE(height, 0);
194 DCHECK_LE(x, total_size_.width()); 212 DCHECK_LE(x, tiling_rect_.right());
195 DCHECK_LE(y, total_size_.height()); 213 DCHECK_LE(y, tiling_rect_.bottom());
196 return gfx::Rect(x, y, width, height); 214 return gfx::Rect(x, y, width, height);
197 } 215 }
198 216
199 int TilingData::TilePositionX(int x_index) const { 217 int TilingData::TilePositionX(int x_index) const {
200 DCHECK_GE(x_index, 0); 218 DCHECK_GE(x_index, 0);
201 DCHECK_LT(x_index, num_tiles_x_); 219 DCHECK_LT(x_index, num_tiles_x_);
202 220
203 int pos = (max_texture_size_.width() - 2 * border_texels_) * x_index; 221 int pos = (max_texture_size_.width() - 2 * border_texels_) * x_index;
204 if (x_index != 0) 222 if (x_index != 0)
205 pos += border_texels_; 223 pos += border_texels_;
206 224
225 pos += tiling_rect_.x();
226
207 return pos; 227 return pos;
208 } 228 }
209 229
210 int TilingData::TilePositionY(int y_index) const { 230 int TilingData::TilePositionY(int y_index) const {
211 DCHECK_GE(y_index, 0); 231 DCHECK_GE(y_index, 0);
212 DCHECK_LT(y_index, num_tiles_y_); 232 DCHECK_LT(y_index, num_tiles_y_);
213 233
214 int pos = (max_texture_size_.height() - 2 * border_texels_) * y_index; 234 int pos = (max_texture_size_.height() - 2 * border_texels_) * y_index;
215 if (y_index != 0) 235 if (y_index != 0)
216 pos += border_texels_; 236 pos += border_texels_;
217 237
238 pos += tiling_rect_.y();
239
218 return pos; 240 return pos;
219 } 241 }
220 242
221 int TilingData::TileSizeX(int x_index) const { 243 int TilingData::TileSizeX(int x_index) const {
222 DCHECK_GE(x_index, 0); 244 DCHECK_GE(x_index, 0);
223 DCHECK_LT(x_index, num_tiles_x_); 245 DCHECK_LT(x_index, num_tiles_x_);
224 246
225 if (!x_index && num_tiles_x_ == 1) 247 if (!x_index && num_tiles_x_ == 1)
226 return total_size_.width(); 248 return tiling_rect_.width();
227 if (!x_index && num_tiles_x_ > 1) 249 if (!x_index && num_tiles_x_ > 1)
228 return max_texture_size_.width() - border_texels_; 250 return max_texture_size_.width() - border_texels_;
229 if (x_index < num_tiles_x_ - 1) 251 if (x_index < num_tiles_x_ - 1)
230 return max_texture_size_.width() - 2 * border_texels_; 252 return max_texture_size_.width() - 2 * border_texels_;
231 if (x_index == num_tiles_x_ - 1) 253 if (x_index == num_tiles_x_ - 1)
232 return total_size_.width() - TilePositionX(x_index); 254 return tiling_rect_.width() - TilePositionX(x_index);
233 255
234 NOTREACHED(); 256 NOTREACHED();
235 return 0; 257 return 0;
236 } 258 }
237 259
238 int TilingData::TileSizeY(int y_index) const { 260 int TilingData::TileSizeY(int y_index) const {
239 DCHECK_GE(y_index, 0); 261 DCHECK_GE(y_index, 0);
240 DCHECK_LT(y_index, num_tiles_y_); 262 DCHECK_LT(y_index, num_tiles_y_);
241 263
242 if (!y_index && num_tiles_y_ == 1) 264 if (!y_index && num_tiles_y_ == 1)
243 return total_size_.height(); 265 return tiling_rect_.height();
244 if (!y_index && num_tiles_y_ > 1) 266 if (!y_index && num_tiles_y_ > 1)
245 return max_texture_size_.height() - border_texels_; 267 return max_texture_size_.height() - border_texels_;
246 if (y_index < num_tiles_y_ - 1) 268 if (y_index < num_tiles_y_ - 1)
247 return max_texture_size_.height() - 2 * border_texels_; 269 return max_texture_size_.height() - 2 * border_texels_;
248 if (y_index == num_tiles_y_ - 1) 270 if (y_index == num_tiles_y_ - 1)
249 return total_size_.height() - TilePositionY(y_index); 271 return tiling_rect_.height() - TilePositionY(y_index);
250 272
251 NOTREACHED(); 273 NOTREACHED();
252 return 0; 274 return 0;
253 } 275 }
254 276
255 gfx::Vector2d TilingData::TextureOffset(int x_index, int y_index) const { 277 gfx::Vector2d TilingData::TextureOffset(int x_index, int y_index) const {
256 int left = (!x_index || num_tiles_x_ == 1) ? 0 : border_texels_; 278 int left = (!x_index || num_tiles_x_ == 1) ? 0 : border_texels_;
257 int top = (!y_index || num_tiles_y_ == 1) ? 0 : border_texels_; 279 int top = (!y_index || num_tiles_y_ == 1) ? 0 : border_texels_;
258 280
259 return gfx::Vector2d(left, top); 281 return gfx::Vector2d(left, top);
260 } 282 }
261 283
262 void TilingData::RecomputeNumTiles() { 284 void TilingData::RecomputeNumTiles() {
263 num_tiles_x_ = ComputeNumTiles( 285 num_tiles_x_ = ComputeNumTiles(
264 max_texture_size_.width(), total_size_.width(), border_texels_); 286 max_texture_size_.width(), tiling_rect_.width(), border_texels_);
265 num_tiles_y_ = ComputeNumTiles( 287 num_tiles_y_ = ComputeNumTiles(
266 max_texture_size_.height(), total_size_.height(), border_texels_); 288 max_texture_size_.height(), tiling_rect_.height(), border_texels_);
267 } 289 }
268 290
269 TilingData::BaseIterator::BaseIterator(const TilingData* tiling_data) 291 TilingData::BaseIterator::BaseIterator(const TilingData* tiling_data)
270 : tiling_data_(tiling_data), 292 : tiling_data_(tiling_data),
271 index_x_(-1), 293 index_x_(-1),
272 index_y_(-1) { 294 index_y_(-1) {
273 } 295 }
274 296
275 TilingData::Iterator::Iterator() : BaseIterator(NULL) { done(); } 297 TilingData::Iterator::Iterator() : BaseIterator(NULL) { done(); }
276 298
277 TilingData::Iterator::Iterator(const TilingData* tiling_data, 299 TilingData::Iterator::Iterator(const TilingData* tiling_data,
278 const gfx::Rect& tiling_rect, 300 const gfx::Rect& tiling_rect,
279 bool include_borders) 301 bool include_borders)
280 : BaseIterator(tiling_data), left_(-1), right_(-1), bottom_(-1) { 302 : BaseIterator(tiling_data), left_(-1), right_(-1), bottom_(-1) {
281 if (tiling_data_->num_tiles_x() <= 0 || tiling_data_->num_tiles_y() <= 0) { 303 if (tiling_data_->num_tiles_x() <= 0 || tiling_data_->num_tiles_y() <= 0) {
282 done(); 304 done();
283 return; 305 return;
284 } 306 }
285 307
286 gfx::Rect rect(tiling_rect); 308 gfx::Rect rect(tiling_rect);
287 rect.Intersect(gfx::Rect(tiling_data_->total_size())); 309 rect.Intersect(tiling_data_->tiling_rect());
288 310
289 gfx::Rect top_left_tile; 311 gfx::Rect top_left_tile;
290 if (include_borders) { 312 if (include_borders) {
291 index_x_ = tiling_data_->FirstBorderTileXIndexFromSrcCoord(rect.x()); 313 index_x_ = tiling_data_->FirstBorderTileXIndexFromSrcCoord(rect.x());
292 index_y_ = tiling_data_->FirstBorderTileYIndexFromSrcCoord(rect.y()); 314 index_y_ = tiling_data_->FirstBorderTileYIndexFromSrcCoord(rect.y());
293 right_ = tiling_data_->LastBorderTileXIndexFromSrcCoord(rect.right() - 1); 315 right_ = tiling_data_->LastBorderTileXIndexFromSrcCoord(rect.right() - 1);
294 bottom_ = tiling_data_->LastBorderTileYIndexFromSrcCoord(rect.bottom() - 1); 316 bottom_ = tiling_data_->LastBorderTileYIndexFromSrcCoord(rect.bottom() - 1);
295 top_left_tile = tiling_data_->TileBoundsWithBorder(index_x_, index_y_); 317 top_left_tile = tiling_data_->TileBoundsWithBorder(index_x_, index_y_);
296 } else { 318 } else {
297 index_x_ = tiling_data_->TileXIndexFromSrcCoord(rect.x()); 319 index_x_ = tiling_data_->TileXIndexFromSrcCoord(rect.x());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 consider_bottom_(-1), 356 consider_bottom_(-1),
335 ignore_left_(-1), 357 ignore_left_(-1),
336 ignore_top_(-1), 358 ignore_top_(-1),
337 ignore_right_(-1), 359 ignore_right_(-1),
338 ignore_bottom_(-1) { 360 ignore_bottom_(-1) {
339 if (tiling_data_->num_tiles_x() <= 0 || tiling_data_->num_tiles_y() <= 0) { 361 if (tiling_data_->num_tiles_x() <= 0 || tiling_data_->num_tiles_y() <= 0) {
340 done(); 362 done();
341 return; 363 return;
342 } 364 }
343 365
344 gfx::Rect bounds(tiling_data_->total_size());
345 gfx::Rect consider(consider_rect); 366 gfx::Rect consider(consider_rect);
346 gfx::Rect ignore(ignore_rect); 367 gfx::Rect ignore(ignore_rect);
347 consider.Intersect(bounds); 368 consider.Intersect(tiling_data_->tiling_rect());
348 ignore.Intersect(bounds); 369 ignore.Intersect(tiling_data_->tiling_rect());
349 if (consider.IsEmpty()) { 370 if (consider.IsEmpty()) {
350 done(); 371 done();
351 return; 372 return;
352 } 373 }
353 374
354 consider_left_ = 375 consider_left_ =
355 tiling_data_->FirstBorderTileXIndexFromSrcCoord(consider.x()); 376 tiling_data_->FirstBorderTileXIndexFromSrcCoord(consider.x());
356 consider_top_ = 377 consider_top_ =
357 tiling_data_->FirstBorderTileYIndexFromSrcCoord(consider.y()); 378 tiling_data_->FirstBorderTileYIndexFromSrcCoord(consider.y());
358 consider_right_ = 379 consider_right_ =
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 delta_x_(1), 463 delta_x_(1),
443 delta_y_(0), 464 delta_y_(0),
444 current_step_(0), 465 current_step_(0),
445 horizontal_step_count_(0), 466 horizontal_step_count_(0),
446 vertical_step_count_(0) { 467 vertical_step_count_(0) {
447 if (tiling_data_->num_tiles_x() <= 0 || tiling_data_->num_tiles_y() <= 0) { 468 if (tiling_data_->num_tiles_x() <= 0 || tiling_data_->num_tiles_y() <= 0) {
448 done(); 469 done();
449 return; 470 return;
450 } 471 }
451 472
452 gfx::Rect bounds(tiling_data_->total_size());
453 gfx::Rect consider(consider_rect); 473 gfx::Rect consider(consider_rect);
454 gfx::Rect ignore(ignore_rect); 474 gfx::Rect ignore(ignore_rect);
455 gfx::Rect center(center_rect); 475 gfx::Rect center(center_rect);
456 consider.Intersect(bounds); 476 consider.Intersect(tiling_data_->tiling_rect());
457 ignore.Intersect(bounds); 477 ignore.Intersect(tiling_data_->tiling_rect());
458 if (consider.IsEmpty()) { 478 if (consider.IsEmpty()) {
459 done(); 479 done();
460 return; 480 return;
461 } 481 }
462 482
463 consider_left_ = 483 consider_left_ =
464 tiling_data_->FirstBorderTileXIndexFromSrcCoord(consider.x()); 484 tiling_data_->FirstBorderTileXIndexFromSrcCoord(consider.x());
465 consider_top_ = tiling_data_->FirstBorderTileYIndexFromSrcCoord(consider.y()); 485 consider_top_ = tiling_data_->FirstBorderTileYIndexFromSrcCoord(consider.y());
466 consider_right_ = 486 consider_right_ =
467 tiling_data_->LastBorderTileXIndexFromSrcCoord(consider.right() - 1); 487 tiling_data_->LastBorderTileXIndexFromSrcCoord(consider.right() - 1);
(...skipping 18 matching lines...) Expand all
486 if (ignore_left_ == consider_left_ && ignore_right_ == consider_right_ && 506 if (ignore_left_ == consider_left_ && ignore_right_ == consider_right_ &&
487 ignore_top_ == consider_top_ && ignore_bottom_ == consider_bottom_) { 507 ignore_top_ == consider_top_ && ignore_bottom_ == consider_bottom_) {
488 done(); 508 done();
489 return; 509 return;
490 } 510 }
491 511
492 // Determine around left, such that it is between -1 and num_tiles_x. 512 // Determine around left, such that it is between -1 and num_tiles_x.
493 int around_left = 0; 513 int around_left = 0;
494 if (center.x() < 0 || center.IsEmpty()) 514 if (center.x() < 0 || center.IsEmpty())
495 around_left = -1; 515 around_left = -1;
496 else if (center.x() > tiling_data->total_size().width()) 516 else if (center.x() > tiling_data->tiling_rect().right())
497 around_left = tiling_data->num_tiles_x(); 517 around_left = tiling_data->num_tiles_x();
498 else 518 else
499 around_left = tiling_data->FirstBorderTileXIndexFromSrcCoord(center.x()); 519 around_left = tiling_data->FirstBorderTileXIndexFromSrcCoord(center.x());
500 520
501 // Determine around top, such that it is between -1 and num_tiles_y. 521 // Determine around top, such that it is between -1 and num_tiles_y.
502 int around_top = 0; 522 int around_top = 0;
503 if (center.y() < 0 || center.IsEmpty()) 523 if (center.y() < 0 || center.IsEmpty())
504 around_top = -1; 524 around_top = -1;
505 else if (center.y() > tiling_data->total_size().height()) 525 else if (center.y() > tiling_data->tiling_rect().bottom())
506 around_top = tiling_data->num_tiles_y(); 526 around_top = tiling_data->num_tiles_y();
507 else 527 else
508 around_top = tiling_data->FirstBorderTileYIndexFromSrcCoord(center.y()); 528 around_top = tiling_data->FirstBorderTileYIndexFromSrcCoord(center.y());
509 529
510 // Determine around right, such that it is between -1 and num_tiles_x. 530 // Determine around right, such that it is between -1 and num_tiles_x.
511 int right_src_coord = center.right() - 1; 531 int right_src_coord = center.right() - 1;
512 int around_right = 0; 532 int around_right = 0;
513 if (right_src_coord < 0 || center.IsEmpty()) { 533 if (right_src_coord < 0 || center.IsEmpty()) {
514 around_right = -1; 534 around_right = -1;
515 } else if (right_src_coord > tiling_data->total_size().width()) { 535 } else if (right_src_coord > tiling_data->tiling_rect().right()) {
516 around_right = tiling_data->num_tiles_x(); 536 around_right = tiling_data->num_tiles_x();
517 } else { 537 } else {
518 around_right = 538 around_right =
519 tiling_data->LastBorderTileXIndexFromSrcCoord(right_src_coord); 539 tiling_data->LastBorderTileXIndexFromSrcCoord(right_src_coord);
520 } 540 }
521 541
522 // Determine around bottom, such that it is between -1 and num_tiles_y. 542 // Determine around bottom, such that it is between -1 and num_tiles_y.
523 int bottom_src_coord = center.bottom() - 1; 543 int bottom_src_coord = center.bottom() - 1;
524 int around_bottom = 0; 544 int around_bottom = 0;
525 if (bottom_src_coord < 0 || center.IsEmpty()) { 545 if (bottom_src_coord < 0 || center.IsEmpty()) {
526 around_bottom = -1; 546 around_bottom = -1;
527 } else if (bottom_src_coord > tiling_data->total_size().height()) { 547 } else if (bottom_src_coord > tiling_data->tiling_rect().bottom()) {
528 around_bottom = tiling_data->num_tiles_y(); 548 around_bottom = tiling_data->num_tiles_y();
529 } else { 549 } else {
530 around_bottom = 550 around_bottom =
531 tiling_data->LastBorderTileYIndexFromSrcCoord(bottom_src_coord); 551 tiling_data->LastBorderTileYIndexFromSrcCoord(bottom_src_coord);
532 } 552 }
533 553
534 vertical_step_count_ = around_bottom - around_top + 1; 554 vertical_step_count_ = around_bottom - around_top + 1;
535 horizontal_step_count_ = around_right - around_left + 1; 555 horizontal_step_count_ = around_right - around_left + 1;
536 current_step_ = horizontal_step_count_ - 1; 556 current_step_ = horizontal_step_count_ - 1;
537 557
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 current_step_ = 0; 664 current_step_ = 0;
645 direction_ = static_cast<Direction>((direction_ + 1) % 4); 665 direction_ = static_cast<Direction>((direction_ + 1) % 4);
646 666
647 if (direction_ == RIGHT || direction_ == LEFT) { 667 if (direction_ == RIGHT || direction_ == LEFT) {
648 ++vertical_step_count_; 668 ++vertical_step_count_;
649 ++horizontal_step_count_; 669 ++horizontal_step_count_;
650 } 670 }
651 } 671 }
652 672
653 } // namespace cc 673 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698