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

Unified Diff: cc/base/tiling_data.cc

Issue 188863002: cc: Spiral iterator fix for negative center. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/base/tiling_data.h ('k') | cc/base/tiling_data_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/base/tiling_data.cc
diff --git a/cc/base/tiling_data.cc b/cc/base/tiling_data.cc
index 4852110e63715f1026ffde77f57ffd58492f2d19..b369dde08ed65200a945ae512a65b07fb13a6440 100644
--- a/cc/base/tiling_data.cc
+++ b/cc/base/tiling_data.cc
@@ -68,30 +68,6 @@ void TilingData::SetBorderTexels(int border_texels) {
RecomputeNumTiles();
}
-std::pair<int, int> TilingData::UnclampedFirstBorderTileIndexFromSrcCoord(
- int x,
- int y) const {
- int inner_tile_width = max_texture_size_.width() - 2 * border_texels_;
- int result_x = (x - 2 * border_texels_) / inner_tile_width;
-
- int inner_tile_height = max_texture_size_.height() - 2 * border_texels_;
- int result_y = (y - 2 * border_texels_) / inner_tile_height;
-
- return std::make_pair(result_x, result_y);
-}
-
-std::pair<int, int> TilingData::UnclampedLastBorderTileIndexFromSrcCoord(
- int x,
- int y) const {
- int inner_tile_width = max_texture_size_.width() - 2 * border_texels_;
- int result_x = x / inner_tile_width;
-
- int inner_tile_height = max_texture_size_.height() - 2 * border_texels_;
- int result_y = y / inner_tile_height;
-
- return std::make_pair(result_x, result_y);
-}
-
int TilingData::TileXIndexFromSrcCoord(int src_position) const {
if (num_tiles_x_ <= 1)
return 0;
@@ -498,26 +474,47 @@ TilingData::SpiralDifferenceIterator::SpiralDifferenceIterator(
return;
}
- std::pair<int, int> around_left_top =
- tiling_data->UnclampedFirstBorderTileIndexFromSrcCoord(center.x(),
- center.y());
- std::pair<int, int> around_right_bottom =
- tiling_data->UnclampedLastBorderTileIndexFromSrcCoord(
- center.right() - 1, center.bottom() - 1);
-
- if (center.IsEmpty()) {
- around_left_top = std::make_pair(-1, -1);
- around_right_bottom = std::make_pair(-1, -1);
+ // Determine around left, such that it is between -1 and num_tiles_x.
+ int around_left = 0;
+ if (center.x() < 0 || center.IsEmpty())
+ around_left = -1;
+ else if (center.x() > tiling_data->total_size().width())
+ around_left = tiling_data->num_tiles_x();
+ else
+ around_left = tiling_data->FirstBorderTileXIndexFromSrcCoord(center.x());
+
+ // Determine around top, such that it is between -1 and num_tiles_y.
+ int around_top = 0;
+ if (center.y() < 0 || center.IsEmpty())
+ around_top = -1;
+ else if (center.y() > tiling_data->total_size().height())
+ around_top = tiling_data->num_tiles_y();
+ else
+ around_top = tiling_data->FirstBorderTileYIndexFromSrcCoord(center.y());
+
+ // Determine around right, such that it is between -1 and num_tiles_x.
+ int right_src_coord = center.right() - 1;
+ int around_right = 0;
+ if (right_src_coord < 0 || center.IsEmpty()) {
+ around_right = -1;
+ } else if (right_src_coord > tiling_data->total_size().width()) {
+ around_right = tiling_data->num_tiles_x();
+ } else {
+ around_right =
+ tiling_data->LastBorderTileXIndexFromSrcCoord(right_src_coord);
}
- int around_left = std::max(
- -1, std::min(tiling_data_->num_tiles_x(), around_left_top.first));
- int around_top = std::max(
- -1, std::min(tiling_data_->num_tiles_y(), around_left_top.second));
- int around_right = std::max(
- -1, std::min(tiling_data_->num_tiles_x(), around_right_bottom.first));
- int around_bottom = std::max(
- -1, std::min(tiling_data_->num_tiles_y(), around_right_bottom.second));
+ // Determine around bottom, such that it is between -1 and num_tiles_y.
+ int bottom_src_coord = center.bottom() - 1;
+ int around_bottom = 0;
+ if (bottom_src_coord < 0 || center.IsEmpty()) {
+ around_bottom = -1;
+ } else if (bottom_src_coord > tiling_data->total_size().height()) {
+ around_bottom = tiling_data->num_tiles_y();
+ } else {
+ around_bottom =
+ tiling_data->LastBorderTileYIndexFromSrcCoord(bottom_src_coord);
+ }
vertical_step_count_ = around_bottom - around_top + 1;
horizontal_step_count_ = around_right - around_left + 1;
« no previous file with comments | « cc/base/tiling_data.h ('k') | cc/base/tiling_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698