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