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

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

Issue 1057283003: Remove parts of //cc we aren't using (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 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
« no previous file with comments | « cc/base/synced_property.h ('k') | 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef CC_BASE_TILING_DATA_H_
6 #define CC_BASE_TILING_DATA_H_
7
8 #include <utility>
9
10 #include "base/basictypes.h"
11 #include "base/logging.h"
12 #include "cc/base/cc_export.h"
13 #include "ui/gfx/geometry/rect.h"
14 #include "ui/gfx/geometry/size.h"
15
16 namespace gfx {
17 class Vector2d;
18 }
19
20 namespace cc {
21
22 class CC_EXPORT TilingData {
23 public:
24 TilingData();
25 TilingData(const gfx::Size& max_texture_size,
26 const gfx::Size& tiling_size,
27 bool has_border_texels);
28 TilingData(const gfx::Size& max_texture_size,
29 const gfx::Size& tiling_size,
30 int border_texels);
31
32 gfx::Size tiling_size() const { return tiling_size_; }
33 void SetTilingSize(const gfx::Size& tiling_size);
34
35 gfx::Size max_texture_size() const { return max_texture_size_; }
36 void SetMaxTextureSize(const gfx::Size& max_texture_size);
37
38 int border_texels() const { return border_texels_; }
39 void SetHasBorderTexels(bool has_border_texels);
40 void SetBorderTexels(int border_texels);
41
42 bool has_empty_bounds() const { return !num_tiles_x_ || !num_tiles_y_; }
43 int num_tiles_x() const { return num_tiles_x_; }
44 int num_tiles_y() const { return num_tiles_y_; }
45 // Return the tile index whose non-border texels include src_position.
46 int TileXIndexFromSrcCoord(int src_position) const;
47 int TileYIndexFromSrcCoord(int src_position) const;
48 // Return the lowest tile index whose border texels include src_position.
49 int FirstBorderTileXIndexFromSrcCoord(int src_position) const;
50 int FirstBorderTileYIndexFromSrcCoord(int src_position) const;
51 // Return the highest tile index whose border texels include src_position.
52 int LastBorderTileXIndexFromSrcCoord(int src_position) const;
53 int LastBorderTileYIndexFromSrcCoord(int src_position) const;
54
55 gfx::Rect ExpandRectIgnoringBordersToTileBounds(const gfx::Rect& rect) const;
56 gfx::Rect ExpandRectToTileBounds(const gfx::Rect& rect) const;
57
58 gfx::Rect TileBounds(int i, int j) const;
59 gfx::Rect TileBoundsWithBorder(int i, int j) const;
60 int TilePositionX(int x_index) const;
61 int TilePositionY(int y_index) const;
62 int TileSizeX(int x_index) const;
63 int TileSizeY(int y_index) const;
64
65 // Difference between TileBound's and TileBoundWithBorder's origin().
66 gfx::Vector2d TextureOffset(int x_index, int y_index) const;
67
68 class CC_EXPORT BaseIterator {
69 public:
70 operator bool() const { return index_x_ != -1 && index_y_ != -1; }
71
72 int index_x() const { return index_x_; }
73 int index_y() const { return index_y_; }
74 std::pair<int, int> index() const {
75 return std::make_pair(index_x_, index_y_);
76 }
77
78 protected:
79 BaseIterator();
80 void done() {
81 index_x_ = -1;
82 index_y_ = -1;
83 }
84
85 int index_x_;
86 int index_y_;
87 };
88
89 // Iterate through tiles whose bounds + optional border intersect with |rect|.
90 class CC_EXPORT Iterator : public BaseIterator {
91 public:
92 Iterator();
93 Iterator(const TilingData* tiling_data,
94 const gfx::Rect& consider_rect,
95 bool include_borders);
96 Iterator& operator++();
97
98 private:
99 int left_;
100 int right_;
101 int bottom_;
102 };
103
104 class CC_EXPORT BaseDifferenceIterator : public BaseIterator {
105 protected:
106 BaseDifferenceIterator();
107 BaseDifferenceIterator(const TilingData* tiling_data,
108 const gfx::Rect& consider_rect,
109 const gfx::Rect& ignore_rect);
110
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 }
116 bool in_ignore_rect() const {
117 return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
118 index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
119 }
120
121 int consider_left_;
122 int consider_top_;
123 int consider_right_;
124 int consider_bottom_;
125 int ignore_left_;
126 int ignore_top_;
127 int ignore_right_;
128 int ignore_bottom_;
129 };
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
141 // Iterate through all indices whose bounds + border intersect with
142 // |consider| but which also do not intersect with |ignore|. The iterator
143 // order is a counterclockwise spiral around the given center.
144 class CC_EXPORT SpiralDifferenceIterator : public BaseDifferenceIterator {
145 public:
146 SpiralDifferenceIterator();
147 SpiralDifferenceIterator(const TilingData* tiling_data,
148 const gfx::Rect& consider_rect,
149 const gfx::Rect& ignore_rect,
150 const gfx::Rect& center_rect);
151 SpiralDifferenceIterator& operator++();
152
153 private:
154 bool valid_column() const {
155 return index_x_ >= consider_left_ && index_x_ <= consider_right_;
156 }
157 bool valid_row() const {
158 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
159 }
160
161 int current_step_count() const {
162 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_
163 : horizontal_step_count_;
164 }
165
166 bool needs_direction_switch() const;
167 void switch_direction();
168
169 enum Direction { UP, LEFT, DOWN, RIGHT };
170
171 Direction direction_;
172 int delta_x_;
173 int delta_y_;
174 int current_step_;
175 int horizontal_step_count_;
176 int vertical_step_count_;
177 };
178
179 class CC_EXPORT ReverseSpiralDifferenceIterator
180 : public BaseDifferenceIterator {
181 public:
182 ReverseSpiralDifferenceIterator();
183 ReverseSpiralDifferenceIterator(const TilingData* tiling_data,
184 const gfx::Rect& consider_rect,
185 const gfx::Rect& ignore_rect,
186 const gfx::Rect& center_rect);
187 ReverseSpiralDifferenceIterator& operator++();
188
189 private:
190 bool in_around_rect() const {
191 return index_x_ >= around_left_ && index_x_ <= around_right_ &&
192 index_y_ >= around_top_ && index_y_ <= around_bottom_;
193 }
194 bool valid_column() const {
195 return index_x_ >= consider_left_ && index_x_ <= consider_right_;
196 }
197 bool valid_row() const {
198 return index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
199 }
200
201 int current_step_count() const {
202 return (direction_ == UP || direction_ == DOWN) ? vertical_step_count_
203 : horizontal_step_count_;
204 }
205
206 bool needs_direction_switch() const;
207 void switch_direction();
208
209 int around_left_;
210 int around_top_;
211 int around_right_;
212 int around_bottom_;
213
214 enum Direction { LEFT, UP, RIGHT, DOWN };
215
216 Direction direction_;
217 int delta_x_;
218 int delta_y_;
219 int current_step_;
220 int horizontal_step_count_;
221 int vertical_step_count_;
222 };
223
224 private:
225 void AssertTile(int i, int j) const {
226 DCHECK_GE(i, 0);
227 DCHECK_LT(i, num_tiles_x_);
228 DCHECK_GE(j, 0);
229 DCHECK_LT(j, num_tiles_y_);
230 }
231
232 void RecomputeNumTiles();
233
234 gfx::Size max_texture_size_;
235 gfx::Size tiling_size_;
236 int border_texels_;
237
238 // These are computed values.
239 int num_tiles_x_;
240 int num_tiles_y_;
241 };
242
243 } // namespace cc
244
245 #endif // CC_BASE_TILING_DATA_H_
OLDNEW
« no previous file with comments | « cc/base/synced_property.h ('k') | cc/base/tiling_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698