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

Side by Side Diff: mash/wm/bridge/wm_window_mus.cc

Issue 2029883002: Moves mash/wm into ash/mus (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_static_assert
Patch Set: move comment Created 4 years, 6 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 | « mash/wm/bridge/wm_window_mus.h ('k') | mash/wm/container_ids.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 2016 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 "mash/wm/bridge/wm_window_mus.h"
6
7 #include "ash/common/wm/container_finder.h"
8 #include "ash/common/wm/window_state.h"
9 #include "ash/common/wm/wm_layout_manager.h"
10 #include "ash/common/wm/wm_window_observer.h"
11 #include "ash/common/wm/wm_window_property.h"
12 #include "components/mus/public/cpp/property_type_converters.h"
13 #include "components/mus/public/cpp/window.h"
14 #include "components/mus/public/cpp/window_property.h"
15 #include "components/mus/public/cpp/window_tree_client.h"
16 #include "components/mus/public/interfaces/window_manager.mojom.h"
17 #include "mash/wm/bridge/mus_layout_manager_adapter.h"
18 #include "mash/wm/bridge/wm_globals_mus.h"
19 #include "mash/wm/bridge/wm_root_window_controller_mus.h"
20 #include "mash/wm/property_util.h"
21 #include "ui/aura/mus/mus_util.h"
22 #include "ui/base/hit_test.h"
23 #include "ui/display/display.h"
24 #include "ui/views/widget/widget.h"
25 #include "ui/views/widget/widget_delegate.h"
26
27 MUS_DECLARE_WINDOW_PROPERTY_TYPE(mash::wm::WmWindowMus*);
28
29 // TODO(sky): fully implement this. Making DVLOG as too spammy to be useful.
30 #undef NOTIMPLEMENTED
31 #define NOTIMPLEMENTED() DVLOG(1) << "notimplemented"
32
33 namespace mash {
34 namespace wm {
35
36 MUS_DEFINE_OWNED_WINDOW_PROPERTY_KEY(mash::wm::WmWindowMus,
37 kWmWindowKey,
38 nullptr);
39 namespace {
40
41 // This classes is used so that the WindowState constructor can be made
42 // protected. GetWindowState() is the only place that should be creating
43 // WindowState.
44 class WindowStateMus : public ash::wm::WindowState {
45 public:
46 explicit WindowStateMus(ash::wm::WmWindow* window)
47 : ash::wm::WindowState(window) {}
48 ~WindowStateMus() override {}
49
50 private:
51 DISALLOW_COPY_AND_ASSIGN(WindowStateMus);
52 };
53
54 ui::WindowShowState UIWindowShowStateFromMojom(mus::mojom::ShowState state) {
55 switch (state) {
56 case mus::mojom::ShowState::DEFAULT:
57 return ui::SHOW_STATE_DEFAULT;
58 case mus::mojom::ShowState::NORMAL:
59 return ui::SHOW_STATE_NORMAL;
60 case mus::mojom::ShowState::MINIMIZED:
61 return ui::SHOW_STATE_MINIMIZED;
62 case mus::mojom::ShowState::MAXIMIZED:
63 return ui::SHOW_STATE_MAXIMIZED;
64 case mus::mojom::ShowState::INACTIVE:
65 return ui::SHOW_STATE_INACTIVE;
66 case mus::mojom::ShowState::FULLSCREEN:
67 return ui::SHOW_STATE_FULLSCREEN;
68 case mus::mojom::ShowState::DOCKED:
69 return ui::SHOW_STATE_DOCKED;
70 default:
71 break;
72 }
73 return ui::SHOW_STATE_DEFAULT;
74 }
75
76 mus::mojom::ShowState MojomWindowShowStateFromUI(ui::WindowShowState state) {
77 switch (state) {
78 case ui::SHOW_STATE_DEFAULT:
79 return mus::mojom::ShowState::DEFAULT;
80 case ui::SHOW_STATE_NORMAL:
81 return mus::mojom::ShowState::NORMAL;
82 case ui::SHOW_STATE_MINIMIZED:
83 return mus::mojom::ShowState::MINIMIZED;
84 case ui::SHOW_STATE_MAXIMIZED:
85 return mus::mojom::ShowState::MAXIMIZED;
86 case ui::SHOW_STATE_INACTIVE:
87 return mus::mojom::ShowState::INACTIVE;
88 case ui::SHOW_STATE_FULLSCREEN:
89 return mus::mojom::ShowState::FULLSCREEN;
90 case ui::SHOW_STATE_DOCKED:
91 return mus::mojom::ShowState::DOCKED;
92 default:
93 break;
94 }
95 return mus::mojom::ShowState::DEFAULT;
96 }
97
98 } // namespace
99
100 WmWindowMus::WmWindowMus(mus::Window* window)
101 : window_(window),
102 // Matches aura, see aura::Window for details.
103 observers_(
104 base::ObserverList<ash::wm::WmWindowObserver>::NOTIFY_EXISTING_ONLY) {
105 window_->AddObserver(this);
106 window_->SetLocalProperty(kWmWindowKey, this);
107 window_state_.reset(new WindowStateMus(this));
108 }
109
110 WmWindowMus::~WmWindowMus() {
111 window_->RemoveObserver(this);
112 }
113
114 // static
115 WmWindowMus* WmWindowMus::Get(mus::Window* window) {
116 if (!window)
117 return nullptr;
118
119 wm::WmWindowMus* wm_window = window->GetLocalProperty(kWmWindowKey);
120 if (wm_window)
121 return wm_window;
122 // WmWindowMus is owned by the mus::Window.
123 return new WmWindowMus(window);
124 }
125
126 // static
127 WmWindowMus* WmWindowMus::Get(views::Widget* widget) {
128 return WmWindowMus::Get(aura::GetMusWindow(widget->GetNativeView()));
129 }
130
131 // static
132 const mus::Window* WmWindowMus::GetMusWindow(
133 const ash::wm::WmWindow* wm_window) {
134 return static_cast<const WmWindowMus*>(wm_window)->mus_window();
135 }
136
137 // static
138 std::vector<ash::wm::WmWindow*> WmWindowMus::FromMusWindows(
139 const std::vector<mus::Window*>& mus_windows) {
140 std::vector<ash::wm::WmWindow*> result(mus_windows.size());
141 for (size_t i = 0; i < mus_windows.size(); ++i)
142 result[i] = Get(mus_windows[i]);
143 return result;
144 }
145
146 const WmRootWindowControllerMus* WmWindowMus::GetRootWindowControllerMus()
147 const {
148 return WmRootWindowControllerMus::Get(window_->GetRoot());
149 }
150
151 bool WmWindowMus::ShouldUseExtendedHitRegion() const {
152 const WmWindowMus* parent = Get(window_->parent());
153 return parent && parent->children_use_extended_hit_region_;
154 }
155
156 const ash::wm::WmWindow* WmWindowMus::GetRootWindow() const {
157 return Get(window_->GetRoot());
158 }
159
160 ash::wm::WmRootWindowController* WmWindowMus::GetRootWindowController() {
161 return GetRootWindowControllerMus();
162 }
163
164 ash::wm::WmGlobals* WmWindowMus::GetGlobals() const {
165 return WmGlobalsMus::Get();
166 }
167
168 void WmWindowMus::SetName(const char* name) {
169 if (name) {
170 window_->SetSharedProperty<std::string>(
171 mus::mojom::WindowManager::kName_Property, std::string(name));
172 } else {
173 window_->ClearSharedProperty(mus::mojom::WindowManager::kName_Property);
174 }
175 }
176
177 base::string16 WmWindowMus::GetTitle() const {
178 return GetWindowTitle(window_);
179 }
180
181 void WmWindowMus::SetShellWindowId(int id) {
182 shell_window_id_ = id;
183 }
184
185 int WmWindowMus::GetShellWindowId() const {
186 return shell_window_id_;
187 }
188
189 ui::wm::WindowType WmWindowMus::GetType() const {
190 return GetWmWindowType(window_);
191 }
192
193 ui::Layer* WmWindowMus::GetLayer() {
194 // TODO(sky): this function should be nuked entirely.
195 NOTIMPLEMENTED();
196 return widget_ ? widget_->GetLayer() : nullptr;
197 }
198
199 display::Display WmWindowMus::GetDisplayNearestWindow() {
200 // TODO(sky): deal with null rwc.
201 return GetRootWindowControllerMus()->GetDisplay();
202 }
203
204 bool WmWindowMus::HasNonClientArea() {
205 return widget_ ? true : false;
206 }
207
208 int WmWindowMus::GetNonClientComponent(const gfx::Point& location) {
209 return widget_ ? widget_->GetNonClientComponent(location) : HTNOWHERE;
210 }
211
212 gfx::Point WmWindowMus::ConvertPointToTarget(const WmWindow* target,
213 const gfx::Point& point) const {
214 const mus::Window* target_window = GetMusWindow(target);
215 if (target_window->Contains(window_)) {
216 gfx::Point result(point);
217 const mus::Window* window = window_;
218 while (window != target_window) {
219 result += window->bounds().origin().OffsetFromOrigin();
220 window = window->parent();
221 }
222 return result;
223 }
224 if (window_->Contains(target_window)) {
225 gfx::Point result(point);
226 result -=
227 target->ConvertPointToTarget(this, gfx::Point()).OffsetFromOrigin();
228 return result;
229 }
230 // Different roots.
231 gfx::Point point_in_screen =
232 GetRootWindowControllerMus()->ConvertPointToScreen(this, point);
233 return AsWmWindowMus(target)
234 ->GetRootWindowControllerMus()
235 ->ConvertPointFromScreen(AsWmWindowMus(target), point_in_screen);
236 }
237
238 gfx::Point WmWindowMus::ConvertPointToScreen(const gfx::Point& point) const {
239 return GetRootWindowControllerMus()->ConvertPointToScreen(this, point);
240 }
241
242 gfx::Point WmWindowMus::ConvertPointFromScreen(const gfx::Point& point) const {
243 return GetRootWindowControllerMus()->ConvertPointFromScreen(this, point);
244 }
245
246 gfx::Rect WmWindowMus::ConvertRectToScreen(const gfx::Rect& rect) const {
247 return gfx::Rect(ConvertPointToScreen(rect.origin()), rect.size());
248 }
249
250 gfx::Rect WmWindowMus::ConvertRectFromScreen(const gfx::Rect& rect) const {
251 return gfx::Rect(ConvertPointFromScreen(rect.origin()), rect.size());
252 }
253
254 gfx::Size WmWindowMus::GetMinimumSize() const {
255 return widget_ ? widget_->GetMinimumSize() : gfx::Size();
256 }
257
258 gfx::Size WmWindowMus::GetMaximumSize() const {
259 return widget_ ? widget_->GetMaximumSize() : gfx::Size();
260 }
261
262 bool WmWindowMus::GetTargetVisibility() const {
263 // TODO: need animation support: http://crbug.com/615087.
264 NOTIMPLEMENTED();
265 return window_->visible();
266 }
267
268 bool WmWindowMus::IsVisible() const {
269 return window_->visible();
270 }
271
272 void WmWindowMus::SetOpacity(float opacity) {
273 window_->SetOpacity(opacity);
274 }
275
276 float WmWindowMus::GetTargetOpacity() const {
277 // TODO: need animation support: http://crbug.com/615087.
278 return window_->opacity();
279 }
280
281 void WmWindowMus::SetTransform(const gfx::Transform& transform) {
282 // TODO: mus needs to support transforms: http://crbug.com/615089.
283 NOTIMPLEMENTED();
284 }
285
286 gfx::Transform WmWindowMus::GetTargetTransform() const {
287 // TODO: need animation support: http://crbug.com/615087.
288 return gfx::Transform();
289 }
290
291 bool WmWindowMus::IsSystemModal() const {
292 NOTIMPLEMENTED();
293 return false;
294 }
295
296 bool WmWindowMus::GetBoolProperty(ash::wm::WmWindowProperty key) {
297 switch (key) {
298 case ash::wm::WmWindowProperty::SNAP_CHILDREN_TO_PIXEL_BOUNDARY:
299 return snap_children_to_pixel_boundary_;
300
301 case ash::wm::WmWindowProperty::ALWAYS_ON_TOP:
302 return IsAlwaysOnTop();
303
304 default:
305 NOTREACHED();
306 break;
307 }
308
309 NOTREACHED();
310 return false;
311 }
312
313 int WmWindowMus::GetIntProperty(ash::wm::WmWindowProperty key) {
314 if (key == ash::wm::WmWindowProperty::SHELF_ID) {
315 NOTIMPLEMENTED();
316 return 0;
317 }
318
319 if (key == ash::wm::WmWindowProperty::TOP_VIEW_INSET) {
320 // TODO: need support for TOP_VIEW_INSET: http://crbug.com/615100.
321 NOTIMPLEMENTED();
322 return 0;
323 }
324
325 NOTREACHED();
326 return 0;
327 }
328
329 const ash::wm::WindowState* WmWindowMus::GetWindowState() const {
330 return window_state_.get();
331 }
332
333 ash::wm::WmWindow* WmWindowMus::GetToplevelWindow() {
334 return WmGlobalsMus::GetToplevelAncestor(window_);
335 }
336
337 void WmWindowMus::SetParentUsingContext(WmWindow* context,
338 const gfx::Rect& screen_bounds) {
339 GetDefaultParent(context, this, screen_bounds)->AddChild(this);
340 }
341
342 void WmWindowMus::AddChild(WmWindow* window) {
343 window_->AddChild(GetMusWindow(window));
344 }
345
346 ash::wm::WmWindow* WmWindowMus::GetParent() {
347 return Get(window_->parent());
348 }
349
350 const ash::wm::WmWindow* WmWindowMus::GetTransientParent() const {
351 return Get(window_->transient_parent());
352 }
353
354 std::vector<ash::wm::WmWindow*> WmWindowMus::GetTransientChildren() {
355 return FromMusWindows(window_->transient_children());
356 }
357
358 void WmWindowMus::SetLayoutManager(
359 std::unique_ptr<ash::wm::WmLayoutManager> layout_manager) {
360 if (layout_manager) {
361 layout_manager_adapter_.reset(
362 new MusLayoutManagerAdapter(window_, std::move(layout_manager)));
363 } else {
364 layout_manager_adapter_.reset();
365 }
366 }
367
368 ash::wm::WmLayoutManager* WmWindowMus::GetLayoutManager() {
369 return layout_manager_adapter_ ? layout_manager_adapter_->layout_manager()
370 : nullptr;
371 }
372
373 void WmWindowMus::SetVisibilityAnimationType(int type) {
374 // TODO: need animation support: http://crbug.com/615087.
375 NOTIMPLEMENTED();
376 }
377
378 void WmWindowMus::SetVisibilityAnimationDuration(base::TimeDelta delta) {
379 // TODO: need animation support: http://crbug.com/615087.
380 NOTIMPLEMENTED();
381 }
382
383 void WmWindowMus::SetVisibilityAnimationTransition(
384 ::wm::WindowVisibilityAnimationTransition transition) {
385 // TODO: need animation support: http://crbug.com/615087.
386 NOTIMPLEMENTED();
387 }
388
389 void WmWindowMus::Animate(::wm::WindowAnimationType type) {
390 // TODO: need animation support: http://crbug.com/615087.
391 NOTIMPLEMENTED();
392 }
393
394 void WmWindowMus::StopAnimatingProperty(
395 ui::LayerAnimationElement::AnimatableProperty property) {
396 // TODO: need animation support: http://crbug.com/615087.
397 NOTIMPLEMENTED();
398 }
399
400 void WmWindowMus::SetChildWindowVisibilityChangesAnimated() {
401 // TODO: need animation support: http://crbug.com/615087.
402 NOTIMPLEMENTED();
403 }
404
405 void WmWindowMus::SetMasksToBounds(bool value) {
406 // TODO: mus needs mask to bounds support: http://crbug.com/615550.
407 NOTIMPLEMENTED();
408 }
409
410 void WmWindowMus::SetBounds(const gfx::Rect& bounds) {
411 if (window_->parent()) {
412 WmWindowMus* parent = WmWindowMus::Get(window_->parent());
413 if (parent->layout_manager_adapter_) {
414 parent->layout_manager_adapter_->layout_manager()->SetChildBounds(this,
415 bounds);
416 return;
417 }
418 }
419 SetBoundsDirect(bounds);
420 }
421
422 void WmWindowMus::SetBoundsWithTransitionDelay(const gfx::Rect& bounds,
423 base::TimeDelta delta) {
424 // TODO: need animation support: http://crbug.com/615087.
425 NOTIMPLEMENTED();
426 SetBounds(bounds);
427 }
428
429 void WmWindowMus::SetBoundsDirect(const gfx::Rect& bounds) {
430 window_->SetBounds(bounds);
431 SnapToPixelBoundaryIfNecessary();
432 }
433
434 void WmWindowMus::SetBoundsDirectAnimated(const gfx::Rect& bounds) {
435 // TODO: need animation support: http://crbug.com/615087.
436 NOTIMPLEMENTED();
437 SetBoundsDirect(bounds);
438 }
439
440 void WmWindowMus::SetBoundsDirectCrossFade(const gfx::Rect& bounds) {
441 // TODO: need animation support: http://crbug.com/615087.
442 NOTIMPLEMENTED();
443 SetBoundsDirect(bounds);
444 }
445
446 void WmWindowMus::SetBoundsInScreen(const gfx::Rect& bounds_in_screen,
447 const display::Display& dst_display) {
448 // TODO: SetBoundsInScreen isn't fully implemented yet,
449 // http://crbug.com/615552.
450 NOTIMPLEMENTED();
451 SetBounds(ConvertRectFromScreen(bounds_in_screen));
452 }
453
454 gfx::Rect WmWindowMus::GetBoundsInScreen() const {
455 return ConvertRectToScreen(gfx::Rect(window_->bounds().size()));
456 }
457
458 const gfx::Rect& WmWindowMus::GetBounds() const {
459 return window_->bounds();
460 }
461
462 gfx::Rect WmWindowMus::GetTargetBounds() {
463 // TODO: need animation support: http://crbug.com/615087.
464 NOTIMPLEMENTED();
465 return window_->bounds();
466 }
467
468 void WmWindowMus::ClearRestoreBounds() {
469 restore_bounds_in_screen_.reset();
470 }
471
472 void WmWindowMus::SetRestoreBoundsInScreen(const gfx::Rect& bounds) {
473 restore_bounds_in_screen_.reset(new gfx::Rect(bounds));
474 }
475
476 gfx::Rect WmWindowMus::GetRestoreBoundsInScreen() const {
477 return *restore_bounds_in_screen_;
478 }
479
480 bool WmWindowMus::Contains(const ash::wm::WmWindow* other) const {
481 return other
482 ? window_->Contains(
483 static_cast<const WmWindowMus*>(other)->window_)
484 : false;
485 }
486
487 void WmWindowMus::SetShowState(ui::WindowShowState show_state) {
488 SetWindowShowState(window_, MojomWindowShowStateFromUI(show_state));
489 }
490
491 ui::WindowShowState WmWindowMus::GetShowState() const {
492 return UIWindowShowStateFromMojom(GetWindowShowState(window_));
493 }
494
495 void WmWindowMus::SetRestoreShowState(ui::WindowShowState show_state) {
496 restore_show_state_ = show_state;
497 }
498
499 void WmWindowMus::SetLockedToRoot(bool value) {
500 // TODO(sky): there is no getter for this. Investigate where used.
501 NOTIMPLEMENTED();
502 }
503
504 void WmWindowMus::SetCapture() {
505 window_->SetCapture();
506 }
507
508 bool WmWindowMus::HasCapture() {
509 return window_->HasCapture();
510 }
511
512 void WmWindowMus::ReleaseCapture() {
513 window_->ReleaseCapture();
514 }
515
516 bool WmWindowMus::HasRestoreBounds() const {
517 return restore_bounds_in_screen_.get() != nullptr;
518 }
519
520 bool WmWindowMus::CanMaximize() const {
521 return widget_ ? widget_->widget_delegate()->CanMaximize() : false;
522 }
523
524 bool WmWindowMus::CanMinimize() const {
525 return widget_ ? widget_->widget_delegate()->CanMinimize() : false;
526 }
527
528 bool WmWindowMus::CanResize() const {
529 return widget_ ? widget_->widget_delegate()->CanResize() : false;
530 }
531
532 bool WmWindowMus::CanActivate() const {
533 // TODO(sky): this isn't quite right. Should key off CanFocus(), which is not
534 // replicated.
535 return widget_ != nullptr;
536 }
537
538 void WmWindowMus::StackChildAtTop(ash::wm::WmWindow* child) {
539 GetMusWindow(child)->MoveToFront();
540 }
541
542 void WmWindowMus::StackChildAtBottom(ash::wm::WmWindow* child) {
543 GetMusWindow(child)->MoveToBack();
544 }
545
546 void WmWindowMus::StackChildAbove(ash::wm::WmWindow* child,
547 ash::wm::WmWindow* target) {
548 GetMusWindow(child)->Reorder(GetMusWindow(target),
549 mus::mojom::OrderDirection::ABOVE);
550 }
551
552 void WmWindowMus::StackChildBelow(WmWindow* child, WmWindow* target) {
553 GetMusWindow(child)->Reorder(GetMusWindow(target),
554 mus::mojom::OrderDirection::BELOW);
555 }
556
557 void WmWindowMus::SetAlwaysOnTop(bool value) {
558 mash::wm::SetAlwaysOnTop(window_, value);
559 }
560
561 bool WmWindowMus::IsAlwaysOnTop() const {
562 return mash::wm::IsAlwaysOnTop(window_);
563 }
564
565 void WmWindowMus::Hide() {
566 window_->SetVisible(false);
567 }
568
569 void WmWindowMus::Show() {
570 window_->SetVisible(true);
571 }
572
573 void WmWindowMus::CloseWidget() {
574 DCHECK(widget_);
575 // Allow the client to service the close request for remote widgets.
576 if (widget_creation_type_ == WidgetCreationType::FOR_CLIENT)
577 window_->RequestClose();
578 else
579 widget_->Close();
580 }
581
582 bool WmWindowMus::IsFocused() const {
583 return window_->HasFocus();
584 }
585
586 bool WmWindowMus::IsActive() const {
587 mus::Window* focused = window_->window_tree()->GetFocusedWindow();
588 return focused && window_->Contains(focused);
589 }
590
591 void WmWindowMus::Activate() {
592 window_->SetFocus();
593 ash::wm::WmWindow* top_level = GetToplevelWindow();
594 if (!top_level)
595 return;
596
597 // TODO(sky): mus should do this too.
598 GetMusWindow(top_level)->MoveToFront();
599 }
600
601 void WmWindowMus::Deactivate() {
602 if (IsActive())
603 window_->window_tree()->ClearFocus();
604 }
605
606 void WmWindowMus::SetFullscreen() {
607 SetWindowShowState(window_, mus::mojom::ShowState::FULLSCREEN);
608 }
609
610 void WmWindowMus::Maximize() {
611 SetWindowShowState(window_, mus::mojom::ShowState::MAXIMIZED);
612 }
613
614 void WmWindowMus::Minimize() {
615 SetWindowShowState(window_, mus::mojom::ShowState::MINIMIZED);
616 }
617
618 void WmWindowMus::Unminimize() {
619 SetWindowShowState(window_, MojomWindowShowStateFromUI(restore_show_state_));
620 restore_show_state_ = ui::SHOW_STATE_DEFAULT;
621 }
622
623 std::vector<ash::wm::WmWindow*> WmWindowMus::GetChildren() {
624 return FromMusWindows(window_->children());
625 }
626
627 ash::wm::WmWindow* WmWindowMus::GetChildByShellWindowId(int id) {
628 if (id == shell_window_id_)
629 return this;
630 for (mus::Window* child : window_->children()) {
631 ash::wm::WmWindow* result = Get(child)->GetChildByShellWindowId(id);
632 if (result)
633 return result;
634 }
635 return nullptr;
636 }
637
638 void WmWindowMus::ShowResizeShadow(int component) {
639 NOTIMPLEMENTED();
640 }
641
642 void WmWindowMus::HideResizeShadow() {
643 NOTIMPLEMENTED();
644 }
645
646 void WmWindowMus::SetBoundsInScreenBehaviorForChildren(
647 ash::wm::WmWindow::BoundsInScreenBehavior behavior) {
648 // TODO: SetBoundsInScreen isn't fully implemented yet,
649 // http://crbug.com/615552.
650 NOTIMPLEMENTED();
651 }
652
653 void WmWindowMus::SetSnapsChildrenToPhysicalPixelBoundary() {
654 if (snap_children_to_pixel_boundary_)
655 return;
656
657 snap_children_to_pixel_boundary_ = true;
658 FOR_EACH_OBSERVER(
659 ash::wm::WmWindowObserver, observers_,
660 OnWindowPropertyChanged(
661 this, ash::wm::WmWindowProperty::SNAP_CHILDREN_TO_PIXEL_BOUNDARY));
662 }
663
664 void WmWindowMus::SnapToPixelBoundaryIfNecessary() {
665 WmWindowMus* parent = Get(window_->parent());
666 if (parent && parent->snap_children_to_pixel_boundary_) {
667 // TODO: implement snap to pixel: http://crbug.com/615554.
668 NOTIMPLEMENTED();
669 }
670 }
671
672 void WmWindowMus::SetChildrenUseExtendedHitRegion() {
673 children_use_extended_hit_region_ = true;
674 }
675
676 void WmWindowMus::SetDescendantsStayInSameRootWindow(bool value) {
677 // TODO: this logic feeds into SetBoundsInScreen(), which is not implemented:
678 // http://crbug.com/615552.
679 NOTIMPLEMENTED();
680 }
681
682 void WmWindowMus::AddObserver(ash::wm::WmWindowObserver* observer) {
683 observers_.AddObserver(observer);
684 }
685
686 void WmWindowMus::RemoveObserver(ash::wm::WmWindowObserver* observer) {
687 observers_.RemoveObserver(observer);
688 }
689
690 void WmWindowMus::OnTreeChanged(const TreeChangeParams& params) {
691 ash::wm::WmWindowObserver::TreeChangeParams wm_params;
692 wm_params.target = Get(params.target);
693 wm_params.new_parent = Get(params.new_parent);
694 wm_params.old_parent = Get(params.old_parent);
695 FOR_EACH_OBSERVER(ash::wm::WmWindowObserver, observers_,
696 OnWindowTreeChanged(this, wm_params));
697 }
698
699 void WmWindowMus::OnWindowReordered(mus::Window* window,
700 mus::Window* relative_window,
701 mus::mojom::OrderDirection direction) {
702 FOR_EACH_OBSERVER(ash::wm::WmWindowObserver, observers_,
703 OnWindowStackingChanged(this));
704 }
705
706 void WmWindowMus::OnWindowSharedPropertyChanged(
707 mus::Window* window,
708 const std::string& name,
709 const std::vector<uint8_t>* old_data,
710 const std::vector<uint8_t>* new_data) {
711 if (name == mus::mojom::WindowManager::kShowState_Property) {
712 GetWindowState()->OnWindowShowStateChanged();
713 return;
714 }
715 if (name == mus::mojom::WindowManager::kAlwaysOnTop_Property) {
716 FOR_EACH_OBSERVER(ash::wm::WmWindowObserver, observers_,
717 OnWindowPropertyChanged(
718 this, ash::wm::WmWindowProperty::ALWAYS_ON_TOP));
719 return;
720 }
721
722 // Deal with snap to pixel.
723 NOTIMPLEMENTED();
724 }
725
726 void WmWindowMus::OnWindowBoundsChanged(mus::Window* window,
727 const gfx::Rect& old_bounds,
728 const gfx::Rect& new_bounds) {
729 FOR_EACH_OBSERVER(ash::wm::WmWindowObserver, observers_,
730 OnWindowBoundsChanged(this, old_bounds, new_bounds));
731 }
732
733 void WmWindowMus::OnWindowDestroying(mus::Window* window) {
734 FOR_EACH_OBSERVER(ash::wm::WmWindowObserver, observers_,
735 OnWindowDestroying(this));
736 }
737
738 } // namespace wm
739 } // namespace mash
OLDNEW
« no previous file with comments | « mash/wm/bridge/wm_window_mus.h ('k') | mash/wm/container_ids.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698