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 ASH_DISPLAY_SHARED_DISPLAY_EDGE_INDICATOR_H_
6#define ASH_DISPLAY_SHARED_DISPLAY_EDGE_INDICATOR_H_
7
8#include "ash/ash_export.h"
9#include "base/basictypes.h"
10#include "base/memory/scoped_ptr.h"
11#include "ui/gfx/animation/animation_delegate.h"
12#include "ui/gfx/display.h"
13
14namespace gfx {
15class Rect;
16class ThrobAnimation;
17}
18
19namespace views {
20class View;
21class Widget;
22}
23
24namespace ash {
25
26// SharedDisplayEdgeIndicator is responsible for showing a window that indicates
27// the edge that a window can be dragged into another display.
28class ASH_EXPORT SharedDisplayEdgeIndicator : public gfx::AnimationDelegate {
29 public:
30  SharedDisplayEdgeIndicator();
31  virtual ~SharedDisplayEdgeIndicator();
32
33  // Shows/Hides the indicator window. The |src_bounds| is for the window on
34  // the source display, and the |dst_bounds| is for the window on the other
35  // display.
36  void Show(const gfx::Rect& src_bounds, const gfx::Rect& dst_bounds);
37  void Hide();
38
39  // gfx::AnimationDelegate overrides:
40  virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
41
42 private:
43  // Used to show the displays' shared edge where a window can be moved across.
44  // |src_widget_| is for the display where drag starts and |dst_widget_| is
45  // for the other display.
46  views::View* src_indicator_;
47  views::View* dst_indicator_;
48
49  // Used to transition the opacity.
50  scoped_ptr<gfx::ThrobAnimation> animation_;
51
52  DISALLOW_COPY_AND_ASSIGN(SharedDisplayEdgeIndicator);
53};
54
55}  // namespace ash
56
57#endif  // ASH_DISPLAY_SHARED_DISPLAY_EDGE_INDICATOR_H_
58