- add sources.
[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     bool is_left_side_vertical_scrollbar) {
19   return make_scoped_ptr(new SolidColorScrollbarLayerImpl(
20       tree_impl, id, orientation, thumb_thickness,
21       is_left_side_vertical_scrollbar));
22 }
23
24 SolidColorScrollbarLayerImpl::~SolidColorScrollbarLayerImpl() {}
25
26 scoped_ptr<LayerImpl> SolidColorScrollbarLayerImpl::CreateLayerImpl(
27     LayerTreeImpl* tree_impl) {
28   return SolidColorScrollbarLayerImpl::Create(
29       tree_impl, id(), orientation(), thumb_thickness_,
30       is_left_side_vertical_scrollbar()).PassAs<LayerImpl>();
31 }
32
33 SolidColorScrollbarLayerImpl::SolidColorScrollbarLayerImpl(
34     LayerTreeImpl* tree_impl,
35     int id,
36     ScrollbarOrientation orientation,
37     int thumb_thickness,
38     bool is_left_side_vertical_scrollbar)
39     : ScrollbarLayerImplBase(tree_impl, id, orientation,
40           is_left_side_vertical_scrollbar),
41       thumb_thickness_(thumb_thickness),
42       color_(tree_impl->settings().solid_color_scrollbar_color) {}
43
44 void SolidColorScrollbarLayerImpl::PushPropertiesTo(LayerImpl* layer) {
45   ScrollbarLayerImplBase::PushPropertiesTo(layer);
46 }
47
48 int SolidColorScrollbarLayerImpl::ThumbThickness() const {
49   if (thumb_thickness_ != -1)
50     return thumb_thickness_;
51
52   if (orientation() == HORIZONTAL)
53     return bounds().height();
54   else
55     return bounds().width();
56 }
57
58 int SolidColorScrollbarLayerImpl::ThumbLength() const {
59   return std::max(
60       static_cast<int>(visible_to_total_length_ratio() * TrackLength()),
61       ThumbThickness());
62 }
63
64 float SolidColorScrollbarLayerImpl::TrackLength() const {
65   if (orientation() == HORIZONTAL)
66     return bounds().width();
67   else
68     return bounds().height() + vertical_adjust();
69 }
70
71 int SolidColorScrollbarLayerImpl::TrackStart() const {
72   return 0;
73 }
74
75 void SolidColorScrollbarLayerImpl::AppendQuads(QuadSink* quad_sink,
76                            AppendQuadsData* append_quads_data) {
77   gfx::Rect thumb_quad_rect = ComputeThumbQuadRect();
78
79   SharedQuadState* shared_quad_state =
80       quad_sink->UseSharedQuadState(CreateSharedQuadState());
81   AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
82
83   scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
84   quad->SetNew(shared_quad_state, thumb_quad_rect, color_, false);
85   quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
86 }
87
88 }  // namespace cc