Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / ui / views / controls / scrollbar / native_scroll_bar.cc
1 // Copyright (c) 2012 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 "ui/views/controls/scrollbar/native_scroll_bar.h"
6
7 #include <algorithm>
8 #include <string>
9
10 #include "base/message_loop/message_loop.h"
11 #include "ui/events/event.h"
12 #include "ui/views/controls/scrollbar/native_scroll_bar_views.h"
13 #include "ui/views/controls/scrollbar/native_scroll_bar_wrapper.h"
14 #include "ui/views/widget/widget.h"
15
16 namespace views {
17
18 // static
19 const char NativeScrollBar::kViewClassName[] = "NativeScrollBar";
20
21 ////////////////////////////////////////////////////////////////////////////////
22 // NativeScrollBar, public:
23 NativeScrollBar::NativeScrollBar(bool is_horizontal)
24     : ScrollBar(is_horizontal),
25       native_wrapper_(NULL) {
26 }
27
28 NativeScrollBar::~NativeScrollBar() {
29 }
30
31 // static
32 int NativeScrollBar::GetHorizontalScrollBarHeight(
33     const ui::NativeTheme* theme) {
34   return NativeScrollBarWrapper::GetHorizontalScrollBarHeight(theme);
35 }
36
37 // static
38 int NativeScrollBar::GetVerticalScrollBarWidth(
39     const ui::NativeTheme* theme) {
40   return NativeScrollBarWrapper::GetVerticalScrollBarWidth(theme);
41 }
42
43 ////////////////////////////////////////////////////////////////////////////////
44 // NativeScrollBar, View overrides:
45 gfx::Size NativeScrollBar::GetPreferredSize() const {
46   if (native_wrapper_)
47     return native_wrapper_->GetView()->GetPreferredSize();
48   return gfx::Size();
49 }
50
51 void NativeScrollBar::Layout() {
52   if (native_wrapper_) {
53     native_wrapper_->GetView()->SetBounds(0, 0, width(), height());
54     native_wrapper_->GetView()->Layout();
55   }
56 }
57
58 void NativeScrollBar::ViewHierarchyChanged(
59     const ViewHierarchyChangedDetails& details) {
60   if (details.is_add && !native_wrapper_ && GetWidget()) {
61     native_wrapper_ = NativeScrollBarWrapper::CreateWrapper(this);
62     AddChildView(native_wrapper_->GetView());
63   }
64 }
65
66 const char* NativeScrollBar::GetClassName() const {
67   return kViewClassName;
68 }
69
70 // Overridden from View for keyboard UI.
71 bool NativeScrollBar::OnKeyPressed(const ui::KeyEvent& event) {
72   if (!native_wrapper_)
73     return false;
74   return native_wrapper_->GetView()->OnKeyPressed(event);
75 }
76
77 void NativeScrollBar::OnGestureEvent(ui::GestureEvent* event) {
78   if (!native_wrapper_)
79     return;
80   native_wrapper_->GetView()->OnGestureEvent(event);
81 }
82
83 bool NativeScrollBar::OnMouseWheel(const ui::MouseWheelEvent& event) {
84   if (!native_wrapper_)
85     return false;
86   return native_wrapper_->GetView()->OnMouseWheel(event);
87 }
88
89 ////////////////////////////////////////////////////////////////////////////////
90 // NativeScrollBar, ScrollBar overrides:
91 void NativeScrollBar::Update(int viewport_size,
92                              int content_size,
93                              int current_pos) {
94   ScrollBar::Update(viewport_size, content_size, current_pos);
95
96   if (native_wrapper_)
97     native_wrapper_->Update(viewport_size, content_size, current_pos);
98 }
99
100 int NativeScrollBar::GetLayoutSize() const {
101   return IsHorizontal() ?
102       GetHorizontalScrollBarHeight(GetNativeTheme()) :
103       GetVerticalScrollBarWidth(GetNativeTheme());
104 }
105
106 int NativeScrollBar::GetPosition() const {
107   if (!native_wrapper_)
108     return 0;
109   return native_wrapper_->GetPosition();
110 }
111
112 }  // namespace views
113