summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/layers/content_layer_unittest.cc6
-rw-r--r--cc/layers/picture_layer.cc4
-rw-r--r--cc/layers/picture_layer_impl_unittest.cc12
-rw-r--r--cc/layers/scrollbar_layer.cc7
-rw-r--r--cc/layers/tiled_layer_unittest.cc2
-rw-r--r--cc/output/renderer_pixeltest.cc2
-rw-r--r--cc/resources/content_layer_updater.cc9
-rw-r--r--cc/resources/picture_layer_tiling.cc25
-rw-r--r--cc/resources/picture_layer_tiling.h4
-rw-r--r--cc/resources/picture_layer_tiling_set.cc4
-rw-r--r--cc/resources/picture_layer_tiling_unittest.cc4
-rw-r--r--cc/resources/picture_pile_base.cc4
-rw-r--r--cc/resources/picture_pile_impl.cc16
-rw-r--r--cc/resources/picture_pile_unittest.cc8
-rw-r--r--ui/gfx/rect.h29
-rw-r--r--ui/gfx/rect_unittest.cc88
16 files changed, 169 insertions, 55 deletions
diff --git a/cc/layers/content_layer_unittest.cc b/cc/layers/content_layer_unittest.cc
index defb246..16e42ed 100644
--- a/cc/layers/content_layer_unittest.cc
+++ b/cc/layers/content_layer_unittest.cc
@@ -35,7 +35,7 @@ TEST(ContentLayerTest, ContentLayerPainterWithDeviceScale) {
float contents_scale = 2.f;
gfx::Rect content_rect(10, 10, 100, 100);
gfx::Rect opaque_rect_in_layer_space(5, 5, 20, 20);
- gfx::RectF opaque_rect_in_content_space = gfx::ScaleRect(
+ gfx::Rect opaque_rect_in_content_space = gfx::ScaleToEnclosingRect(
opaque_rect_in_layer_space, contents_scale, contents_scale);
MockContentLayerClient client(opaque_rect_in_layer_space);
FakeRenderingStatsInstrumentation stats_instrumentation;
@@ -52,8 +52,8 @@ TEST(ContentLayerTest, ContentLayerPainterWithDeviceScale) {
&resulting_opaque_rect,
NULL);
- EXPECT_RECT_EQ(gfx::ToEnclosingRect(opaque_rect_in_content_space),
- resulting_opaque_rect);
+ EXPECT_EQ(opaque_rect_in_content_space.ToString(),
+ resulting_opaque_rect.ToString());
}
} // namespace
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc
index 87c19d7..dfb645f 100644
--- a/cc/layers/picture_layer.cc
+++ b/cc/layers/picture_layer.cc
@@ -87,8 +87,8 @@ void PictureLayer::Update(ResourceUpdateQueue*,
pile_invalidation_.Swap(&pending_invalidation_);
pending_invalidation_.Clear();
- gfx::Rect visible_layer_rect = gfx::ToEnclosingRect(
- gfx::ScaleRect(visible_content_rect(), 1.f / contents_scale_x()));
+ gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
+ visible_content_rect(), 1.f / contents_scale_x());
devtools_instrumentation::ScopedPaintLayer paint_layer(id());
pile_->Update(client_,
background_color(),
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 4111e07..e6cb0f5 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -246,9 +246,9 @@ TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
EXPECT_GT(tilings->num_tilings(), 0u);
for (size_t i = 0; i < tilings->num_tilings(); ++i) {
const PictureLayerTiling* tiling = tilings->tiling_at(i);
- gfx::Rect content_invalidation = gfx::ToEnclosingRect(gfx::ScaleRect(
+ gfx::Rect content_invalidation = gfx::ScaleToEnclosingRect(
layer_invalidation,
- tiling->contents_scale()));
+ tiling->contents_scale());
for (PictureLayerTiling::CoverageIterator
iter(tiling,
tiling->contents_scale(),
@@ -309,9 +309,9 @@ TEST_F(PictureLayerImplTest, NoInvalidationBoundsChange) {
EXPECT_GT(tilings->num_tilings(), 0u);
for (size_t i = 0; i < tilings->num_tilings(); ++i) {
const PictureLayerTiling* tiling = tilings->tiling_at(i);
- gfx::Rect active_content_bounds = gfx::ToEnclosingRect(gfx::ScaleRect(
+ gfx::Rect active_content_bounds = gfx::ScaleToEnclosingRect(
gfx::Rect(active_layer_bounds),
- tiling->contents_scale()));
+ tiling->contents_scale());
for (PictureLayerTiling::CoverageIterator
iter(tiling,
tiling->contents_scale(),
@@ -376,8 +376,8 @@ TEST_F(PictureLayerImplTest, AddTilesFromNewRecording) {
++iter) {
EXPECT_FALSE(iter.full_tile_geometry_rect().IsEmpty());
// Ensure there is a recording for this tile.
- gfx::Rect layer_rect = gfx::ToEnclosingRect(gfx::ScaleRect(
- iter.full_tile_geometry_rect(), 1.f / tiling->contents_scale()));
+ gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
+ iter.full_tile_geometry_rect(), 1.f / tiling->contents_scale());
layer_rect.Intersect(gfx::Rect(layer_bounds));
bool in_pending = pending_pile->recorded_region().Contains(layer_rect);
diff --git a/cc/layers/scrollbar_layer.cc b/cc/layers/scrollbar_layer.cc
index 3d6f6f5..4b8accb 100644
--- a/cc/layers/scrollbar_layer.cc
+++ b/cc/layers/scrollbar_layer.cc
@@ -358,10 +358,9 @@ gfx::Rect ScrollbarLayer::ScrollbarLayerRectToContentRect(
gfx::Rect layer_rect) const {
// Don't intersect with the bounds as in LayerRectToContentRect() because
// layer_rect here might be in coordinates of the containing layer.
- gfx::RectF content_rect = gfx::ScaleRect(layer_rect,
- contents_scale_y(),
- contents_scale_y());
- return gfx::ToEnclosingRect(content_rect);
+ return gfx::ScaleToEnclosingRect(layer_rect,
+ contents_scale_y(),
+ contents_scale_y());
}
void ScrollbarLayer::SetTexturePriorities(
diff --git a/cc/layers/tiled_layer_unittest.cc b/cc/layers/tiled_layer_unittest.cc
index d6b5d69..fb682d4 100644
--- a/cc/layers/tiled_layer_unittest.cc
+++ b/cc/layers/tiled_layer_unittest.cc
@@ -1379,7 +1379,7 @@ TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndScaling) {
gfx::Rect layer_bounds_rect(layer->bounds());
layer->draw_properties().drawable_content_rect =
- gfx::ToEnclosingRect(gfx::ScaleRect(layer_bounds_rect, 0.5));
+ gfx::ScaleToEnclosingRect(layer_bounds_rect, 0.5f);
layer->draw_properties().visible_content_rect =
gfx::Rect(layer->content_bounds());
layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index 672f64b..060a284 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -910,7 +910,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) {
pile->RerecordPile();
gfx::Rect content_rect(
- gfx::ToEnclosingRect(gfx::ScaleRect(layer_rect, contents_scale)));
+ gfx::ScaleToEnclosingRect(layer_rect, contents_scale));
gfx::Rect content_union_rect(
gfx::ToEnclosingRect(gfx::ScaleRect(union_layer_rect, contents_scale)));
diff --git a/cc/resources/content_layer_updater.cc b/cc/resources/content_layer_updater.cc
index e267398..4e967e2 100644
--- a/cc/resources/content_layer_updater.cc
+++ b/cc/resources/content_layer_updater.cc
@@ -42,9 +42,8 @@ void ContentLayerUpdater::PaintContents(SkCanvas* canvas,
canvas->scale(SkFloatToScalar(contents_width_scale),
SkFloatToScalar(contents_height_scale));
- gfx::RectF rect = gfx::ScaleRect(
+ layer_rect = gfx::ScaleToEnclosingRect(
content_rect, 1.f / contents_width_scale, 1.f / contents_height_scale);
- layer_rect = gfx::ToEnclosingRect(rect);
}
SkPaint paint;
@@ -59,9 +58,9 @@ void ContentLayerUpdater::PaintContents(SkCanvas* canvas,
painter_->Paint(canvas, layer_rect, &opaque_layer_rect);
canvas->restore();
- gfx::RectF opaque_content_rect = gfx::ScaleRect(
- opaque_layer_rect, contents_width_scale, contents_height_scale);
- *resulting_opaque_rect = gfx::ToEnclosedRect(opaque_content_rect);
+ gfx::Rect opaque_content_rect = gfx::ToEnclosedRect(gfx::ScaleRect(
+ opaque_layer_rect, contents_width_scale, contents_height_scale));
+ *resulting_opaque_rect = opaque_content_rect;
content_rect_ = content_rect;
}
diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc
index 8913c64..8aef066 100644
--- a/cc/resources/picture_layer_tiling.cc
+++ b/cc/resources/picture_layer_tiling.cc
@@ -89,7 +89,7 @@ void PictureLayerTiling::CreateTile(int i, int j) {
Tile* candidate_tile = twin->TileAt(i, j);
if (candidate_tile) {
gfx::Rect rect =
- gfx::ToEnclosingRect(ScaleRect(paint_rect, 1.0f / contents_scale_));
+ gfx::ScaleToEnclosingRect(paint_rect, 1.0f / contents_scale_);
if (!client_->GetInvalidation()->Intersects(rect)) {
tiles_[key] = candidate_tile;
return;
@@ -160,9 +160,9 @@ PictureLayerTiling::CoverageIterator::CoverageIterator(
1 / dest_to_content_scale_));
gfx::Rect content_rect =
- gfx::ToEnclosingRect(gfx::ScaleRect(dest_rect_,
- dest_to_content_scale_,
- dest_to_content_scale_));
+ gfx::ScaleToEnclosingRect(dest_rect_,
+ dest_to_content_scale_,
+ dest_to_content_scale_);
// IndexFromSrcCoord clamps to valid tile ranges, so it's necessary to
// check for non-intersection first.
content_rect.Intersect(gfx::Rect(tiling_->tiling_data_.total_size()));
@@ -211,9 +211,10 @@ PictureLayerTiling::CoverageIterator::operator++() {
gfx::Rect content_rect = tiling_->tiling_data_.TileBounds(tile_i_, tile_j_);
- current_geometry_rect_ = gfx::ToEnclosingRect(
- gfx::ScaleRect(content_rect, 1 / dest_to_content_scale_,
- 1 / dest_to_content_scale_));
+ current_geometry_rect_ =
+ gfx::ScaleToEnclosingRect(content_rect,
+ 1 / dest_to_content_scale_,
+ 1 / dest_to_content_scale_);
current_geometry_rect_.Intersect(dest_rect_);
@@ -283,8 +284,8 @@ void PictureLayerTiling::Reset() {
void PictureLayerTiling::UpdateTilePriorities(
WhichTree tree,
gfx::Size device_viewport,
- const gfx::RectF& viewport_in_layer_space,
- const gfx::RectF& visible_layer_rect,
+ gfx::Rect viewport_in_layer_space,
+ gfx::Rect visible_layer_rect,
gfx::Size last_layer_bounds,
gfx::Size current_layer_bounds,
float last_layer_contents_scale,
@@ -304,11 +305,9 @@ void PictureLayerTiling::UpdateTilePriorities(
}
gfx::Rect viewport_in_content_space =
- gfx::ToEnclosingRect(gfx::ScaleRect(viewport_in_layer_space,
- contents_scale_));
+ gfx::ScaleToEnclosingRect(viewport_in_layer_space, contents_scale_);
gfx::Rect visible_content_rect =
- gfx::ToEnclosingRect(gfx::ScaleRect(visible_layer_rect,
- contents_scale_));
+ gfx::ScaleToEnclosingRect(visible_layer_rect, contents_scale_);
gfx::Size tile_size = tiling_data_.max_texture_size();
int64 interest_rect_area =
diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h
index 3243dd8..c6521ad 100644
--- a/cc/resources/picture_layer_tiling.h
+++ b/cc/resources/picture_layer_tiling.h
@@ -129,8 +129,8 @@ class CC_EXPORT PictureLayerTiling {
void UpdateTilePriorities(
WhichTree tree,
gfx::Size device_viewport,
- const gfx::RectF& viewport_in_layer_space,
- const gfx::RectF& visible_layer_rect,
+ gfx::Rect viewport_in_layer_space,
+ gfx::Rect visible_layer_rect,
gfx::Size last_layer_bounds,
gfx::Size current_layer_bounds,
float last_layer_contents_scale,
diff --git a/cc/resources/picture_layer_tiling_set.cc b/cc/resources/picture_layer_tiling_set.cc
index 47d384b..865a434 100644
--- a/cc/resources/picture_layer_tiling_set.cc
+++ b/cc/resources/picture_layer_tiling_set.cc
@@ -263,10 +263,10 @@ void PictureLayerTilingSet::UpdateTilePriorities(
const gfx::Transform& current_screen_transform,
double current_frame_time_in_seconds,
size_t max_tiles_for_interest_area) {
- gfx::RectF viewport_in_layer_space = gfx::ScaleRect(
+ gfx::Rect viewport_in_layer_space = gfx::ScaleToEnclosingRect(
viewport_in_content_space,
1.f / current_layer_contents_scale);
- gfx::RectF visible_layer_rect = gfx::ScaleRect(
+ gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
visible_content_rect,
1.f / current_layer_contents_scale);
diff --git a/cc/resources/picture_layer_tiling_unittest.cc b/cc/resources/picture_layer_tiling_unittest.cc
index 3a90796..e708251 100644
--- a/cc/resources/picture_layer_tiling_unittest.cc
+++ b/cc/resources/picture_layer_tiling_unittest.cc
@@ -128,8 +128,8 @@ class PictureLayerTilingIteratorTest : public testing::Test {
void VerifyTilesCoverNonContainedRect(float rect_scale, gfx::Rect dest_rect) {
float dest_to_contents_scale = tiling_->contents_scale() / rect_scale;
- gfx::Rect clamped_rect(gfx::ToEnclosingRect(gfx::ScaleRect(
- tiling_->ContentRect(), 1 / dest_to_contents_scale)));
+ gfx::Rect clamped_rect = gfx::ScaleToEnclosingRect(
+ tiling_->ContentRect(), 1.f / dest_to_contents_scale);
clamped_rect.Intersect(dest_rect);
VerifyTilesExactlyCoverRect(rect_scale, dest_rect, clamped_rect);
}
diff --git a/cc/resources/picture_pile_base.cc b/cc/resources/picture_pile_base.cc
index 85c2ee8..ed1b6a2 100644
--- a/cc/resources/picture_pile_base.cc
+++ b/cc/resources/picture_pile_base.cc
@@ -170,8 +170,8 @@ bool PicturePileBase::HasRecordingAt(int x, int y) {
bool PicturePileBase::CanRaster(float contents_scale, gfx::Rect content_rect) {
if (tiling_.total_size().IsEmpty())
return false;
- gfx::Rect layer_rect = gfx::ToEnclosingRect(
- gfx::ScaleRect(content_rect, 1.f / contents_scale));
+ gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
+ content_rect, 1.f / contents_scale);
layer_rect.Intersect(gfx::Rect(tiling_.total_size()));
return recorded_region_.Contains(layer_rect);
}
diff --git a/cc/resources/picture_pile_impl.cc b/cc/resources/picture_pile_impl.cc
index 7cd06a8..052e075 100644
--- a/cc/resources/picture_pile_impl.cc
+++ b/cc/resources/picture_pile_impl.cc
@@ -112,8 +112,8 @@ void PicturePileImpl::Raster(
}
// Rasterize the collection of relevant picture piles.
- gfx::Rect layer_rect = gfx::ToEnclosingRect(
- gfx::ScaleRect(content_rect, 1.f / contents_scale));
+ gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
+ content_rect, 1.f / contents_scale);
canvas->clipRect(gfx::RectToSkRect(content_rect),
SkRegion::kReplace_Op);
@@ -144,8 +144,8 @@ void PicturePileImpl::Raster(
// of the picture's layer rect. The min_contents_scale enforces that
// enough buffer pixels have been added such that the enclosed rect
// encompasses all invalidated pixels at any larger scale level.
- gfx::Rect content_clip = gfx::ToEnclosedRect(
- gfx::ScaleRect((*i)->LayerRect(), contents_scale));
+ gfx::Rect content_clip = gfx::ScaleToEnclosedRect(
+ (*i)->LayerRect(), contents_scale);
DCHECK(!content_clip.IsEmpty()) <<
"Layer rect: " << (*i)->LayerRect().ToString() <<
"Contents scale: " << contents_scale;
@@ -246,8 +246,8 @@ void PicturePileImpl::AnalyzeInRect(gfx::Rect content_rect,
DCHECK(analysis);
TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect");
- gfx::Rect layer_rect = gfx::ToEnclosingRect(
- gfx::ScaleRect(content_rect, 1.0f / contents_scale));
+ gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
+ content_rect, 1.0f / contents_scale);
layer_rect.Intersect(gfx::Rect(tiling_.total_size()));
@@ -277,8 +277,8 @@ PicturePileImpl::PixelRefIterator::PixelRefIterator(
float contents_scale,
const PicturePileImpl* picture_pile)
: picture_pile_(picture_pile),
- layer_rect_(gfx::ToEnclosingRect(
- gfx::ScaleRect(content_rect, 1.f / contents_scale))),
+ layer_rect_(gfx::ScaleToEnclosingRect(
+ content_rect, 1.f / contents_scale)),
tile_iterator_(&picture_pile_->tiling_, layer_rect_),
picture_list_(NULL) {
// Early out if there isn't a single tile.
diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc
index f8e1a63..7f75cee 100644
--- a/cc/resources/picture_pile_unittest.cc
+++ b/cc/resources/picture_pile_unittest.cc
@@ -64,8 +64,8 @@ TEST(PicturePileTest, SmallInvalidateInflated) {
it != picture_list.end();
++it) {
scoped_refptr<Picture> picture = *it;
- gfx::Rect picture_rect = gfx::ToEnclosedRect(
- gfx::ScaleRect(picture->LayerRect(), min_scale));
+ gfx::Rect picture_rect =
+ gfx::ScaleToEnclosedRect(picture->LayerRect(), min_scale);
// The invalidation in each tile should have been made large enough
// that scaling it never makes a rect smaller than 1 px wide or tall.
@@ -185,8 +185,8 @@ TEST(PicturePileTest, InvalidateOnTileBoundaryInflated) {
it != picture_list.end();
++it) {
scoped_refptr<Picture> picture = *it;
- gfx::Rect picture_rect = gfx::ToEnclosedRect(
- gfx::ScaleRect(picture->LayerRect(), min_scale));
+ gfx::Rect picture_rect =
+ gfx::ScaleToEnclosedRect(picture->LayerRect(), min_scale);
// The invalidation in each tile should have been made large enough
// that scaling it never makes a rect smaller than 1 px wide or tall.
diff --git a/ui/gfx/rect.h b/ui/gfx/rect.h
index 52856d7..d983770 100644
--- a/ui/gfx/rect.h
+++ b/ui/gfx/rect.h
@@ -12,6 +12,7 @@
#ifndef UI_GFX_RECT_H_
#define UI_GFX_RECT_H_
+#include <cmath>
#include <string>
#include "ui/gfx/point.h"
@@ -107,6 +108,34 @@ UI_EXPORT Rect SubtractRects(const Rect& a, const Rect& b);
// contained within the rect, because they will appear on one of these edges.
UI_EXPORT Rect BoundingRect(const Point& p1, const Point& p2);
+inline Rect ScaleToEnclosingRect(const Rect& rect,
+ float x_scale,
+ float y_scale) {
+ int x = std::floor(rect.x() * x_scale);
+ int y = std::floor(rect.y() * y_scale);
+ int r = rect.width() == 0 ? x : std::ceil(rect.right() * x_scale);
+ int b = rect.height() == 0 ? y : std::ceil(rect.bottom() * y_scale);
+ return Rect(x, y, r - x, b - y);
+}
+
+inline Rect ScaleToEnclosingRect(const Rect& rect, float scale) {
+ return ScaleToEnclosingRect(rect, scale, scale);
+}
+
+inline Rect ScaleToEnclosedRect(const Rect& rect,
+ float x_scale,
+ float y_scale) {
+ int x = std::ceil(rect.x() * x_scale);
+ int y = std::ceil(rect.y() * y_scale);
+ int r = rect.width() == 0 ? x : std::floor(rect.right() * x_scale);
+ int b = rect.height() == 0 ? y : std::floor(rect.bottom() * y_scale);
+ return Rect(x, y, r - x, b - y);
+}
+
+inline Rect ScaleToEnclosedRect(const Rect& rect, float scale) {
+ return ScaleToEnclosedRect(rect, scale, scale);
+}
+
#if !defined(COMPILER_MSVC)
extern template class RectBase<Rect, Point, Size, Insets, Vector2d, int>;
#endif
diff --git a/ui/gfx/rect_unittest.cc b/ui/gfx/rect_unittest.cc
index 2e18ae7..50ccdcf 100644
--- a/ui/gfx/rect_unittest.cc
+++ b/ui/gfx/rect_unittest.cc
@@ -602,6 +602,94 @@ TEST(RectTest, ToFlooredRect) {
}
}
+TEST(RectTest, ScaleToEnclosedRect) {
+ static const struct Test {
+ Rect input_rect;
+ float input_scale;
+ Rect expected_rect;
+ } tests[] = {
+ {
+ Rect(),
+ 5.f,
+ Rect(),
+ }, {
+ Rect(1, 1, 1, 1),
+ 5.f,
+ Rect(5, 5, 5, 5),
+ }, {
+ Rect(-1, -1, 0, 0),
+ 5.f,
+ Rect(-5, -5, 0, 0),
+ }, {
+ Rect(1, -1, 0, 1),
+ 5.f,
+ Rect(5, -5, 0, 5),
+ }, {
+ Rect(-1, 1, 1, 0),
+ 5.f,
+ Rect(-5, 5, 5, 0),
+ }, {
+ Rect(1, 2, 3, 4),
+ 1.5f,
+ Rect(2, 3, 4, 6),
+ }, {
+ Rect(-1, -2, 0, 0),
+ 1.5f,
+ Rect(-1, -3, 0, 0),
+ }
+ };
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
+ Rect result = ScaleToEnclosedRect(tests[i].input_rect,
+ tests[i].input_scale);
+ EXPECT_EQ(tests[i].expected_rect.ToString(), result.ToString());
+ }
+}
+
+TEST(RectTest, ScaleToEnclosingRect) {
+ static const struct Test {
+ Rect input_rect;
+ float input_scale;
+ Rect expected_rect;
+ } tests[] = {
+ {
+ Rect(),
+ 5.f,
+ Rect(),
+ }, {
+ Rect(1, 1, 1, 1),
+ 5.f,
+ Rect(5, 5, 5, 5),
+ }, {
+ Rect(-1, -1, 0, 0),
+ 5.f,
+ Rect(-5, -5, 0, 0),
+ }, {
+ Rect(1, -1, 0, 1),
+ 5.f,
+ Rect(5, -5, 0, 5),
+ }, {
+ Rect(-1, 1, 1, 0),
+ 5.f,
+ Rect(-5, 5, 5, 0),
+ }, {
+ Rect(1, 2, 3, 4),
+ 1.5f,
+ Rect(1, 3, 5, 6),
+ }, {
+ Rect(-1, -2, 0, 0),
+ 1.5f,
+ Rect(-2, -3, 0, 0),
+ }
+ };
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
+ Rect result = ScaleToEnclosingRect(tests[i].input_rect,
+ tests[i].input_scale);
+ EXPECT_EQ(tests[i].expected_rect.ToString(), result.ToString());
+ }
+}
+
#if defined(OS_WIN)
TEST(RectTest, ConstructAndAssign) {
const RECT rect_1 = { 0, 0, 10, 10 };