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