Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / cc / layers / solid_color_scrollbar_layer_impl.cc
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.
4
5 #include "cc/layers/quad_sink.h"
6 #include "cc/layers/solid_color_scrollbar_layer_impl.h"
7 #include "cc/quads/solid_color_draw_quad.h"
8 #include "cc/trees/layer_tree_impl.h"
9 #include "cc/trees/layer_tree_settings.h"
10
11 namespace cc {
12
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));
29 }
30
31 SolidColorScrollbarLayerImpl::~SolidColorScrollbarLayerImpl() {}
32
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())
42       .PassAs<LayerImpl>();
43 }
44
45 SolidColorScrollbarLayerImpl::SolidColorScrollbarLayerImpl(
46     LayerTreeImpl* tree_impl,
47     int id,
48     ScrollbarOrientation orientation,
49     int thumb_thickness,
50     int track_start,
51     bool is_left_side_vertical_scrollbar,
52     bool is_overlay)
53     : ScrollbarLayerImplBase(tree_impl,
54                              id,
55                              orientation,
56                              is_left_side_vertical_scrollbar,
57                              is_overlay),
58       thumb_thickness_(thumb_thickness),
59       track_start_(track_start),
60       color_(tree_impl->settings().solid_color_scrollbar_color) {
61   SetOpacity(0.f);
62 }
63
64 void SolidColorScrollbarLayerImpl::PushPropertiesTo(LayerImpl* layer) {
65   ScrollbarLayerImplBase::PushPropertiesTo(layer);
66 }
67
68 int SolidColorScrollbarLayerImpl::ThumbThickness() const {
69   if (thumb_thickness_ != -1)
70     return thumb_thickness_;
71
72   if (orientation() == HORIZONTAL)
73     return bounds().height();
74   else
75     return bounds().width();
76 }
77
78 int SolidColorScrollbarLayerImpl::ThumbLength() const {
79   return std::max(
80       static_cast<int>(visible_to_total_length_ratio() * TrackLength()),
81       ThumbThickness());
82 }
83
84 float SolidColorScrollbarLayerImpl::TrackLength() const {
85   if (orientation() == HORIZONTAL)
86     return bounds().width() - TrackStart() * 2;
87   else
88     return bounds().height() + vertical_adjust() - TrackStart() * 2;
89 }
90
91 int SolidColorScrollbarLayerImpl::TrackStart() const { return track_start_; }
92
93 bool SolidColorScrollbarLayerImpl::IsThumbResizable() const {
94   return true;
95 }
96
97 void SolidColorScrollbarLayerImpl::AppendQuads(QuadSink* quad_sink,
98                            AppendQuadsData* append_quads_data) {
99   SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState();
100   PopulateSharedQuadState(shared_quad_state);
101
102   AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
103
104   gfx::Rect thumb_quad_rect(ComputeThumbQuadRect());
105   gfx::Rect visible_quad_rect = quad_sink->UnoccludedContentRect(
106       thumb_quad_rect, draw_properties().target_space_transform);
107   if (visible_quad_rect.IsEmpty())
108     return;
109
110   scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
111   quad->SetNew(
112       shared_quad_state, thumb_quad_rect, visible_quad_rect, color_, false);
113   quad_sink->Append(quad.PassAs<DrawQuad>());
114 }
115
116 }  // namespace cc