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_SLIDE_OUT_VIEW_H_
6#define UI_VIEWS_CONTROLS_SLIDE_OUT_VIEW_H_
7
8#include "ui/compositor/layer_animation_observer.h"
9#include "ui/views/view.h"
10#include "ui/views/views_export.h"
11
12namespace views {
13
14// A View that can be closed by a slide-out touch gesture.
15class VIEWS_EXPORT SlideOutView : public views::View,
16                                  public ui::ImplicitAnimationObserver {
17 public:
18  SlideOutView();
19  virtual ~SlideOutView();
20
21 protected:
22  // Called when user intends to close the View by sliding it out.
23  virtual void OnSlideOut() = 0;
24
25  // Overridden from views::View.
26  virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
27
28 private:
29  enum SlideDirection {
30    SLIDE_LEFT,
31    SLIDE_RIGHT,
32  };
33
34  // Restores the transform and opacity of the view.
35  void RestoreVisualState();
36
37  // Slides the view out and closes it after the animation.
38  void SlideOutAndClose(SlideDirection direction);
39
40  // Overridden from ImplicitAnimationObserver.
41  virtual void OnImplicitAnimationsCompleted() OVERRIDE;
42
43  float gesture_scroll_amount_;
44
45  DISALLOW_COPY_AND_ASSIGN(SlideOutView);
46};
47
48}  // namespace views
49
50#endif  // UI_VIEWS_CONTROLS_SLIDE_OUT_VIEW_H_
51