1a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Use of this source code is governed by a BSD-style license that can be
3a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// found in the LICENSE file.
4a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
5a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#ifndef UI_AURA_CLIENT_WINDOW_MOVE_CLIENT_H_
6a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#define UI_AURA_CLIENT_WINDOW_MOVE_CLIENT_H_
7a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
8a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include "ui/aura/aura_export.h"
9a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include "ui/gfx/vector2d.h"
10a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
11a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgnamespace gfx {
12a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass Point;
13a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}
14a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
15a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgnamespace aura {
16a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass Window;
17a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgnamespace client {
18a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
19a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgenum WindowMoveResult {
20a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  MOVE_SUCCESSFUL,  // Moving window was successful.
21a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  MOVE_CANCELED    // Moving window was canceled.
22a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org};
23a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
24a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgenum WindowMoveSource {
25a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  WINDOW_MOVE_SOURCE_MOUSE,
26a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  WINDOW_MOVE_SOURCE_TOUCH,
27a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org};
28a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
29a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// An interface implemented by an object that manages programatically keyed
30a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// window moving.
31a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass AURA_EXPORT WindowMoveClient {
32a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public:
33a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  // Starts a nested message loop for moving the window. |drag_offset| is the
34a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  // offset from the window origin to the cursor when the drag was started.
35a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  // Returns MOVE_SUCCESSFUL if the move has completed successfully, or
36a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  // MOVE_CANCELED otherwise.
37a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  virtual WindowMoveResult RunMoveLoop(Window* window,
38a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                       const gfx::Vector2d& drag_offset,
39a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                       WindowMoveSource source) = 0;
40a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
41a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  // Ends a previously started move loop.
42a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  virtual void EndMoveLoop() = 0;
43a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
44a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org protected:
45a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  virtual ~WindowMoveClient() {}
46a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org};
47a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
48a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Sets/Gets the activation client for the specified window.
49a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgAURA_EXPORT void SetWindowMoveClient(Window* window,
50a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                     WindowMoveClient* client);
51a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgAURA_EXPORT WindowMoveClient* GetWindowMoveClient(Window* window);
52a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
53a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}  // namespace client
54a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org}  // namespace aura
55a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
56a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#endif  // UI_AURA_CLIENT_WINDOW_MOVE_CLIENT_H_
57a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org