painted_scrollbar_layer_impl_unittest.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/layers/painted_scrollbar_layer_impl.h" 6 7#include "cc/test/layer_test_common.h" 8#include "testing/gtest/include/gtest/gtest.h" 9 10namespace cc { 11namespace { 12 13TEST(PaintedScrollbarLayerImplTest, Occlusion) { 14 gfx::Size layer_size(10, 1000); 15 gfx::Size viewport_size(1000, 1000); 16 17 LayerTestCommon::LayerImplTest impl; 18 19 SkBitmap thumb_sk_bitmap; 20 thumb_sk_bitmap.allocN32Pixels(10, 10); 21 thumb_sk_bitmap.setImmutable(); 22 UIResourceId thumb_uid = 5; 23 UIResourceBitmap thumb_bitmap(thumb_sk_bitmap); 24 impl.host_impl()->CreateUIResource(thumb_uid, thumb_bitmap); 25 26 SkBitmap track_sk_bitmap; 27 track_sk_bitmap.allocN32Pixels(10, 10); 28 track_sk_bitmap.setImmutable(); 29 UIResourceId track_uid = 6; 30 UIResourceBitmap track_bitmap(track_sk_bitmap); 31 impl.host_impl()->CreateUIResource(track_uid, track_bitmap); 32 33 ScrollbarOrientation orientation = VERTICAL; 34 35 PaintedScrollbarLayerImpl* scrollbar_layer_impl = 36 impl.AddChildToRoot<PaintedScrollbarLayerImpl>(orientation); 37 scrollbar_layer_impl->SetAnchorPoint(gfx::PointF()); 38 scrollbar_layer_impl->SetBounds(layer_size); 39 scrollbar_layer_impl->SetContentBounds(layer_size); 40 scrollbar_layer_impl->SetDrawsContent(true); 41 scrollbar_layer_impl->SetThumbThickness(layer_size.width()); 42 scrollbar_layer_impl->SetThumbLength(500); 43 scrollbar_layer_impl->SetTrackLength(layer_size.height()); 44 scrollbar_layer_impl->SetCurrentPos(100.f / 4); 45 scrollbar_layer_impl->SetMaximum(100); 46 scrollbar_layer_impl->SetVisibleToTotalLengthRatio(1.f / 2); 47 scrollbar_layer_impl->set_track_ui_resource_id(track_uid); 48 scrollbar_layer_impl->set_thumb_ui_resource_id(thumb_uid); 49 50 impl.CalcDrawProps(viewport_size); 51 52 gfx::Rect thumb_rect = scrollbar_layer_impl->ComputeThumbQuadRect(); 53 EXPECT_EQ(gfx::Rect(0, 500 / 4, 10, layer_size.height() / 2).ToString(), 54 thumb_rect.ToString()); 55 56 { 57 SCOPED_TRACE("No occlusion"); 58 gfx::Rect occluded; 59 impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); 60 61 size_t partially_occluded_count = 0; 62 LayerTestCommon::VerifyQuadsCoverRectWithOcclusion( 63 impl.quad_list(), 64 gfx::Rect(layer_size), 65 occluded, 66 &partially_occluded_count); 67 EXPECT_EQ(2u, impl.quad_list().size()); 68 EXPECT_EQ(0u, partially_occluded_count); 69 } 70 71 { 72 SCOPED_TRACE("Full occlusion"); 73 gfx::Rect occluded(scrollbar_layer_impl->visible_content_rect()); 74 impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); 75 76 LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); 77 EXPECT_EQ(impl.quad_list().size(), 0u); 78 } 79 80 { 81 SCOPED_TRACE("Partial occlusion"); 82 gfx::Rect occluded(0, 0, 5, 1000); 83 impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded); 84 85 size_t partially_occluded_count = 0; 86 LayerTestCommon::VerifyQuadsCoverRectWithOcclusion( 87 impl.quad_list(), thumb_rect, occluded, &partially_occluded_count); 88 // The layer outputs two quads, which is partially occluded. 89 EXPECT_EQ(2u, impl.quad_list().size()); 90 EXPECT_EQ(2u, partially_occluded_count); 91 } 92} 93 94} // namespace 95} // namespace cc 96