| // 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 ASH_DISPLAY_SHARED_DISPLAY_EDGE_INDICATOR_H_ |
| #define ASH_DISPLAY_SHARED_DISPLAY_EDGE_INDICATOR_H_ |
| |
| #include <memory> |
| |
| #include "ash/ash_export.h" |
| #include "base/macros.h" |
| #include "ui/gfx/animation/animation_delegate.h" |
| |
| namespace gfx { |
| class Rect; |
| class ThrobAnimation; |
| } |
| |
| namespace views { |
| class View; |
| class Widget; |
| } |
| |
| namespace ash { |
| |
| // SharedDisplayEdgeIndicator is responsible for showing a window that indicates |
| // the edge that a window can be dragged into another display. |
| class ASH_EXPORT SharedDisplayEdgeIndicator : public gfx::AnimationDelegate { |
| public: |
| SharedDisplayEdgeIndicator(); |
| ~SharedDisplayEdgeIndicator() override; |
| |
| // Shows/Hides the indicator window. The |src_bounds| is for the window on |
| // the source display, and the |dst_bounds| is for the window on the other |
| // display. |
| void Show(const gfx::Rect& src_bounds, const gfx::Rect& dst_bounds); |
| void Hide(); |
| |
| // gfx::AnimationDelegate overrides: |
| void AnimationProgressed(const gfx::Animation* animation) override; |
| |
| private: |
| // Used to show the displays' shared edge where a window can be moved across. |
| // |src_widget_| is for the display where drag starts and |dst_widget_| is |
| // for the other display. |
| views::View* src_indicator_; |
| views::View* dst_indicator_; |
| |
| // Used to transition the opacity. |
| std::unique_ptr<gfx::ThrobAnimation> animation_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SharedDisplayEdgeIndicator); |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_DISPLAY_SHARED_DISPLAY_EDGE_INDICATOR_H_ |