123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- // Copyright 2015 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/painted_scrollbar_layer.h"
- #include <memory>
- #include "cc/animation/animation_host.h"
- #include "cc/test/fake_layer_tree_host.h"
- #include "cc/test/fake_layer_tree_host_client.h"
- #include "cc/test/fake_painted_scrollbar_layer.h"
- #include "cc/test/fake_scrollbar.h"
- #include "cc/test/layer_test_common.h"
- #include "cc/test/test_task_graph_runner.h"
- #include "testing/gmock/include/gmock/gmock.h"
- using ::testing::Mock;
- using ::testing::_;
- namespace cc {
- namespace {
- class PaintedScrollbarLayerTest : public testing::Test {
- protected:
- void SetUp() override {
- animation_host_ = AnimationHost::CreateForTesting(ThreadInstance::MAIN);
- layer_tree_host_ = FakeLayerTreeHost::Create(
- &fake_client_, &task_graph_runner_, animation_host_.get());
- }
- FakeLayerTreeHostClient fake_client_;
- TestTaskGraphRunner task_graph_runner_;
- std::unique_ptr<AnimationHost> animation_host_;
- std::unique_ptr<FakeLayerTreeHost> layer_tree_host_;
- };
- class MockScrollbar : public FakeScrollbar {
- public:
- MockScrollbar() {
- set_should_paint(true);
- set_has_thumb(true);
- set_is_overlay(false);
- }
- MOCK_METHOD3(PaintPart,
- void(PaintCanvas* canvas,
- ScrollbarPart part,
- const gfx::Rect& rect));
- private:
- ~MockScrollbar() override = default;
- };
- TEST_F(PaintedScrollbarLayerTest, NeedsPaint) {
- auto scrollbar = base::MakeRefCounted<MockScrollbar>();
- scoped_refptr<PaintedScrollbarLayer> scrollbar_layer =
- PaintedScrollbarLayer::Create(scrollbar);
- scrollbar_layer->SetIsDrawable(true);
- scrollbar_layer->SetBounds(gfx::Size(100, 100));
- layer_tree_host_->SetRootLayer(scrollbar_layer);
- UpdateDrawProperties(layer_tree_host_.get());
- EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get());
- // Request no paint, but expect them to be painted because they have not
- // yet been initialized.
- scrollbar->set_needs_repaint_thumb(false);
- scrollbar->set_needs_repaint_track(false);
- EXPECT_CALL(*scrollbar, PaintPart(_, ScrollbarPart::THUMB, _)).Times(1);
- EXPECT_CALL(*scrollbar,
- PaintPart(_, ScrollbarPart::TRACK_BUTTONS_TICKMARKS, _))
- .Times(1);
- scrollbar_layer->Update();
- Mock::VerifyAndClearExpectations(scrollbar.get());
- // The next update will paint nothing because the first update caused a paint.
- EXPECT_CALL(*scrollbar, PaintPart(_, ScrollbarPart::THUMB, _)).Times(0);
- EXPECT_CALL(*scrollbar,
- PaintPart(_, ScrollbarPart::TRACK_BUTTONS_TICKMARKS, _))
- .Times(0);
- scrollbar_layer->Update();
- Mock::VerifyAndClearExpectations(scrollbar.get());
- // Enable the thumb.
- EXPECT_CALL(*scrollbar, PaintPart(_, ScrollbarPart::THUMB, _)).Times(1);
- EXPECT_CALL(*scrollbar,
- PaintPart(_, ScrollbarPart::TRACK_BUTTONS_TICKMARKS, _))
- .Times(0);
- scrollbar->set_needs_repaint_thumb(true);
- scrollbar->set_needs_repaint_track(false);
- scrollbar_layer->Update();
- Mock::VerifyAndClearExpectations(scrollbar.get());
- // Enable the track.
- EXPECT_CALL(*scrollbar, PaintPart(_, ScrollbarPart::THUMB, _)).Times(0);
- EXPECT_CALL(*scrollbar,
- PaintPart(_, ScrollbarPart::TRACK_BUTTONS_TICKMARKS, _))
- .Times(1);
- scrollbar->set_needs_repaint_thumb(false);
- scrollbar->set_needs_repaint_track(true);
- scrollbar_layer->Update();
- Mock::VerifyAndClearExpectations(scrollbar.get());
- }
- TEST_F(PaintedScrollbarLayerTest, InternalContentBounds) {
- auto scrollbar = base::MakeRefCounted<FakeScrollbar>();
- auto scrollbar_layer = PaintedScrollbarLayer::Create(scrollbar);
- scrollbar_layer->SetIsDrawable(true);
- scrollbar_layer->SetBounds(gfx::Size(10, 100));
- layer_tree_host_->SetRootLayer(scrollbar_layer);
- UpdateDrawProperties(layer_tree_host_.get());
- EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get());
- scrollbar_layer->Update();
- EXPECT_EQ(gfx::Size(10, 100), scrollbar_layer->internal_content_bounds());
- layer_tree_host_->SetViewportRectAndScale(
- layer_tree_host_->device_viewport_rect(), 2.0f,
- layer_tree_host_->local_surface_id_from_parent());
- UpdateDrawProperties(layer_tree_host_.get());
- scrollbar_layer->Update();
- EXPECT_EQ(gfx::Size(20, 200), scrollbar_layer->internal_content_bounds());
- layer_tree_host_->SetViewportRectAndScale(
- layer_tree_host_->device_viewport_rect(), 0.1f,
- layer_tree_host_->local_surface_id_from_parent());
- UpdateDrawProperties(layer_tree_host_.get());
- scrollbar_layer->Update();
- EXPECT_EQ(gfx::Size(10, 100), scrollbar_layer->internal_content_bounds());
- }
- } // namespace
- } // namespace cc
|