cc: Pass Occlusion instead of OcclusionTracker to LayerImpls
[chromium-blink-merge.git] / cc / layers / solid_color_scrollbar_layer_impl.cc
blobdb6a502e0e6131627c4828a2535ac248029809a5
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"
11 namespace cc {
13 scoped_ptr<SolidColorScrollbarLayerImpl> SolidColorScrollbarLayerImpl::Create(
14 LayerTreeImpl* tree_impl,
15 int id,
16 ScrollbarOrientation orientation,
17 int thumb_thickness,
18 int track_start,
19 bool is_left_side_vertical_scrollbar,
20 bool is_overlay) {
21 return make_scoped_ptr(
22 new SolidColorScrollbarLayerImpl(tree_impl,
23 id,
24 orientation,
25 thumb_thickness,
26 track_start,
27 is_left_side_vertical_scrollbar,
28 is_overlay));
31 SolidColorScrollbarLayerImpl::~SolidColorScrollbarLayerImpl() {}
33 scoped_ptr<LayerImpl> SolidColorScrollbarLayerImpl::CreateLayerImpl(
34 LayerTreeImpl* tree_impl) {
35 return SolidColorScrollbarLayerImpl::Create(tree_impl,
36 id(),
37 orientation(),
38 thumb_thickness_,
39 track_start_,
40 is_left_side_vertical_scrollbar(),
41 is_overlay_scrollbar());
44 SolidColorScrollbarLayerImpl::SolidColorScrollbarLayerImpl(
45 LayerTreeImpl* tree_impl,
46 int id,
47 ScrollbarOrientation orientation,
48 int thumb_thickness,
49 int track_start,
50 bool is_left_side_vertical_scrollbar,
51 bool is_overlay)
52 : ScrollbarLayerImplBase(tree_impl,
53 id,
54 orientation,
55 is_left_side_vertical_scrollbar,
56 is_overlay),
57 thumb_thickness_(thumb_thickness),
58 track_start_(track_start),
59 color_(tree_impl->settings().solid_color_scrollbar_color) {
60 SetOpacity(0.f);
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();
73 else
74 return bounds().width();
77 int SolidColorScrollbarLayerImpl::ThumbLength() const {
78 return std::max(
79 static_cast<int>(visible_to_total_length_ratio() * TrackLength()),
80 ThumbThickness());
83 float SolidColorScrollbarLayerImpl::TrackLength() const {
84 if (orientation() == HORIZONTAL)
85 return bounds().width() - TrackStart() * 2;
86 else
87 return bounds().height() + vertical_adjust() - TrackStart() * 2;
90 int SolidColorScrollbarLayerImpl::TrackStart() const { return track_start_; }
92 bool SolidColorScrollbarLayerImpl::IsThumbResizable() const {
93 return true;
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())
111 return;
113 SolidColorDrawQuad* quad =
114 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
115 quad->SetNew(
116 shared_quad_state, thumb_quad_rect, visible_quad_rect, color_, false);
119 } // namespace cc