1 // Copyright 2013 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.
5 #include "cc/layers/solid_color_scrollbar_layer_impl.h"
6 #include "cc/quads/solid_color_draw_quad.h"
7 #include "cc/trees/layer_tree_impl.h"
8 #include "cc/trees/layer_tree_settings.h"
9 #include "cc/trees/occlusion.h"
13 scoped_ptr
<SolidColorScrollbarLayerImpl
> SolidColorScrollbarLayerImpl::Create(
14 LayerTreeImpl
* tree_impl
,
16 ScrollbarOrientation orientation
,
19 bool is_left_side_vertical_scrollbar
,
21 return make_scoped_ptr(
22 new SolidColorScrollbarLayerImpl(tree_impl
,
27 is_left_side_vertical_scrollbar
,
31 SolidColorScrollbarLayerImpl::~SolidColorScrollbarLayerImpl() {}
33 scoped_ptr
<LayerImpl
> SolidColorScrollbarLayerImpl::CreateLayerImpl(
34 LayerTreeImpl
* tree_impl
) {
35 return SolidColorScrollbarLayerImpl::Create(tree_impl
,
40 is_left_side_vertical_scrollbar(),
41 is_overlay_scrollbar());
44 SolidColorScrollbarLayerImpl::SolidColorScrollbarLayerImpl(
45 LayerTreeImpl
* tree_impl
,
47 ScrollbarOrientation orientation
,
50 bool is_left_side_vertical_scrollbar
,
52 : ScrollbarLayerImplBase(tree_impl
,
55 is_left_side_vertical_scrollbar
,
57 thumb_thickness_(thumb_thickness
),
58 track_start_(track_start
),
59 color_(tree_impl
->settings().solid_color_scrollbar_color
) {
63 void SolidColorScrollbarLayerImpl::PushPropertiesTo(LayerImpl
* layer
) {
64 ScrollbarLayerImplBase::PushPropertiesTo(layer
);
67 int SolidColorScrollbarLayerImpl::ThumbThickness() const {
68 if (thumb_thickness_
!= -1)
69 return thumb_thickness_
;
71 if (orientation() == HORIZONTAL
)
72 return bounds().height();
74 return bounds().width();
77 int SolidColorScrollbarLayerImpl::ThumbLength() const {
79 static_cast<int>(visible_to_total_length_ratio() * TrackLength()),
83 float SolidColorScrollbarLayerImpl::TrackLength() const {
84 if (orientation() == HORIZONTAL
)
85 return bounds().width() - TrackStart() * 2;
87 return bounds().height() + vertical_adjust() - TrackStart() * 2;
90 int SolidColorScrollbarLayerImpl::TrackStart() const { return track_start_
; }
92 bool SolidColorScrollbarLayerImpl::IsThumbResizable() const {
96 void SolidColorScrollbarLayerImpl::AppendQuads(
97 RenderPass
* render_pass
,
98 const Occlusion
& occlusion_in_content_space
,
99 AppendQuadsData
* append_quads_data
) {
100 SharedQuadState
* shared_quad_state
=
101 render_pass
->CreateAndAppendSharedQuadState();
102 PopulateSharedQuadState(shared_quad_state
);
104 AppendDebugBorderQuad(
105 render_pass
, content_bounds(), shared_quad_state
, append_quads_data
);
107 gfx::Rect
thumb_quad_rect(ComputeThumbQuadRect());
108 gfx::Rect visible_quad_rect
=
109 occlusion_in_content_space
.GetUnoccludedContentRect(thumb_quad_rect
);
110 if (visible_quad_rect
.IsEmpty())
113 SolidColorDrawQuad
* quad
=
114 render_pass
->CreateAndAppendDrawQuad
<SolidColorDrawQuad
>();
116 shared_quad_state
, thumb_quad_rect
, visible_quad_rect
, color_
, false);