| Index: cc/base/tiling_data.cc
|
| diff --git a/cc/base/tiling_data.cc b/cc/base/tiling_data.cc
|
| index cf2bb57f64c623a09329ee9eecc257358b3bdd7f..9e34f2c098d760c2bcc5043dd653231c6c9d9d32 100644
|
| --- a/cc/base/tiling_data.cc
|
| +++ b/cc/base/tiling_data.cc
|
| @@ -10,10 +10,9 @@
|
| #include "ui/gfx/geometry/vector2d.h"
|
|
|
| namespace cc {
|
| +namespace {
|
|
|
| -static int ComputeNumTiles(int max_texture_size,
|
| - int total_size,
|
| - int border_texels) {
|
| +int ComputeNumTiles(int max_texture_size, int total_size, int border_texels) {
|
| if (max_texture_size - 2 * border_texels <= 0)
|
| return total_size > 0 && max_texture_size >= total_size ? 1 : 0;
|
|
|
| @@ -23,6 +22,8 @@ static int ComputeNumTiles(int max_texture_size,
|
| return total_size > 0 ? num_tiles : 0;
|
| }
|
|
|
| +} // namespace
|
| +
|
| TilingData::TilingData()
|
| : border_texels_(0) {
|
| RecomputeNumTiles();
|
| @@ -46,6 +47,10 @@ TilingData::TilingData(const gfx::Size& max_texture_size,
|
| RecomputeNumTiles();
|
| }
|
|
|
| +TilingData::TilingData(const TilingData& other) = default;
|
| +
|
| +TilingData::~TilingData() = default;
|
| +
|
| void TilingData::SetTilingSize(const gfx::Size& tiling_size) {
|
| tiling_size_ = tiling_size;
|
| RecomputeNumTiles();
|
| @@ -70,9 +75,8 @@ int TilingData::TileXIndexFromSrcCoord(int src_position) const {
|
| if (num_tiles_x_ <= 1)
|
| return 0;
|
|
|
| - DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
|
| - int x = (src_position - border_texels_) /
|
| - (max_texture_size_.width() - 2 * border_texels_);
|
| + int x =
|
| + (src_position - border_texels_) / borderless_max_texture_size_.width();
|
| return std::min(std::max(x, 0), num_tiles_x_ - 1);
|
| }
|
|
|
| @@ -80,9 +84,8 @@ int TilingData::TileYIndexFromSrcCoord(int src_position) const {
|
| if (num_tiles_y_ <= 1)
|
| return 0;
|
|
|
| - DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
|
| - int y = (src_position - border_texels_) /
|
| - (max_texture_size_.height() - 2 * border_texels_);
|
| + int y =
|
| + (src_position - border_texels_) / borderless_max_texture_size_.height();
|
| return std::min(std::max(y, 0), num_tiles_y_ - 1);
|
| }
|
|
|
| @@ -90,9 +93,8 @@ int TilingData::FirstBorderTileXIndexFromSrcCoord(int src_position) const {
|
| if (num_tiles_x_ <= 1)
|
| return 0;
|
|
|
| - DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
|
| - int inner_tile_size = max_texture_size_.width() - 2 * border_texels_;
|
| - int x = (src_position - 2 * border_texels_) / inner_tile_size;
|
| + int x = (src_position - 2 * border_texels_) /
|
| + borderless_max_texture_size_.width();
|
| return std::min(std::max(x, 0), num_tiles_x_ - 1);
|
| }
|
|
|
| @@ -100,9 +102,8 @@ int TilingData::FirstBorderTileYIndexFromSrcCoord(int src_position) const {
|
| if (num_tiles_y_ <= 1)
|
| return 0;
|
|
|
| - DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
|
| - int inner_tile_size = max_texture_size_.height() - 2 * border_texels_;
|
| - int y = (src_position - 2 * border_texels_) / inner_tile_size;
|
| + int y = (src_position - 2 * border_texels_) /
|
| + borderless_max_texture_size_.height();
|
| return std::min(std::max(y, 0), num_tiles_y_ - 1);
|
| }
|
|
|
| @@ -110,9 +111,7 @@ int TilingData::LastBorderTileXIndexFromSrcCoord(int src_position) const {
|
| if (num_tiles_x_ <= 1)
|
| return 0;
|
|
|
| - DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
|
| - int inner_tile_size = max_texture_size_.width() - 2 * border_texels_;
|
| - int x = src_position / inner_tile_size;
|
| + int x = src_position / borderless_max_texture_size_.width();
|
| return std::min(std::max(x, 0), num_tiles_x_ - 1);
|
| }
|
|
|
| @@ -120,9 +119,7 @@ int TilingData::LastBorderTileYIndexFromSrcCoord(int src_position) const {
|
| if (num_tiles_y_ <= 1)
|
| return 0;
|
|
|
| - DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
|
| - int inner_tile_size = max_texture_size_.height() - 2 * border_texels_;
|
| - int y = src_position / inner_tile_size;
|
| + int y = src_position / borderless_max_texture_size_.height();
|
| return std::min(std::max(y, 0), num_tiles_y_ - 1);
|
| }
|
|
|
| @@ -161,22 +158,20 @@ gfx::Rect TilingData::ExpandRectToTileBounds(const gfx::Rect& rect) const {
|
|
|
| gfx::Rect TilingData::TileBounds(int i, int j) const {
|
| AssertTile(i, j);
|
| - int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_;
|
| - int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_;
|
|
|
| - int lo_x = max_texture_size_x * i;
|
| + int lo_x = borderless_max_texture_size_.width() * i;
|
| if (i != 0)
|
| lo_x += border_texels_;
|
|
|
| - int lo_y = max_texture_size_y * j;
|
| + int lo_y = borderless_max_texture_size_.height() * j;
|
| if (j != 0)
|
| lo_y += border_texels_;
|
|
|
| - int hi_x = max_texture_size_x * (i + 1) + border_texels_;
|
| + int hi_x = borderless_max_texture_size_.width() * (i + 1) + border_texels_;
|
| if (i + 1 == num_tiles_x_)
|
| hi_x += border_texels_;
|
|
|
| - int hi_y = max_texture_size_y * (j + 1) + border_texels_;
|
| + int hi_y = borderless_max_texture_size_.height() * (j + 1) + border_texels_;
|
| if (j + 1 == num_tiles_y_)
|
| hi_y += border_texels_;
|
|
|
| @@ -198,14 +193,12 @@ gfx::Rect TilingData::TileBounds(int i, int j) const {
|
|
|
| gfx::Rect TilingData::TileBoundsWithBorder(int i, int j) const {
|
| AssertTile(i, j);
|
| - int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_;
|
| - int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_;
|
|
|
| - int lo_x = max_texture_size_x * i;
|
| - int lo_y = max_texture_size_y * j;
|
| + int lo_x = borderless_max_texture_size_.width() * i;
|
| + int lo_y = borderless_max_texture_size_.height() * j;
|
|
|
| - int hi_x = lo_x + max_texture_size_x + 2 * border_texels_;
|
| - int hi_y = lo_y + max_texture_size_y + 2 * border_texels_;
|
| + int hi_x = lo_x + borderless_max_texture_size_.width() + 2 * border_texels_;
|
| + int hi_y = lo_y + borderless_max_texture_size_.height() + 2 * border_texels_;
|
|
|
| hi_x = std::min(hi_x, tiling_size_.width());
|
| hi_y = std::min(hi_y, tiling_size_.height());
|
| @@ -227,7 +220,7 @@ int TilingData::TilePositionX(int x_index) const {
|
| DCHECK_GE(x_index, 0);
|
| DCHECK_LT(x_index, num_tiles_x_);
|
|
|
| - int pos = (max_texture_size_.width() - 2 * border_texels_) * x_index;
|
| + int pos = (borderless_max_texture_size_.width()) * x_index;
|
| if (x_index != 0)
|
| pos += border_texels_;
|
|
|
| @@ -238,7 +231,7 @@ int TilingData::TilePositionY(int y_index) const {
|
| DCHECK_GE(y_index, 0);
|
| DCHECK_LT(y_index, num_tiles_y_);
|
|
|
| - int pos = (max_texture_size_.height() - 2 * border_texels_) * y_index;
|
| + int pos = (borderless_max_texture_size_.height()) * y_index;
|
| if (y_index != 0)
|
| pos += border_texels_;
|
|
|
| @@ -254,7 +247,7 @@ int TilingData::TileSizeX(int x_index) const {
|
| if (!x_index && num_tiles_x_ > 1)
|
| return max_texture_size_.width() - border_texels_;
|
| if (x_index < num_tiles_x_ - 1)
|
| - return max_texture_size_.width() - 2 * border_texels_;
|
| + return borderless_max_texture_size_.width();
|
| if (x_index == num_tiles_x_ - 1)
|
| return tiling_size_.width() - TilePositionX(x_index);
|
|
|
| @@ -271,7 +264,7 @@ int TilingData::TileSizeY(int y_index) const {
|
| if (!y_index && num_tiles_y_ > 1)
|
| return max_texture_size_.height() - border_texels_;
|
| if (y_index < num_tiles_y_ - 1)
|
| - return max_texture_size_.height() - 2 * border_texels_;
|
| + return borderless_max_texture_size_.height();
|
| if (y_index == num_tiles_y_ - 1)
|
| return tiling_size_.height() - TilePositionY(y_index);
|
|
|
| @@ -291,6 +284,13 @@ void TilingData::RecomputeNumTiles() {
|
| max_texture_size_.width(), tiling_size_.width(), border_texels_);
|
| num_tiles_y_ = ComputeNumTiles(
|
| max_texture_size_.height(), tiling_size_.height(), border_texels_);
|
| +
|
| + borderless_max_texture_size_.set_width(max_texture_size_.width() -
|
| + 2 * border_texels_);
|
| + borderless_max_texture_size_.set_height(max_texture_size_.height() -
|
| + 2 * border_texels_);
|
| + DCHECK_GE(borderless_max_texture_size_.width(), 0);
|
| + DCHECK_GE(borderless_max_texture_size_.height(), 0);
|
| }
|
|
|
| TilingData::BaseIterator::BaseIterator() : index_x_(-1), index_y_(-1) {
|
|
|