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/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   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 
     67 const char* NativeScrollBar::GetClassName() const {
     68   return kViewClassName;
     69 }
     70 
     71 // Overridden from View for keyboard UI.
     72 bool NativeScrollBar::OnKeyPressed(const ui::KeyEvent& event) {
     73   if (!native_wrapper_)
     74     return false;
     75   return native_wrapper_->GetView()->OnKeyPressed(event);
     76 }
     77 
     78 void NativeScrollBar::OnGestureEvent(ui::GestureEvent* event) {
     79   if (!native_wrapper_)
     80     return;
     81   native_wrapper_->GetView()->OnGestureEvent(event);
     82 }
     83 
     84 bool 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:
     92 void 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 
    101 int NativeScrollBar::GetLayoutSize() const {
    102   return IsHorizontal() ?
    103       GetHorizontalScrollBarHeight(GetNativeTheme()) :
    104       GetVerticalScrollBarWidth(GetNativeTheme());
    105 }
    106 
    107 int NativeScrollBar::GetPosition() const {
    108   if (!native_wrapper_)
    109     return 0;
    110   return native_wrapper_->GetPosition();
    111 }
    112 
    113 }  // namespace views
    114 
    115