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

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

Issue 844763006: Change overview mode to so that docked panel windows are not grouped together. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed stale pointer in ScopedTransformOverviewWindow. Created 5 years, 11 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/screen_util.h" 10 #include "ash/screen_util.h"
11 #include "ash/shell_window_ids.h" 11 #include "ash/shell_window_ids.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_window_copy.h"
14 #include "ash/wm/overview/window_selector_item.h" 13 #include "ash/wm/overview/window_selector_item.h"
15 #include "ash/wm/window_state.h" 14 #include "ash/wm/window_state.h"
16 #include "ash/wm/window_util.h" 15 #include "ash/wm/window_util.h"
17 #include "base/macros.h" 16 #include "base/macros.h"
18 #include "ui/aura/client/aura_constants.h" 17 #include "ui/aura/client/aura_constants.h"
19 #include "ui/aura/client/screen_position_client.h" 18 #include "ui/aura/client/screen_position_client.h"
20 #include "ui/aura/window.h" 19 #include "ui/aura/window.h"
21 #include "ui/compositor/scoped_layer_animation_settings.h" 20 #include "ui/compositor/scoped_layer_animation_settings.h"
22 #include "ui/gfx/animation/tween.h" 21 #include "ui/gfx/animation/tween.h"
23 #include "ui/gfx/transform_util.h" 22 #include "ui/gfx/transform_util.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 aura::Window* window) 167 aura::Window* window)
169 : window_(window), 168 : window_(window),
170 activate_button_(new TransparentActivateWindowButton( 169 activate_button_(new TransparentActivateWindowButton(
171 window_->GetRootWindow(), this)), 170 window_->GetRootWindow(), this)),
172 minimized_(window->GetProperty(aura::client::kShowStateKey) == 171 minimized_(window->GetProperty(aura::client::kShowStateKey) ==
173 ui::SHOW_STATE_MINIMIZED), 172 ui::SHOW_STATE_MINIMIZED),
174 ignored_by_shelf_(wm::GetWindowState(window)->ignored_by_shelf()), 173 ignored_by_shelf_(wm::GetWindowState(window)->ignored_by_shelf()),
175 overview_started_(false), 174 overview_started_(false),
176 original_transform_(window->layer()->GetTargetTransform()), 175 original_transform_(window->layer()->GetTargetTransform()),
177 original_opacity_(window->layer()->GetTargetOpacity()) { 176 original_opacity_(window->layer()->GetTargetOpacity()) {
177 DCHECK(window_);
178 } 178 }
179 179
180 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() { 180 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {
181 if (window_) { 181 }
182 ScopedAnimationSettings animation_settings_list;
183 BeginScopedAnimation(
184 OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
185 &animation_settings_list);
186 SetTransform(window()->GetRootWindow(), original_transform_);
187 182
188 ScopedOverviewAnimationSettings animation_settings( 183 void ScopedTransformOverviewWindow::RestoreWindow() {
189 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS, 184 ScopedAnimationSettings animation_settings_list;
190 window_); 185 BeginScopedAnimation(
191 gfx::Transform transform; 186 OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
192 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) != 187 &animation_settings_list);
193 ui::SHOW_STATE_MINIMIZED) { 188 SetTransform(window()->GetRootWindow(), original_transform_);
194 // Setting opacity 0 and visible false ensures that the property change 189
195 // to SHOW_STATE_MINIMIZED will not animate the window from its original 190 ScopedOverviewAnimationSettings animation_settings(
196 // bounds to the minimized position. 191 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS,
197 // Hiding the window needs to be done before the target opacity is 0, 192 window_);
198 // otherwise the layer's visibility will not be updated 193 gfx::Transform transform;
199 // (See VisibilityController::UpdateLayerVisibility). 194 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) !=
200 window_->Hide(); 195 ui::SHOW_STATE_MINIMIZED) {
201 window_->layer()->SetOpacity(0); 196 // Setting opacity 0 and visible false ensures that the property change
202 window_->SetProperty(aura::client::kShowStateKey, 197 // to SHOW_STATE_MINIMIZED will not animate the window from its original
203 ui::SHOW_STATE_MINIMIZED); 198 // bounds to the minimized position.
204 } 199 // Hiding the window needs to be done before the target opacity is 0,
205 wm::GetWindowState(window_)->set_ignored_by_shelf(ignored_by_shelf_); 200 // otherwise the layer's visibility will not be updated
206 SetOpacity(original_opacity_); 201 // (See VisibilityController::UpdateLayerVisibility).
202 window_->Hide();
203 window_->layer()->SetOpacity(0);
204 window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED);
207 } 205 }
206 wm::GetWindowState(window_)->set_ignored_by_shelf(ignored_by_shelf_);
207 SetOpacity(original_opacity_);
208 } 208 }
209 209
210 void ScopedTransformOverviewWindow::BeginScopedAnimation( 210 void ScopedTransformOverviewWindow::BeginScopedAnimation(
211 OverviewAnimationType animation_type, 211 OverviewAnimationType animation_type,
212 ScopedAnimationSettings* animation_settings) { 212 ScopedAnimationSettings* animation_settings) {
213 for (const auto& window : GetTransientTreeIterator(window_)) { 213 for (const auto& window : GetTransientTreeIterator(window_)) {
214 animation_settings->push_back( 214 animation_settings->push_back(
215 new ScopedOverviewAnimationSettings(animation_type, window)); 215 new ScopedOverviewAnimationSettings(animation_type, window));
216 } 216 }
217 } 217 }
218 218
219 bool ScopedTransformOverviewWindow::Contains(const aura::Window* target) const { 219 bool ScopedTransformOverviewWindow::Contains(const aura::Window* target) const {
220 for (const auto& window : GetTransientTreeIterator(window_)) { 220 for (const auto& window : GetTransientTreeIterator(window_)) {
221 if (window->Contains(target)) 221 if (window->Contains(target))
222 return true; 222 return true;
223 } 223 }
224 return false; 224 return false;
225 } 225 }
226 226
227 gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const { 227 gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const {
228 gfx::Rect bounds; 228 gfx::Rect bounds;
229 for (const auto& window : GetTransientTreeIterator(window_)) { 229 for (const auto& window : GetTransientTreeIterator(window_)) {
230 bounds.Union(ScreenUtil::ConvertRectToScreen(window->parent(), 230 bounds.Union(ScreenUtil::ConvertRectToScreen(window->parent(),
231 window->GetTargetBounds())); 231 window->GetTargetBounds()));
232 } 232 }
233 return bounds; 233 return bounds;
234 } 234 }
235 235
236 void ScopedTransformOverviewWindow::RestoreWindow() { 236 void ScopedTransformOverviewWindow::ShowWindowIfMinimized() {
237 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) == 237 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) ==
238 ui::SHOW_STATE_MINIMIZED) { 238 ui::SHOW_STATE_MINIMIZED) {
239 window_->Show(); 239 window_->Show();
240 } 240 }
241 } 241 }
242 242
243 void ScopedTransformOverviewWindow::RestoreWindowOnExit() { 243 void ScopedTransformOverviewWindow::ShowWindowOnExit() {
244 minimized_ = false; 244 if (minimized_) {
245 original_transform_ = gfx::Transform(); 245 minimized_ = false;
246 original_opacity_ = kRestoreWindowOpacity; 246 original_transform_ = gfx::Transform();
247 original_opacity_ = kRestoreWindowOpacity;
248 }
247 } 249 }
248 250
249 void ScopedTransformOverviewWindow::OnWindowDestroyed() { 251 void ScopedTransformOverviewWindow::OnWindowDestroyed() {
250 window_ = nullptr; 252 window_ = nullptr;
251 } 253 }
252 254
253 gfx::Rect ScopedTransformOverviewWindow::ShrinkRectToFitPreservingAspectRatio( 255 gfx::Rect ScopedTransformOverviewWindow::ShrinkRectToFitPreservingAspectRatio(
254 const gfx::Rect& rect, 256 const gfx::Rect& rect,
255 const gfx::Rect& bounds) { 257 const gfx::Rect& bounds) {
256 DCHECK(!rect.IsEmpty()); 258 DCHECK(!rect.IsEmpty());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 310
309 void ScopedTransformOverviewWindow::Close() { 311 void ScopedTransformOverviewWindow::Close() {
310 aura::Window* window = GetTransientRoot(window_); 312 aura::Window* window = GetTransientRoot(window_);
311 views::Widget::GetWidgetForNativeView(window)->Close(); 313 views::Widget::GetWidgetForNativeView(window)->Close();
312 } 314 }
313 315
314 void ScopedTransformOverviewWindow::PrepareForOverview() { 316 void ScopedTransformOverviewWindow::PrepareForOverview() {
315 DCHECK(!overview_started_); 317 DCHECK(!overview_started_);
316 overview_started_ = true; 318 overview_started_ = true;
317 wm::GetWindowState(window_)->set_ignored_by_shelf(true); 319 wm::GetWindowState(window_)->set_ignored_by_shelf(true);
318 RestoreWindow(); 320 ShowWindowIfMinimized();
319 } 321 }
320 322
321 } // namespace ash 323 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/overview/scoped_transform_overview_window.h ('k') | ash/wm/overview/scoped_window_copy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698