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

Side by Side Diff: ash/wm/window_mirror_view.cc

Issue 2893643003: [mus+ash] Removes WmWindow from ash/wm/window_cycle_* (Closed)
Patch Set: [mus+ash] Removes WmWindow from ash/wm/window_cycle_* (nits) Created 3 years, 7 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/wm/window_mirror_view.h ('k') | ash/wm_window.h » ('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 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 "ash/wm/window_mirror_view.h" 5 #include "ash/wm/window_mirror_view.h"
6 6
7 #include "ash/wm/widget_finder.h" 7 #include "ash/wm/widget_finder.h"
8 #include "ash/wm/window_state.h" 8 #include "ash/wm/window_state.h"
9 #include "ash/wm/window_state_aura.h" 9 #include "ash/wm/window_state_aura.h"
10 #include "ash/wm_window.h" 10 #include "ash/wm_window.h"
(...skipping 14 matching lines...) Expand all
25 while (!layers.empty()) { 25 while (!layers.empty()) {
26 for (auto* child : layers.front()->children()) 26 for (auto* child : layers.front()->children())
27 layers.push_back(child); 27 layers.push_back(child);
28 layers.front()->SetVisible(true); 28 layers.front()->SetVisible(true);
29 layers.pop_front(); 29 layers.pop_front();
30 } 30 }
31 } 31 }
32 32
33 } // namespace 33 } // namespace
34 34
35 WindowMirrorView::WindowMirrorView(WmWindow* window) : target_(window) { 35 WindowMirrorView::WindowMirrorView(aura::Window* window) : target_(window) {
36 DCHECK(window); 36 DCHECK(window);
37 } 37 }
38 38
39 WindowMirrorView::~WindowMirrorView() { 39 WindowMirrorView::~WindowMirrorView() {
40 // Make sure |target_| has outlived |this|. See crbug.com/681207 40 // Make sure |target_| has outlived |this|. See crbug.com/681207
41 DCHECK(target_->aura_window()->layer()); 41 DCHECK(target_->layer());
42 if (layer_owner_) 42 if (layer_owner_)
43 target_->aura_window()->ClearProperty(aura::client::kMirroringEnabledKey); 43 target_->ClearProperty(aura::client::kMirroringEnabledKey);
44 } 44 }
45 45
46 gfx::Size WindowMirrorView::GetPreferredSize() const { 46 gfx::Size WindowMirrorView::GetPreferredSize() const {
47 return GetClientAreaBounds().size(); 47 return GetClientAreaBounds().size();
48 } 48 }
49 49
50 void WindowMirrorView::Layout() { 50 void WindowMirrorView::Layout() {
51 // If |layer_owner_| hasn't been initialized (|this| isn't on screen), no-op. 51 // If |layer_owner_| hasn't been initialized (|this| isn't on screen), no-op.
52 if (!layer_owner_) 52 if (!layer_owner_)
53 return; 53 return;
54 54
55 // Position at 0, 0. 55 // Position at 0, 0.
56 GetMirrorLayer()->SetBounds(gfx::Rect(GetMirrorLayer()->bounds().size())); 56 GetMirrorLayer()->SetBounds(gfx::Rect(GetMirrorLayer()->bounds().size()));
57 57
58 gfx::Transform transform; 58 gfx::Transform transform;
59 gfx::Rect client_area_bounds = GetClientAreaBounds(); 59 gfx::Rect client_area_bounds = GetClientAreaBounds();
60 // Scale down if necessary. 60 // Scale down if necessary.
61 if (size() != target_->GetBounds().size()) { 61 if (size() != target_->bounds().size()) {
62 const float scale = 62 const float scale =
63 width() / static_cast<float>(client_area_bounds.width()); 63 width() / static_cast<float>(client_area_bounds.width());
64 transform.Scale(scale, scale); 64 transform.Scale(scale, scale);
65 } 65 }
66 // Reposition such that the client area is the only part visible. 66 // Reposition such that the client area is the only part visible.
67 transform.Translate(-client_area_bounds.x(), -client_area_bounds.y()); 67 transform.Translate(-client_area_bounds.x(), -client_area_bounds.y());
68 GetMirrorLayer()->SetTransform(transform); 68 GetMirrorLayer()->SetTransform(transform);
69 } 69 }
70 70
71 bool WindowMirrorView::GetNeedsNotificationWhenVisibleBoundsChange() const { 71 bool WindowMirrorView::GetNeedsNotificationWhenVisibleBoundsChange() const {
72 return true; 72 return true;
73 } 73 }
74 74
75 void WindowMirrorView::OnVisibleBoundsChanged() { 75 void WindowMirrorView::OnVisibleBoundsChanged() {
76 if (!layer_owner_ && !GetVisibleBounds().IsEmpty()) 76 if (!layer_owner_ && !GetVisibleBounds().IsEmpty())
77 InitLayerOwner(); 77 InitLayerOwner();
78 } 78 }
79 79
80 void WindowMirrorView::InitLayerOwner() { 80 void WindowMirrorView::InitLayerOwner() {
81 if (!layer_owner_) { 81 if (!layer_owner_)
82 target_->aura_window()->SetProperty(aura::client::kMirroringEnabledKey, 82 target_->SetProperty(aura::client::kMirroringEnabledKey, true);
83 true);
84 }
85 83
86 layer_owner_ = 84 layer_owner_ = ::wm::MirrorLayers(target_, false /* sync_bounds */);
87 ::wm::MirrorLayers(target_->aura_window(), false /* sync_bounds */);
88 85
89 SetPaintToLayer(); 86 SetPaintToLayer();
90 layer()->Add(GetMirrorLayer()); 87 layer()->Add(GetMirrorLayer());
91 // This causes us to clip the non-client areas of the window. 88 // This causes us to clip the non-client areas of the window.
92 layer()->SetMasksToBounds(true); 89 layer()->SetMasksToBounds(true);
93 90
94 // Some extra work is needed when the target window is minimized. 91 // Some extra work is needed when the target window is minimized.
95 if (target_->GetWindowState()->IsMinimized()) { 92 if (wm::GetWindowState(target_)->IsMinimized()) {
96 GetMirrorLayer()->SetOpacity(1); 93 GetMirrorLayer()->SetOpacity(1);
97 EnsureAllChildrenAreVisible(GetMirrorLayer()); 94 EnsureAllChildrenAreVisible(GetMirrorLayer());
98 } 95 }
99 96
100 Layout(); 97 Layout();
101 } 98 }
102 99
103 ui::Layer* WindowMirrorView::GetMirrorLayer() { 100 ui::Layer* WindowMirrorView::GetMirrorLayer() {
104 return layer_owner_->root(); 101 return layer_owner_->root();
105 } 102 }
106 103
107 gfx::Rect WindowMirrorView::GetClientAreaBounds() const { 104 gfx::Rect WindowMirrorView::GetClientAreaBounds() const {
108 int insets = target_->aura_window()->GetProperty(aura::client::kTopViewInset); 105 int insets = target_->GetProperty(aura::client::kTopViewInset);
109 if (insets > 0) { 106 if (insets > 0) {
110 gfx::Rect bounds(target_->GetBounds().size()); 107 gfx::Rect bounds(target_->bounds().size());
111 bounds.Inset(0, insets, 0, 0); 108 bounds.Inset(0, insets, 0, 0);
112 return bounds; 109 return bounds;
113 } 110 }
114 // The target window may not have a widget in unit tests. 111 // The target window may not have a widget in unit tests.
115 views::Widget* widget = GetInternalWidgetForWindow(target_->aura_window()); 112 views::Widget* widget = GetInternalWidgetForWindow(target_);
116 if (!widget) 113 if (!widget)
117 return gfx::Rect(); 114 return gfx::Rect();
118 views::View* client_view = widget->client_view(); 115 views::View* client_view = widget->client_view();
119 return client_view->ConvertRectToWidget(client_view->GetLocalBounds()); 116 return client_view->ConvertRectToWidget(client_view->GetLocalBounds());
120 } 117 }
121 118
122 } // namespace wm 119 } // namespace wm
123 } // namespace ash 120 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/window_mirror_view.h ('k') | ash/wm_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698