// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLL_BAR_H_
#define UI_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLL_BAR_H_

#include <string>

#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "ui/views/controls/scrollbar/scroll_bar.h"
#include "ui/views/view.h"

namespace ui {
class NativeTheme;
}

namespace views {

class NativeScrollBarWrapper;

// The NativeScrollBar class is a scrollbar that uses platform's
// native control.
class VIEWS_EXPORT NativeScrollBar : public ScrollBar {
 public:
  // The scroll-bar's class name.
  static const char kViewClassName[];

  // Create new scrollbar, either horizontal or vertical.
  explicit NativeScrollBar(bool is_horiz);
  virtual ~NativeScrollBar();

  // Return the system sizes.
  static int GetHorizontalScrollBarHeight(const ui::NativeTheme* theme);
  static int GetVerticalScrollBarWidth(const ui::NativeTheme* theme);

 private:
  friend class NativeScrollBarTest;
  FRIEND_TEST_ALL_PREFIXES(NativeScrollBarTest, Scrolling);

  // Overridden from View.
  virtual gfx::Size GetPreferredSize() const override;
  virtual void Layout() override;
  virtual void ViewHierarchyChanged(
      const ViewHierarchyChangedDetails& details) override;
  virtual const char* GetClassName() const override;

  // Overrideen from View for keyboard UI purpose.
  virtual bool OnKeyPressed(const ui::KeyEvent& event) override;
  virtual bool OnMouseWheel(const ui::MouseWheelEvent& e) override;

  // Overridden from ui::EventHandler.
  virtual void OnGestureEvent(ui::GestureEvent* event) override;

  // Overridden from ScrollBar.
  virtual void Update(int viewport_size,
                      int content_size,
                      int current_pos) override;
  virtual int GetPosition() const override;
  virtual int GetLayoutSize() const override;

  // init border
  NativeScrollBarWrapper* native_wrapper_;

  DISALLOW_COPY_AND_ASSIGN(NativeScrollBar);
};

}  // namespace views

#endif  // UI_VIEWS_CONTROLS_SCROLLBAR_NATIVE_SCROLL_BAR_H_
