OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "mash/simple_wm/move_loop.h" | 5 #include "mash/simple_wm/move_loop.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "ui/aura/client/aura_constants.h" | 9 #include "ui/aura/client/aura_constants.h" |
10 #include "ui/aura/window.h" | 10 #include "ui/aura/window.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 VerticalLocation v_loc; | 45 VerticalLocation v_loc; |
46 if (!DetermineType(ht_location, &type, &h_loc, &v_loc)) | 46 if (!DetermineType(ht_location, &type, &h_loc, &v_loc)) |
47 return nullptr; | 47 return nullptr; |
48 | 48 |
49 return base::WrapUnique(new MoveLoop(target, event, type, h_loc, v_loc)); | 49 return base::WrapUnique(new MoveLoop(target, event, type, h_loc, v_loc)); |
50 } | 50 } |
51 | 51 |
52 MoveLoop::MoveResult MoveLoop::Move(const ui::PointerEvent& event) { | 52 MoveLoop::MoveResult MoveLoop::Move(const ui::PointerEvent& event) { |
53 switch (event.type()) { | 53 switch (event.type()) { |
54 case ui::ET_POINTER_CANCELLED: | 54 case ui::ET_POINTER_CANCELLED: |
55 if (event.pointer_id() == pointer_id_) { | 55 if (event.pointer_details().id == pointer_id_) { |
56 if (target_) | 56 if (target_) |
57 Revert(); | 57 Revert(); |
58 return MoveResult::DONE; | 58 return MoveResult::DONE; |
59 } | 59 } |
60 return MoveResult::CONTINUE; | 60 return MoveResult::CONTINUE; |
61 | 61 |
62 case ui::ET_POINTER_MOVED: | 62 case ui::ET_POINTER_MOVED: |
63 if (target_ && event.pointer_id() == pointer_id_) | 63 if (target_ && event.pointer_details().id == pointer_id_) |
64 MoveImpl(event); | 64 MoveImpl(event); |
65 return MoveResult::CONTINUE; | 65 return MoveResult::CONTINUE; |
66 | 66 |
67 case ui::ET_POINTER_UP: | 67 case ui::ET_POINTER_UP: |
68 if (event.pointer_id() == pointer_id_) { | 68 if (event.pointer_details().id == pointer_id_) { |
69 // TODO(sky): need to support changed_flags. | 69 // TODO(sky): need to support changed_flags. |
70 if (target_) | 70 if (target_) |
71 MoveImpl(event); | 71 MoveImpl(event); |
72 return MoveResult::DONE; | 72 return MoveResult::DONE; |
73 } | 73 } |
74 return MoveResult::CONTINUE; | 74 return MoveResult::CONTINUE; |
75 | 75 |
76 default: | 76 default: |
77 break; | 77 break; |
78 } | 78 } |
79 return MoveResult::CONTINUE; | 79 return MoveResult::CONTINUE; |
80 } | 80 } |
81 | 81 |
82 void MoveLoop::Revert() { | 82 void MoveLoop::Revert() { |
83 if (!target_) | 83 if (!target_) |
84 return; | 84 return; |
85 | 85 |
86 base::AutoReset<bool> resetter(&changing_bounds_, true); | 86 base::AutoReset<bool> resetter(&changing_bounds_, true); |
87 target_->SetBounds(initial_window_bounds_); | 87 target_->SetBounds(initial_window_bounds_); |
88 //SetWindowUserSetBounds(target_, initial_user_set_bounds_); | |
89 } | 88 } |
90 | 89 |
91 MoveLoop::MoveLoop(aura::Window* target, | 90 MoveLoop::MoveLoop(aura::Window* target, |
92 const ui::PointerEvent& event, | 91 const ui::PointerEvent& event, |
93 Type type, | 92 Type type, |
94 HorizontalLocation h_loc, | 93 HorizontalLocation h_loc, |
95 VerticalLocation v_loc) | 94 VerticalLocation v_loc) |
96 : target_(target), | 95 : target_(target), |
97 type_(type), | 96 type_(type), |
98 h_loc_(h_loc), | 97 h_loc_(h_loc), |
99 v_loc_(v_loc), | 98 v_loc_(v_loc), |
100 pointer_id_(event.pointer_id()), | 99 pointer_id_(event.pointer_details().id), |
101 initial_event_screen_location_(event.root_location()), | 100 initial_event_screen_location_(event.root_location()), |
102 initial_window_bounds_(target->bounds()), | 101 initial_window_bounds_(target->bounds()), |
103 initial_user_set_bounds_(target->bounds()), | 102 initial_user_set_bounds_(target->bounds()), |
104 // GetWindowUserSetBounds(target)), | |
105 changing_bounds_(false) { | 103 changing_bounds_(false) { |
106 target->AddObserver(this); | 104 target->AddObserver(this); |
107 } | 105 } |
108 | 106 |
109 // static | 107 // static |
110 bool MoveLoop::DetermineType(int ht_location, | 108 bool MoveLoop::DetermineType(int ht_location, |
111 Type* type, | 109 Type* type, |
112 HorizontalLocation* h_loc, | 110 HorizontalLocation* h_loc, |
113 VerticalLocation* v_loc) { | 111 VerticalLocation* v_loc) { |
114 *h_loc = HorizontalLocation::OTHER; | 112 *h_loc = HorizontalLocation::OTHER; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 // need to take some action to recenter the window relative to | 172 // need to take some action to recenter the window relative to |
175 // the pointer position within the titlebar. | 173 // the pointer position within the titlebar. |
176 initial_window_bounds_.set_width(restored_bounds.width()); | 174 initial_window_bounds_.set_width(restored_bounds.width()); |
177 initial_window_bounds_.set_height(restored_bounds.height()); | 175 initial_window_bounds_.set_height(restored_bounds.height()); |
178 } | 176 } |
179 const gfx::Vector2d delta = | 177 const gfx::Vector2d delta = |
180 event.root_location() - initial_event_screen_location_; | 178 event.root_location() - initial_event_screen_location_; |
181 const gfx::Rect new_bounds(DetermineBoundsFromDelta(delta)); | 179 const gfx::Rect new_bounds(DetermineBoundsFromDelta(delta)); |
182 base::AutoReset<bool> resetter(&changing_bounds_, true); | 180 base::AutoReset<bool> resetter(&changing_bounds_, true); |
183 target_->SetBounds(new_bounds); | 181 target_->SetBounds(new_bounds); |
184 //SetWindowUserSetBounds(target_, new_bounds); | |
185 } | 182 } |
186 | 183 |
187 void MoveLoop::Cancel() { | 184 void MoveLoop::Cancel() { |
188 target_->RemoveObserver(this); | 185 target_->RemoveObserver(this); |
189 target_ = nullptr; | 186 target_ = nullptr; |
190 } | 187 } |
191 | 188 |
192 gfx::Rect MoveLoop::DetermineBoundsFromDelta(const gfx::Vector2d& delta) { | 189 gfx::Rect MoveLoop::DetermineBoundsFromDelta(const gfx::Vector2d& delta) { |
193 if (type_ == Type::MOVE) { | 190 if (type_ == Type::MOVE) { |
194 return gfx::Rect(initial_window_bounds_.origin() + delta, | 191 return gfx::Rect(initial_window_bounds_.origin() + delta, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 if (!changing_bounds_) | 228 if (!changing_bounds_) |
232 Cancel(); | 229 Cancel(); |
233 } | 230 } |
234 | 231 |
235 void MoveLoop::OnWindowVisibilityChanged(aura::Window* window, bool visible) { | 232 void MoveLoop::OnWindowVisibilityChanged(aura::Window* window, bool visible) { |
236 DCHECK_EQ(window, target_); | 233 DCHECK_EQ(window, target_); |
237 Cancel(); | 234 Cancel(); |
238 } | 235 } |
239 | 236 |
240 } // namespace simple_wm | 237 } // namespace simple_wm |
OLD | NEW |