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

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

Issue 2227643003: Converts mash to use the common non-client frame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@native_widget_mus_fix
Patch Set: feedback Created 4 years, 4 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/frame/non_client_frame_view_mash.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ash/mus/frame/move_event_handler.h"
6
7 #include "ash/mus/bridge/wm_window_mus.h"
8 #include "services/ui/public/cpp/window.h"
9 #include "services/ui/public/cpp/window_manager_delegate.h"
10 #include "services/ui/public/cpp/window_property.h"
11 #include "services/ui/public/interfaces/cursor.mojom.h"
12 #include "ui/aura/window.h"
13 #include "ui/base/hit_test.h"
14 #include "ui/events/event.h"
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
27 namespace ash {
28 namespace mus {
29 namespace {
30
31 ui::mojom::Cursor CursorForWindowComponent(int window_component) {
32 switch (window_component) {
33 case HTBOTTOM:
34 return ui::mojom::Cursor::SOUTH_RESIZE;
35 case HTBOTTOMLEFT:
36 return ui::mojom::Cursor::SOUTH_WEST_RESIZE;
37 case HTBOTTOMRIGHT:
38 return ui::mojom::Cursor::SOUTH_EAST_RESIZE;
39 case HTLEFT:
40 return ui::mojom::Cursor::WEST_RESIZE;
41 case HTRIGHT:
42 return ui::mojom::Cursor::EAST_RESIZE;
43 case HTTOP:
44 return ui::mojom::Cursor::NORTH_RESIZE;
45 case HTTOPLEFT:
46 return ui::mojom::Cursor::NORTH_WEST_RESIZE;
47 case HTTOPRIGHT:
48 return ui::mojom::Cursor::NORTH_EAST_RESIZE;
49 default:
50 return ui::mojom::Cursor::CURSOR_NULL;
51 }
52 }
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
60 } // namespace
61
62 MoveEventHandler::MoveEventHandler(
63 ui::Window* mus_window,
64 ui::WindowManagerClient* window_manager_client,
65 aura::Window* aura_window)
66 : wm_window_(WmWindowMus::Get(mus_window)),
67 window_manager_client_(window_manager_client),
68 root_window_(aura_window->GetRootWindow()),
69 toplevel_window_event_handler_(wm_window_->GetShell()) {
70 root_window_->AddObserver(this);
71 root_window_->AddPreTargetHandler(this);
72
73 mus_window->SetLocalProperty(kWmMoveEventHandler, this);
74 }
75
76 MoveEventHandler::~MoveEventHandler() {
77 Detach();
78 }
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
104 void MoveEventHandler::Detach() {
105 if (!root_window_)
106 return;
107
108 root_window_->RemoveObserver(this);
109 root_window_->RemovePreTargetHandler(this);
110 root_window_ = nullptr;
111 }
112
113 void MoveEventHandler::OnMouseEvent(ui::MouseEvent* event) {
114 toplevel_window_event_handler_.OnMouseEvent(event, wm_window_);
115 if (!toplevel_window_event_handler_.is_drag_in_progress() &&
116 (event->type() == ui::ET_POINTER_MOVED ||
117 event->type() == ui::ET_MOUSE_MOVED)) {
118 const int hit_test_location =
119 wm_window_->GetNonClientComponent(event->location());
120 window_manager_client_->SetNonClientCursor(
121 wm_window_->mus_window(), CursorForWindowComponent(hit_test_location));
122 }
123 }
124
125 void MoveEventHandler::OnGestureEvent(ui::GestureEvent* event) {
126 toplevel_window_event_handler_.OnGestureEvent(event, wm_window_);
127 }
128
129 void MoveEventHandler::OnCancelMode(ui::CancelModeEvent* event) {
130 toplevel_window_event_handler_.RevertDrag();
131 }
132
133 void MoveEventHandler::OnWindowDestroying(aura::Window* window) {
134 DCHECK_EQ(root_window_, window);
135 Detach();
136 }
137
138 } // namespace mus
139 } // namespace ash
OLDNEW
« no previous file with comments | « ash/mus/frame/move_event_handler.h ('k') | ash/mus/frame/non_client_frame_view_mash.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698