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 15 namespace ui { 16 class NativeTheme; 17 } 18 19 namespace views { 20 21 class NativeScrollBarWrapper; 22 23 // The NativeScrollBar class is a scrollbar that uses platform's 24 // native control. 25 class 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() 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