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
) {
61 if (details
.is_add
&& !native_wrapper_
&& (widget
= GetWidget())) {
62 native_wrapper_
= NativeScrollBarWrapper::CreateWrapper(this);
63 AddChildView(native_wrapper_
->GetView());
67 const char* NativeScrollBar::GetClassName() const {
68 return kViewClassName
;
71 // Overridden from View for keyboard UI.
72 bool NativeScrollBar::OnKeyPressed(const ui::KeyEvent
& event
) {
75 return native_wrapper_
->GetView()->OnKeyPressed(event
);
78 void NativeScrollBar::OnGestureEvent(ui::GestureEvent
* event
) {
81 native_wrapper_
->GetView()->OnGestureEvent(event
);
84 bool NativeScrollBar::OnMouseWheel(const ui::MouseWheelEvent
& event
) {
87 return native_wrapper_
->GetView()->OnMouseWheel(event
);
90 ////////////////////////////////////////////////////////////////////////////////
91 // NativeScrollBar, ScrollBar overrides:
92 void NativeScrollBar::Update(int viewport_size
,
95 ScrollBar::Update(viewport_size
, content_size
, current_pos
);
98 native_wrapper_
->Update(viewport_size
, content_size
, current_pos
);
101 int NativeScrollBar::GetLayoutSize() const {
102 return IsHorizontal() ?
103 GetHorizontalScrollBarHeight(GetNativeTheme()) :
104 GetVerticalScrollBarWidth(GetNativeTheme());
107 int NativeScrollBar::GetPosition() const {
108 if (!native_wrapper_
)
110 return native_wrapper_
->GetPosition();