158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/layers/solid_color_scrollbar_layer_impl.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/quads/solid_color_draw_quad.h" 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/trees/layer_tree_impl.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "cc/trees/layer_tree_settings.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/trees/occlusion_tracker.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace cc { 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)scoped_ptr<SolidColorScrollbarLayerImpl> SolidColorScrollbarLayerImpl::Create( 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LayerTreeImpl* tree_impl, 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int id, 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarOrientation orientation, 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int thumb_thickness, 18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int track_start, 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_left_side_vertical_scrollbar, 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_overlay) { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return make_scoped_ptr( 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new SolidColorScrollbarLayerImpl(tree_impl, 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) id, 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) orientation, 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) thumb_thickness, 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch track_start, 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_left_side_vertical_scrollbar, 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_overlay)); 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)SolidColorScrollbarLayerImpl::~SolidColorScrollbarLayerImpl() {} 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)scoped_ptr<LayerImpl> SolidColorScrollbarLayerImpl::CreateLayerImpl( 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LayerTreeImpl* tree_impl) { 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return SolidColorScrollbarLayerImpl::Create(tree_impl, 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) id(), 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) orientation(), 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) thumb_thickness_, 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch track_start_, 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_left_side_vertical_scrollbar(), 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_overlay_scrollbar()) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .PassAs<LayerImpl>(); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)SolidColorScrollbarLayerImpl::SolidColorScrollbarLayerImpl( 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LayerTreeImpl* tree_impl, 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int id, 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarOrientation orientation, 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int thumb_thickness, 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int track_start, 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_left_side_vertical_scrollbar, 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_overlay) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : ScrollbarLayerImplBase(tree_impl, 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) id, 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) orientation, 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_left_side_vertical_scrollbar, 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_overlay), 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) thumb_thickness_(thumb_thickness), 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch track_start_(track_start), 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) color_(tree_impl->settings().solid_color_scrollbar_color) { 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetOpacity(0.f); 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void SolidColorScrollbarLayerImpl::PushPropertiesTo(LayerImpl* layer) { 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScrollbarLayerImplBase::PushPropertiesTo(layer); 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)int SolidColorScrollbarLayerImpl::ThumbThickness() const { 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (thumb_thickness_ != -1) 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return thumb_thickness_; 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (orientation() == HORIZONTAL) 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return bounds().height(); 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) else 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return bounds().width(); 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)int SolidColorScrollbarLayerImpl::ThumbLength() const { 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return std::max( 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static_cast<int>(visible_to_total_length_ratio() * TrackLength()), 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ThumbThickness()); 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)float SolidColorScrollbarLayerImpl::TrackLength() const { 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (orientation() == HORIZONTAL) 86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return bounds().width() - TrackStart() * 2; 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) else 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return bounds().height() + vertical_adjust() - TrackStart() * 2; 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochint SolidColorScrollbarLayerImpl::TrackStart() const { return track_start_; } 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool SolidColorScrollbarLayerImpl::IsThumbResizable() const { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SolidColorScrollbarLayerImpl::AppendQuads( 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RenderPass* render_pass, 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const OcclusionTracker<LayerImpl>& occlusion_tracker, 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AppendQuadsData* append_quads_data) { 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SharedQuadState* shared_quad_state = 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_pass->CreateAndAppendSharedQuadState(); 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PopulateSharedQuadState(shared_quad_state); 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AppendDebugBorderQuad( 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_pass, content_bounds(), shared_quad_state, append_quads_data); 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect thumb_quad_rect(ComputeThumbQuadRect()); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect visible_quad_rect = 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci occlusion_tracker.GetCurrentOcclusionForLayer( 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_properties().target_space_transform) 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .GetUnoccludedContentRect(thumb_quad_rect); 11323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (visible_quad_rect.IsEmpty()) 11423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return; 11523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SolidColorDrawQuad* quad = 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) quad->SetNew( 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) shared_quad_state, thumb_quad_rect, visible_quad_rect, color_, false); 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace cc 123