Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: ash/mus/frame/move_event_handler.cc

Issue 2099513003: mus: Use the new drag API to implement tab dragging in chrome. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dragging-part-1
Patch Set: Rebase to tot Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ash/mus/frame/move_event_handler.h ('k') | ash/mus/window_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/mus/frame/move_event_handler.h" 5 #include "ash/mus/frame/move_event_handler.h"
6 6
7 #include "ash/mus/bridge/wm_window_mus.h" 7 #include "ash/mus/bridge/wm_window_mus.h"
8 #include "services/ui/public/cpp/window.h" 8 #include "services/ui/public/cpp/window.h"
9 #include "services/ui/public/cpp/window_manager_delegate.h" 9 #include "services/ui/public/cpp/window_manager_delegate.h"
10 #include "services/ui/public/cpp/window_property.h"
10 #include "services/ui/public/interfaces/cursor.mojom.h" 11 #include "services/ui/public/interfaces/cursor.mojom.h"
11 #include "ui/aura/window.h" 12 #include "ui/aura/window.h"
12 #include "ui/base/hit_test.h" 13 #include "ui/base/hit_test.h"
13 #include "ui/events/event.h" 14 #include "ui/events/event.h"
14 15
16 MUS_DECLARE_WINDOW_PROPERTY_TYPE(ash::mus::MoveEventHandler*)
17
18 namespace {
19
20 // Key used for storing identifier sent to clients for windows.
21 MUS_DEFINE_LOCAL_WINDOW_PROPERTY_KEY(ash::mus::MoveEventHandler*,
22 kWmMoveEventHandler,
23 nullptr);
24
25 } // namespace
26
15 namespace ash { 27 namespace ash {
16 namespace mus { 28 namespace mus {
17 namespace { 29 namespace {
18 30
19 ::ui::mojom::Cursor CursorForWindowComponent(int window_component) { 31 ::ui::mojom::Cursor CursorForWindowComponent(int window_component) {
20 switch (window_component) { 32 switch (window_component) {
21 case HTBOTTOM: 33 case HTBOTTOM:
22 return ::ui::mojom::Cursor::SOUTH_RESIZE; 34 return ::ui::mojom::Cursor::SOUTH_RESIZE;
23 case HTBOTTOMLEFT: 35 case HTBOTTOMLEFT:
24 return ::ui::mojom::Cursor::SOUTH_WEST_RESIZE; 36 return ::ui::mojom::Cursor::SOUTH_WEST_RESIZE;
25 case HTBOTTOMRIGHT: 37 case HTBOTTOMRIGHT:
26 return ::ui::mojom::Cursor::SOUTH_EAST_RESIZE; 38 return ::ui::mojom::Cursor::SOUTH_EAST_RESIZE;
27 case HTLEFT: 39 case HTLEFT:
28 return ::ui::mojom::Cursor::WEST_RESIZE; 40 return ::ui::mojom::Cursor::WEST_RESIZE;
29 case HTRIGHT: 41 case HTRIGHT:
30 return ::ui::mojom::Cursor::EAST_RESIZE; 42 return ::ui::mojom::Cursor::EAST_RESIZE;
31 case HTTOP: 43 case HTTOP:
32 return ::ui::mojom::Cursor::NORTH_RESIZE; 44 return ::ui::mojom::Cursor::NORTH_RESIZE;
33 case HTTOPLEFT: 45 case HTTOPLEFT:
34 return ::ui::mojom::Cursor::NORTH_WEST_RESIZE; 46 return ::ui::mojom::Cursor::NORTH_WEST_RESIZE;
35 case HTTOPRIGHT: 47 case HTTOPRIGHT:
36 return ::ui::mojom::Cursor::NORTH_EAST_RESIZE; 48 return ::ui::mojom::Cursor::NORTH_EAST_RESIZE;
37 default: 49 default:
38 return ::ui::mojom::Cursor::CURSOR_NULL; 50 return ::ui::mojom::Cursor::CURSOR_NULL;
39 } 51 }
40 } 52 }
41 53
54 void OnMoveLoopCompleted(const base::Callback<void(bool success)>& end_closure,
55 wm::WmToplevelWindowEventHandler::DragResult result) {
56 end_closure.Run(result ==
57 wm::WmToplevelWindowEventHandler::DragResult::SUCCESS);
58 }
59
42 } // namespace 60 } // namespace
43 61
44 MoveEventHandler::MoveEventHandler( 62 MoveEventHandler::MoveEventHandler(
45 ::ui::Window* mus_window, 63 ::ui::Window* mus_window,
46 ::ui::WindowManagerClient* window_manager_client, 64 ::ui::WindowManagerClient* window_manager_client,
47 aura::Window* aura_window) 65 aura::Window* aura_window)
48 : wm_window_(WmWindowMus::Get(mus_window)), 66 : wm_window_(WmWindowMus::Get(mus_window)),
49 window_manager_client_(window_manager_client), 67 window_manager_client_(window_manager_client),
50 root_window_(aura_window->GetRootWindow()), 68 root_window_(aura_window->GetRootWindow()),
51 toplevel_window_event_handler_(wm_window_->GetShell()) { 69 toplevel_window_event_handler_(wm_window_->GetShell()) {
52 root_window_->AddObserver(this); 70 root_window_->AddObserver(this);
53 root_window_->AddPreTargetHandler(this); 71 root_window_->AddPreTargetHandler(this);
72
73 mus_window->SetLocalProperty(kWmMoveEventHandler, this);
54 } 74 }
55 75
56 MoveEventHandler::~MoveEventHandler() { 76 MoveEventHandler::~MoveEventHandler() {
57 Detach(); 77 Detach();
58 } 78 }
59 79
80 // static
81 MoveEventHandler* MoveEventHandler::GetForWindow(WmWindow* wm_window) {
82 return WmWindowMus::GetMusWindow(wm_window)->GetLocalProperty(
83 kWmMoveEventHandler);
84 }
85
86 void MoveEventHandler::AttemptToStartDrag(
87 const gfx::Point& point_in_parent,
88 int window_component,
89 aura::client::WindowMoveSource source,
90 const base::Callback<void(bool success)>& end_closure) {
91 toplevel_window_event_handler_.AttemptToStartDrag(
92 wm_window_, point_in_parent, window_component, source,
93 base::Bind(&OnMoveLoopCompleted, end_closure));
94 }
95
96 bool MoveEventHandler::IsDragInProgress() {
97 return toplevel_window_event_handler_.is_drag_in_progress();
98 }
99
100 void MoveEventHandler::RevertDrag() {
101 toplevel_window_event_handler_.RevertDrag();
102 }
103
60 void MoveEventHandler::Detach() { 104 void MoveEventHandler::Detach() {
61 if (!root_window_) 105 if (!root_window_)
62 return; 106 return;
63 107
64 root_window_->RemoveObserver(this); 108 root_window_->RemoveObserver(this);
65 root_window_->RemovePreTargetHandler(this); 109 root_window_->RemovePreTargetHandler(this);
66 root_window_ = nullptr; 110 root_window_ = nullptr;
67 } 111 }
68 112
69 void MoveEventHandler::OnMouseEvent(ui::MouseEvent* event) { 113 void MoveEventHandler::OnMouseEvent(ui::MouseEvent* event) {
(...skipping 16 matching lines...) Expand all
86 toplevel_window_event_handler_.RevertDrag(); 130 toplevel_window_event_handler_.RevertDrag();
87 } 131 }
88 132
89 void MoveEventHandler::OnWindowDestroying(aura::Window* window) { 133 void MoveEventHandler::OnWindowDestroying(aura::Window* window) {
90 DCHECK_EQ(root_window_, window); 134 DCHECK_EQ(root_window_, window);
91 Detach(); 135 Detach();
92 } 136 }
93 137
94 } // namespace mus 138 } // namespace mus
95 } // namespace ash 139 } // namespace ash
OLDNEW
« no previous file with comments | « ash/mus/frame/move_event_handler.h ('k') | ash/mus/window_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698