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#ifndef UI_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLL_BAR_H_ 6#define UI_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLL_BAR_H_ 7 8#include <string> 9 10#include "base/compiler_specific.h" 11#include "base/gtest_prod_util.h" 12#include "ui/views/controls/scrollbar/scroll_bar.h" 13#include "ui/views/view.h" 14 15namespace ui { 16class NativeTheme; 17} 18 19namespace views { 20 21class NativeScrollBarWrapper; 22 23// The NativeScrollBar class is a scrollbar that uses platform's 24// native control. 25class VIEWS_EXPORT NativeScrollBar : public ScrollBar { 26 public: 27 // The scroll-bar's class name. 28 static const char kViewClassName[]; 29 30 // Create new scrollbar, either horizontal or vertical. 31 explicit NativeScrollBar(bool is_horiz); 32 virtual ~NativeScrollBar(); 33 34 // Return the system sizes. 35 static int GetHorizontalScrollBarHeight(const ui::NativeTheme* theme); 36 static int GetVerticalScrollBarWidth(const ui::NativeTheme* theme); 37 38 private: 39 friend class NativeScrollBarTest; 40 FRIEND_TEST_ALL_PREFIXES(NativeScrollBarTest, Scrolling); 41 42 // Overridden from View. 43 virtual gfx::Size GetPreferredSize() const OVERRIDE; 44 virtual void Layout() OVERRIDE; 45 virtual void ViewHierarchyChanged( 46 const ViewHierarchyChangedDetails& details) OVERRIDE; 47 virtual const char* GetClassName() const OVERRIDE; 48 49 // Overrideen from View for keyboard UI purpose. 50 virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; 51 virtual bool OnMouseWheel(const ui::MouseWheelEvent& e) OVERRIDE; 52 53 // Overridden from ui::EventHandler. 54 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 55 56 // Overridden from ScrollBar. 57 virtual void Update(int viewport_size, 58 int content_size, 59 int current_pos) OVERRIDE; 60 virtual int GetPosition() const OVERRIDE; 61 virtual int GetLayoutSize() const OVERRIDE; 62 63 // init border 64 NativeScrollBarWrapper* native_wrapper_; 65 66 DISALLOW_COPY_AND_ASSIGN(NativeScrollBar); 67}; 68 69} // namespace views 70 71#endif // UI_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLL_BAR_H_ 72