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.
5 #include "ui/views/controls/scrollbar/native_scroll_bar.h"
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"
19 const char NativeScrollBar::kViewClassName
[] = "NativeScrollBar";
21 ////////////////////////////////////////////////////////////////////////////////
22 // NativeScrollBar, public:
23 NativeScrollBar::NativeScrollBar(bool is_horizontal
)
24 : ScrollBar(is_horizontal
),
25 native_wrapper_(NULL
) {
28 NativeScrollBar::~NativeScrollBar() {
32 int NativeScrollBar::GetHorizontalScrollBarHeight(
33 const ui::NativeTheme
* theme
) {
34 return NativeScrollBarWrapper::GetHorizontalScrollBarHeight(theme
);
38 int NativeScrollBar::GetVerticalScrollBarWidth(
39 const ui::NativeTheme
* theme
) {
40 return NativeScrollBarWrapper::GetVerticalScrollBarWidth(theme
);
43 ////////////////////////////////////////////////////////////////////////////////
44 // NativeScrollBar, View overrides:
45 gfx::Size
NativeScrollBar::GetPreferredSize() const {
47 return native_wrapper_
->GetView()->GetPreferredSize();
51 void NativeScrollBar::Layout() {
52 if (native_wrapper_
) {
53 native_wrapper_
->GetView()->SetBounds(0, 0, width(), height());
54 native_wrapper_
->GetView()->Layout();
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());
66 const char* NativeScrollBar::GetClassName() const {
67 return kViewClassName
;
70 // Overridden from View for keyboard UI.
71 bool NativeScrollBar::OnKeyPressed(const ui::KeyEvent
& event
) {
74 return native_wrapper_
->GetView()->OnKeyPressed(event
);
77 void NativeScrollBar::OnGestureEvent(ui::GestureEvent
* event
) {
80 native_wrapper_
->GetView()->OnGestureEvent(event
);
83 bool NativeScrollBar::OnMouseWheel(const ui::MouseWheelEvent
& event
) {
86 return native_wrapper_
->GetView()->OnMouseWheel(event
);
89 ////////////////////////////////////////////////////////////////////////////////
90 // NativeScrollBar, ScrollBar overrides:
91 void NativeScrollBar::Update(int viewport_size
,
94 ScrollBar::Update(viewport_size
, content_size
, current_pos
);
97 native_wrapper_
->Update(viewport_size
, content_size
, current_pos
);
100 int NativeScrollBar::GetLayoutSize() const {
101 return IsHorizontal() ?
102 GetHorizontalScrollBarHeight(GetNativeTheme()) :
103 GetVerticalScrollBarWidth(GetNativeTheme());
106 int NativeScrollBar::GetPosition() const {
107 if (!native_wrapper_
)
109 return native_wrapper_
->GetPosition();