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   if (details.is_add && !native_wrapper_ && GetWidget()) {
     61     native_wrapper_ = NativeScrollBarWrapper::CreateWrapper(this);
     62     AddChildView(native_wrapper_->GetView());
     63   }
     64 }
     65 
     66 const char* NativeScrollBar::GetClassName() const {
     67   return kViewClassName;
     68 }
     69 
     70 // Overridden from View for keyboard UI.
     71 bool NativeScrollBar::OnKeyPressed(const ui::KeyEvent& event) {
     72   if (!native_wrapper_)
     73     return false;
     74   return native_wrapper_->GetView()->OnKeyPressed(event);
     75 }
     76 
     77 void NativeScrollBar::OnGestureEvent(ui::GestureEvent* event) {
     78   if (!native_wrapper_)
     79     return;
     80   native_wrapper_->GetView()->OnGestureEvent(event);
     81 }
     82 
     83 bool NativeScrollBar::OnMouseWheel(const ui::MouseWheelEvent& event) {
     84   if (!native_wrapper_)
     85     return false;
     86   return native_wrapper_->GetView()->OnMouseWheel(event);
     87 }
     88 
     89 ////////////////////////////////////////////////////////////////////////////////
     90 // NativeScrollBar, ScrollBar overrides:
     91 void NativeScrollBar::Update(int viewport_size,
     92                              int content_size,
     93                              int current_pos) {
     94   ScrollBar::Update(viewport_size, content_size, current_pos);
     95 
     96   if (native_wrapper_)
     97     native_wrapper_->Update(viewport_size, content_size, current_pos);
     98 }
     99 
    100 int NativeScrollBar::GetLayoutSize() const {
    101   return IsHorizontal() ?
    102       GetHorizontalScrollBarHeight(GetNativeTheme()) :
    103       GetVerticalScrollBarWidth(GetNativeTheme());
    104 }
    105 
    106 int NativeScrollBar::GetPosition() const {
    107   if (!native_wrapper_)
    108     return 0;
    109   return native_wrapper_->GetPosition();
    110 }
    111 
    112 }  // namespace views
    113 
    114