1// Copyright (c) 2011 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_RESIZE_AREA_H_
6#define UI_VIEWS_CONTROLS_RESIZE_AREA_H_
7
8#include <string>
9
10#include "ui/views/view.h"
11
12namespace views {
13
14class ResizeAreaDelegate;
15
16////////////////////////////////////////////////////////////////////////////////
17//
18// An invisible area that acts like a horizontal resizer.
19//
20////////////////////////////////////////////////////////////////////////////////
21class VIEWS_EXPORT ResizeArea : public View {
22 public:
23  static const char kViewClassName[];
24
25  explicit ResizeArea(ResizeAreaDelegate* delegate);
26  virtual ~ResizeArea();
27
28  // Overridden from views::View:
29  virtual const char* GetClassName() const OVERRIDE;
30  virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE;
31  virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
32  virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
33  virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
34  virtual void OnMouseCaptureLost() OVERRIDE;
35  virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
36
37 private:
38  // Report the amount the user resized by to the delegate, accounting for
39  // directionality.
40  void ReportResizeAmount(int resize_amount, bool last_update);
41
42  // The delegate to notify when we have updates.
43  ResizeAreaDelegate* delegate_;
44
45  // The mouse position at start (in screen coordinates).
46  int initial_position_;
47
48  DISALLOW_COPY_AND_ASSIGN(ResizeArea);
49};
50
51}  // namespace views
52
53#endif  // UI_VIEWS_CONTROLS_RESIZE_AREA_H_
54