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

Side by Side Diff: ash/wm/overview/scoped_transform_overview_window.cc

Issue 2035543004: Shuffles and renames ash/common/wm classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: random changes for chrome tests 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/overview/scoped_transform_overview_window.h" 5 #include "ash/wm/overview/scoped_transform_overview_window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/common/wm/window_state.h" 10 #include "ash/common/wm/window_state.h"
11 #include "ash/common/wm/wm_window.h" 11 #include "ash/common/wm_window.h"
12 #include "ash/wm/overview/scoped_overview_animation_settings.h" 12 #include "ash/wm/overview/scoped_overview_animation_settings.h"
13 #include "ash/wm/overview/scoped_overview_animation_settings_factory.h" 13 #include "ash/wm/overview/scoped_overview_animation_settings_factory.h"
14 #include "ash/wm/overview/window_selector_item.h" 14 #include "ash/wm/overview/window_selector_item.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "ui/gfx/geometry/rect.h" 16 #include "ui/gfx/geometry/rect.h"
17 #include "ui/gfx/transform_util.h" 17 #include "ui/gfx/transform_util.h"
18 18
19 using WmWindows = std::vector<ash::wm::WmWindow*>; 19 using WmWindows = std::vector<ash::WmWindow*>;
20 20
21 namespace ash { 21 namespace ash {
22 22
23 namespace { 23 namespace {
24 24
25 // The opacity level that windows will be set to when they are restored. 25 // The opacity level that windows will be set to when they are restored.
26 const float kRestoreWindowOpacity = 1.0f; 26 const float kRestoreWindowOpacity = 1.0f;
27 27
28 wm::WmWindow* GetTransientRoot(wm::WmWindow* window) { 28 WmWindow* GetTransientRoot(WmWindow* window) {
29 while (window->GetTransientParent()) 29 while (window->GetTransientParent())
30 window = window->GetTransientParent(); 30 window = window->GetTransientParent();
31 return window; 31 return window;
32 } 32 }
33 33
34 std::unique_ptr<ScopedOverviewAnimationSettings> 34 std::unique_ptr<ScopedOverviewAnimationSettings>
35 CreateScopedOverviewAnimationSettings(OverviewAnimationType animation_type, 35 CreateScopedOverviewAnimationSettings(OverviewAnimationType animation_type,
36 wm::WmWindow* window) { 36 WmWindow* window) {
37 return ScopedOverviewAnimationSettingsFactory::Get() 37 return ScopedOverviewAnimationSettingsFactory::Get()
38 ->CreateOverviewAnimationSettings(animation_type, window); 38 ->CreateOverviewAnimationSettings(animation_type, window);
39 } 39 }
40 40
41 // An iterator class that traverses a wm::WmWindow and all of its transient 41 // An iterator class that traverses a WmWindow and all of its transient
42 // descendants. 42 // descendants.
43 class TransientDescendantIterator { 43 class TransientDescendantIterator {
44 public: 44 public:
45 // Creates an empty iterator. 45 // Creates an empty iterator.
46 TransientDescendantIterator(); 46 TransientDescendantIterator();
47 47
48 // Copy constructor required for iterator purposes. 48 // Copy constructor required for iterator purposes.
49 TransientDescendantIterator( 49 TransientDescendantIterator(
50 const TransientDescendantIterator& other) = default; 50 const TransientDescendantIterator& other) = default;
51 51
52 // Iterates over |root_window| and all of its transient descendants. 52 // Iterates over |root_window| and all of its transient descendants.
53 // Note |root_window| must not have a transient parent. 53 // Note |root_window| must not have a transient parent.
54 explicit TransientDescendantIterator(wm::WmWindow* root_window); 54 explicit TransientDescendantIterator(WmWindow* root_window);
55 55
56 // Prefix increment operator. This assumes there are more items (i.e. 56 // Prefix increment operator. This assumes there are more items (i.e.
57 // *this != TransientDescendantIterator()). 57 // *this != TransientDescendantIterator()).
58 const TransientDescendantIterator& operator++(); 58 const TransientDescendantIterator& operator++();
59 59
60 // Comparison for STL-based loops. 60 // Comparison for STL-based loops.
61 bool operator!=(const TransientDescendantIterator& other) const; 61 bool operator!=(const TransientDescendantIterator& other) const;
62 62
63 // Dereference operator for STL-compatible iterators. 63 // Dereference operator for STL-compatible iterators.
64 wm::WmWindow* operator*() const; 64 WmWindow* operator*() const;
65 65
66 private: 66 private:
67 // Explicit assignment operator defined because an explicit copy constructor 67 // Explicit assignment operator defined because an explicit copy constructor
68 // is needed and therefore the DISALLOW_COPY_AND_ASSIGN macro cannot be used. 68 // is needed and therefore the DISALLOW_COPY_AND_ASSIGN macro cannot be used.
69 TransientDescendantIterator& operator=( 69 TransientDescendantIterator& operator=(
70 const TransientDescendantIterator& other) = default; 70 const TransientDescendantIterator& other) = default;
71 71
72 // The current window that |this| refers to. A null |current_window_| denotes 72 // The current window that |this| refers to. A null |current_window_| denotes
73 // an empty iterator and is used as the last possible value in the traversal. 73 // an empty iterator and is used as the last possible value in the traversal.
74 wm::WmWindow* current_window_; 74 WmWindow* current_window_;
75 }; 75 };
76 76
77 // Provides a virtual container implementing begin() and end() for a sequence of 77 // Provides a virtual container implementing begin() and end() for a sequence of
78 // TransientDescendantIterators. This can be used in range-based for loops. 78 // TransientDescendantIterators. This can be used in range-based for loops.
79 class TransientDescendantIteratorRange { 79 class TransientDescendantIteratorRange {
80 public: 80 public:
81 explicit TransientDescendantIteratorRange( 81 explicit TransientDescendantIteratorRange(
82 const TransientDescendantIterator& begin); 82 const TransientDescendantIterator& begin);
83 83
84 // Copy constructor required for iterator purposes. 84 // Copy constructor required for iterator purposes.
(...skipping 10 matching lines...) Expand all
95 const TransientDescendantIteratorRange& other) = default; 95 const TransientDescendantIteratorRange& other) = default;
96 96
97 TransientDescendantIterator begin_; 97 TransientDescendantIterator begin_;
98 TransientDescendantIterator end_; 98 TransientDescendantIterator end_;
99 }; 99 };
100 100
101 TransientDescendantIterator::TransientDescendantIterator() 101 TransientDescendantIterator::TransientDescendantIterator()
102 : current_window_(nullptr) { 102 : current_window_(nullptr) {
103 } 103 }
104 104
105 TransientDescendantIterator::TransientDescendantIterator( 105 TransientDescendantIterator::TransientDescendantIterator(WmWindow* root_window)
106 wm::WmWindow* root_window)
107 : current_window_(root_window) { 106 : current_window_(root_window) {
108 DCHECK(!root_window->GetTransientParent()); 107 DCHECK(!root_window->GetTransientParent());
109 } 108 }
110 109
111 // Performs a pre-order traversal of the transient descendants. 110 // Performs a pre-order traversal of the transient descendants.
112 const TransientDescendantIterator& 111 const TransientDescendantIterator&
113 TransientDescendantIterator::operator++() { 112 TransientDescendantIterator::operator++() {
114 DCHECK(current_window_); 113 DCHECK(current_window_);
115 114
116 const WmWindows transient_children = current_window_->GetTransientChildren(); 115 const WmWindows transient_children = current_window_->GetTransientChildren();
117 116
118 if (!transient_children.empty()) { 117 if (!transient_children.empty()) {
119 current_window_ = transient_children.front(); 118 current_window_ = transient_children.front();
120 } else { 119 } else {
121 while (current_window_) { 120 while (current_window_) {
122 wm::WmWindow* parent = current_window_->GetTransientParent(); 121 WmWindow* parent = current_window_->GetTransientParent();
123 if (!parent) { 122 if (!parent) {
124 current_window_ = nullptr; 123 current_window_ = nullptr;
125 break; 124 break;
126 } 125 }
127 const WmWindows transient_siblings = parent->GetTransientChildren(); 126 const WmWindows transient_siblings = parent->GetTransientChildren();
128 auto iter = std::find(transient_siblings.begin(), 127 auto iter = std::find(transient_siblings.begin(),
129 transient_siblings.end(), current_window_); 128 transient_siblings.end(), current_window_);
130 ++iter; 129 ++iter;
131 if (iter != transient_siblings.end()) { 130 if (iter != transient_siblings.end()) {
132 current_window_ = *iter; 131 current_window_ = *iter;
133 break; 132 break;
134 } 133 }
135 current_window_ = current_window_->GetTransientParent(); 134 current_window_ = current_window_->GetTransientParent();
136 } 135 }
137 } 136 }
138 return *this; 137 return *this;
139 } 138 }
140 139
141 bool TransientDescendantIterator::operator!=( 140 bool TransientDescendantIterator::operator!=(
142 const TransientDescendantIterator& other) const { 141 const TransientDescendantIterator& other) const {
143 return current_window_ != other.current_window_; 142 return current_window_ != other.current_window_;
144 } 143 }
145 144
146 wm::WmWindow* TransientDescendantIterator::operator*() const { 145 WmWindow* TransientDescendantIterator::operator*() const {
147 return current_window_; 146 return current_window_;
148 } 147 }
149 148
150 TransientDescendantIteratorRange::TransientDescendantIteratorRange( 149 TransientDescendantIteratorRange::TransientDescendantIteratorRange(
151 const TransientDescendantIterator& begin) 150 const TransientDescendantIterator& begin)
152 : begin_(begin) { 151 : begin_(begin) {
153 } 152 }
154 153
155 TransientDescendantIteratorRange GetTransientTreeIterator( 154 TransientDescendantIteratorRange GetTransientTreeIterator(WmWindow* window) {
156 wm::WmWindow* window) {
157 return TransientDescendantIteratorRange( 155 return TransientDescendantIteratorRange(
158 TransientDescendantIterator(GetTransientRoot(window))); 156 TransientDescendantIterator(GetTransientRoot(window)));
159 } 157 }
160 158
161 } // namespace 159 } // namespace
162 160
163 ScopedTransformOverviewWindow::ScopedTransformOverviewWindow( 161 ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(WmWindow* window)
164 wm::WmWindow* window)
165 : window_(window), 162 : window_(window),
166 minimized_(window->GetShowState() == ui::SHOW_STATE_MINIMIZED), 163 minimized_(window->GetShowState() == ui::SHOW_STATE_MINIMIZED),
167 ignored_by_shelf_(window->GetWindowState()->ignored_by_shelf()), 164 ignored_by_shelf_(window->GetWindowState()->ignored_by_shelf()),
168 overview_started_(false), 165 overview_started_(false),
169 original_transform_(window->GetTargetTransform()), 166 original_transform_(window->GetTargetTransform()),
170 original_opacity_(window->GetTargetOpacity()) {} 167 original_opacity_(window->GetTargetOpacity()) {}
171 168
172 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() { 169 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {
173 } 170 }
174 171
(...skipping 26 matching lines...) Expand all
201 198
202 void ScopedTransformOverviewWindow::BeginScopedAnimation( 199 void ScopedTransformOverviewWindow::BeginScopedAnimation(
203 OverviewAnimationType animation_type, 200 OverviewAnimationType animation_type,
204 ScopedAnimationSettings* animation_settings) { 201 ScopedAnimationSettings* animation_settings) {
205 for (const auto& window : GetTransientTreeIterator(window_)) { 202 for (const auto& window : GetTransientTreeIterator(window_)) {
206 animation_settings->push_back( 203 animation_settings->push_back(
207 CreateScopedOverviewAnimationSettings(animation_type, window)); 204 CreateScopedOverviewAnimationSettings(animation_type, window));
208 } 205 }
209 } 206 }
210 207
211 bool ScopedTransformOverviewWindow::Contains(const wm::WmWindow* target) const { 208 bool ScopedTransformOverviewWindow::Contains(const WmWindow* target) const {
212 for (const auto& window : GetTransientTreeIterator(window_)) { 209 for (const auto& window : GetTransientTreeIterator(window_)) {
213 if (window->Contains(target)) 210 if (window->Contains(target))
214 return true; 211 return true;
215 } 212 }
216 return false; 213 return false;
217 } 214 }
218 215
219 gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const { 216 gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const {
220 gfx::Rect bounds; 217 gfx::Rect bounds;
221 for (const auto& window : GetTransientTreeIterator(window_)) { 218 for (const auto& window : GetTransientTreeIterator(window_)) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 DCHECK(!src_rect.IsEmpty()); 271 DCHECK(!src_rect.IsEmpty());
275 gfx::Transform transform; 272 gfx::Transform transform;
276 transform.Translate(dst_rect.x() - src_rect.x(), 273 transform.Translate(dst_rect.x() - src_rect.x(),
277 dst_rect.y() - src_rect.y()); 274 dst_rect.y() - src_rect.y());
278 transform.Scale(static_cast<float>(dst_rect.width()) / src_rect.width(), 275 transform.Scale(static_cast<float>(dst_rect.width()) / src_rect.width(),
279 static_cast<float>(dst_rect.height()) / src_rect.height()); 276 static_cast<float>(dst_rect.height()) / src_rect.height());
280 return transform; 277 return transform;
281 } 278 }
282 279
283 void ScopedTransformOverviewWindow::SetTransform( 280 void ScopedTransformOverviewWindow::SetTransform(
284 wm::WmWindow* root_window, 281 WmWindow* root_window,
285 const gfx::Transform& transform) { 282 const gfx::Transform& transform) {
286 DCHECK(overview_started_); 283 DCHECK(overview_started_);
287 284
288 gfx::Point target_origin(GetTargetBoundsInScreen().origin()); 285 gfx::Point target_origin(GetTargetBoundsInScreen().origin());
289 286
290 for (const auto& window : GetTransientTreeIterator(window_)) { 287 for (const auto& window : GetTransientTreeIterator(window_)) {
291 wm::WmWindow* parent_window = window->GetParent(); 288 WmWindow* parent_window = window->GetParent();
292 gfx::Point original_origin = 289 gfx::Point original_origin =
293 parent_window->ConvertRectToScreen(window->GetTargetBounds()).origin(); 290 parent_window->ConvertRectToScreen(window->GetTargetBounds()).origin();
294 gfx::Transform new_transform = TransformAboutPivot( 291 gfx::Transform new_transform = TransformAboutPivot(
295 gfx::Point(target_origin.x() - original_origin.x(), 292 gfx::Point(target_origin.x() - original_origin.x(),
296 target_origin.y() - original_origin.y()), 293 target_origin.y() - original_origin.y()),
297 transform); 294 transform);
298 window->SetTransform(new_transform); 295 window->SetTransform(new_transform);
299 } 296 }
300 } 297 }
301 298
302 void ScopedTransformOverviewWindow::SetOpacity(float opacity) { 299 void ScopedTransformOverviewWindow::SetOpacity(float opacity) {
303 for (const auto& window : GetTransientTreeIterator(window_)) { 300 for (const auto& window : GetTransientTreeIterator(window_)) {
304 window->SetOpacity(opacity); 301 window->SetOpacity(opacity);
305 } 302 }
306 } 303 }
307 304
308 void ScopedTransformOverviewWindow::Close() { 305 void ScopedTransformOverviewWindow::Close() {
309 GetTransientRoot(window_)->CloseWidget(); 306 GetTransientRoot(window_)->CloseWidget();
310 } 307 }
311 308
312 void ScopedTransformOverviewWindow::PrepareForOverview() { 309 void ScopedTransformOverviewWindow::PrepareForOverview() {
313 DCHECK(!overview_started_); 310 DCHECK(!overview_started_);
314 overview_started_ = true; 311 overview_started_ = true;
315 window_->GetWindowState()->set_ignored_by_shelf(true); 312 window_->GetWindowState()->set_ignored_by_shelf(true);
316 ShowWindowIfMinimized(); 313 ShowWindowIfMinimized();
317 } 314 }
318 315
319 } // namespace ash 316 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698