| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cc/layers/contents_scaling_layer.h" |
| |
| #include <vector> |
| |
| #include "cc/test/fake_layer_tree_host.h" |
| #include "cc/test/geometry_test_utils.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace cc { |
| namespace { |
| |
| class MockContentsScalingLayer : public ContentsScalingLayer { |
| public: |
| MockContentsScalingLayer() |
| : ContentsScalingLayer() {} |
| |
| virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) OVERRIDE { |
| last_needs_display_rect_ = dirty_rect; |
| ContentsScalingLayer::SetNeedsDisplayRect(dirty_rect); |
| } |
| |
| const gfx::RectF& LastNeedsDisplayRect() const { |
| return last_needs_display_rect_; |
| } |
| |
| private: |
| virtual ~MockContentsScalingLayer() {} |
| |
| gfx::RectF last_needs_display_rect_; |
| }; |
| |
| static void CalcDrawProps(FakeLayerTreeHost* host, float device_scale_factor) { |
| RenderSurfaceLayerList render_surface_layer_list; |
| LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
| host->root_layer(), gfx::Size(500, 500), &render_surface_layer_list); |
| inputs.device_scale_factor = device_scale_factor; |
| LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
| } |
| |
| TEST(ContentsScalingLayerTest, CheckContentsBounds) { |
| scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
| |
| scoped_refptr<MockContentsScalingLayer> test_layer = |
| make_scoped_refptr(new MockContentsScalingLayer()); |
| |
| scoped_refptr<Layer> root = Layer::Create(); |
| root->AddChild(test_layer); |
| host->SetRootLayer(root); |
| |
| test_layer->SetBounds(gfx::Size(320, 240)); |
| |
| CalcDrawProps(host.get(), 1.f); |
| EXPECT_FLOAT_EQ(1.f, test_layer->contents_scale_x()); |
| EXPECT_FLOAT_EQ(1.f, test_layer->contents_scale_y()); |
| EXPECT_EQ(320, test_layer->content_bounds().width()); |
| EXPECT_EQ(240, test_layer->content_bounds().height()); |
| |
| CalcDrawProps(host.get(), 2.f); |
| EXPECT_EQ(640, test_layer->content_bounds().width()); |
| EXPECT_EQ(480, test_layer->content_bounds().height()); |
| |
| test_layer->SetBounds(gfx::Size(10, 20)); |
| CalcDrawProps(host.get(), 2.f); |
| EXPECT_EQ(20, test_layer->content_bounds().width()); |
| EXPECT_EQ(40, test_layer->content_bounds().height()); |
| |
| CalcDrawProps(host.get(), 1.33f); |
| EXPECT_EQ(14, test_layer->content_bounds().width()); |
| EXPECT_EQ(27, test_layer->content_bounds().height()); |
| } |
| |
| } // namespace |
| } // namespace cc |