OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/session_state_animator.h" | 5 #include "ash/wm/session_state_animator.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/shell_window_ids.h" | 8 #include "ash/shell_window_ids.h" |
9 #include "ash/wm/workspace/workspace_animations.h" | 9 #include "ash/wm/workspace/workspace_animations.h" |
10 #include "ui/aura/client/aura_constants.h" | 10 #include "ui/aura/client/aura_constants.h" |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 virtual void OnLayerAnimationScheduled(ui::LayerAnimationSequence* seq) | 238 virtual void OnLayerAnimationScheduled(ui::LayerAnimationSequence* seq) |
239 OVERRIDE {} | 239 OVERRIDE {} |
240 | 240 |
241 base::Callback<void(void)> callback_; | 241 base::Callback<void(void)> callback_; |
242 | 242 |
243 DISALLOW_COPY_AND_ASSIGN(CallbackAnimationObserver); | 243 DISALLOW_COPY_AND_ASSIGN(CallbackAnimationObserver); |
244 }; | 244 }; |
245 | 245 |
246 } // namespace | 246 } // namespace |
247 | 247 |
248 void SessionStateAnimator::TestApi::TriggerHideBlackLayerTimeout() { | |
249 animator_->DropBlackLayer(); | |
250 animator_->hide_black_layer_timer_.Stop(); | |
251 } | |
252 | |
253 bool SessionStateAnimator::TestApi::ContainersAreAnimated( | 248 bool SessionStateAnimator::TestApi::ContainersAreAnimated( |
254 int container_mask, AnimationType type) const { | 249 int container_mask, AnimationType type) const { |
255 aura::Window::Windows containers; | 250 aura::Window::Windows containers; |
256 animator_->GetContainers(container_mask, &containers); | 251 animator_->GetContainers(container_mask, &containers); |
257 for (aura::Window::Windows::const_iterator it = containers.begin(); | 252 for (aura::Window::Windows::const_iterator it = containers.begin(); |
258 it != containers.end(); ++it) { | 253 it != containers.end(); ++it) { |
259 aura::Window* window = *it; | 254 aura::Window* window = *it; |
260 ui::Layer* layer = window->layer(); | 255 ui::Layer* layer = window->layer(); |
261 | 256 |
262 switch (type) { | 257 switch (type) { |
(...skipping 23 matching lines...) Expand all Loading... |
286 return false; | 281 return false; |
287 break; | 282 break; |
288 default: | 283 default: |
289 NOTREACHED() << "Unhandled animation type " << type; | 284 NOTREACHED() << "Unhandled animation type " << type; |
290 return false; | 285 return false; |
291 } | 286 } |
292 } | 287 } |
293 return true; | 288 return true; |
294 } | 289 } |
295 | 290 |
296 bool SessionStateAnimator::TestApi::BlackLayerIsVisible() const { | |
297 return animator_->black_layer_.get() && | |
298 animator_->black_layer_->visible(); | |
299 } | |
300 | |
301 gfx::Rect SessionStateAnimator::TestApi::GetBlackLayerBounds() const { | |
302 ui::Layer* layer = animator_->black_layer_.get(); | |
303 return layer ? layer->bounds() : gfx::Rect(); | |
304 } | |
305 | |
306 const int SessionStateAnimator::kAllLockScreenContainersMask = | 291 const int SessionStateAnimator::kAllLockScreenContainersMask = |
307 SessionStateAnimator::LOCK_SCREEN_BACKGROUND | | 292 SessionStateAnimator::LOCK_SCREEN_BACKGROUND | |
308 SessionStateAnimator::LOCK_SCREEN_CONTAINERS | | 293 SessionStateAnimator::LOCK_SCREEN_CONTAINERS | |
309 SessionStateAnimator::LOCK_SCREEN_RELATED_CONTAINERS; | 294 SessionStateAnimator::LOCK_SCREEN_RELATED_CONTAINERS; |
310 | 295 |
311 const int SessionStateAnimator::kAllContainersMask = | 296 const int SessionStateAnimator::kAllContainersMask = |
312 SessionStateAnimator::kAllLockScreenContainersMask | | 297 SessionStateAnimator::kAllLockScreenContainersMask | |
313 SessionStateAnimator::DESKTOP_BACKGROUND | | 298 SessionStateAnimator::DESKTOP_BACKGROUND | |
314 SessionStateAnimator::LAUNCHER | | 299 SessionStateAnimator::LAUNCHER | |
315 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS; | 300 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS; |
316 | 301 |
317 SessionStateAnimator::SessionStateAnimator() { | 302 SessionStateAnimator::SessionStateAnimator() { |
318 Shell::GetPrimaryRootWindow()->AddRootWindowObserver(this); | |
319 } | 303 } |
320 | 304 |
321 SessionStateAnimator::~SessionStateAnimator() { | 305 SessionStateAnimator::~SessionStateAnimator() { |
322 Shell::GetPrimaryRootWindow()->RemoveRootWindowObserver(this); | |
323 } | 306 } |
324 | 307 |
325 // Fills |containers| with the containers described by |container_mask|. | 308 // Fills |containers| with the containers described by |container_mask|. |
326 void SessionStateAnimator::GetContainers(int container_mask, | 309 void SessionStateAnimator::GetContainers(int container_mask, |
327 aura::Window::Windows* containers) { | 310 aura::Window::Windows* containers) { |
328 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 311 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
329 containers->clear(); | 312 containers->clear(); |
330 | 313 |
331 if (container_mask & DESKTOP_BACKGROUND) { | 314 if (container_mask & DESKTOP_BACKGROUND) { |
332 containers->push_back(Shell::GetContainer( | 315 containers->push_back(Shell::GetContainer( |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 case ANIMATION_FULL_FADE_IN: | 430 case ANIMATION_FULL_FADE_IN: |
448 StartPartialFadeAnimation(window, 1.0, | 431 StartPartialFadeAnimation(window, 1.0, |
449 base::TimeDelta::FromMilliseconds(kFastCloseAnimMs), | 432 base::TimeDelta::FromMilliseconds(kFastCloseAnimMs), |
450 observer); | 433 observer); |
451 break; | 434 break; |
452 default: | 435 default: |
453 NOTREACHED() << "Unhandled animation type " << type; | 436 NOTREACHED() << "Unhandled animation type " << type; |
454 } | 437 } |
455 } | 438 } |
456 | 439 |
457 void SessionStateAnimator::OnRootWindowResized(const aura::RootWindow* root, | |
458 const gfx::Size& new_size) { | |
459 if (black_layer_.get()) | |
460 black_layer_->SetBounds(gfx::Rect(root->bounds().size())); | |
461 } | |
462 | |
463 void SessionStateAnimator::ShowBlackLayer() { | |
464 if (hide_black_layer_timer_.IsRunning()) | |
465 hide_black_layer_timer_.Stop(); | |
466 | |
467 if (!black_layer_.get()) { | |
468 black_layer_.reset(new ui::Layer(ui::LAYER_SOLID_COLOR)); | |
469 black_layer_->SetColor(SK_ColorBLACK); | |
470 | |
471 ui::Layer* root_layer = Shell::GetPrimaryRootWindow()->layer(); | |
472 black_layer_->SetBounds(root_layer->bounds()); | |
473 root_layer->Add(black_layer_.get()); | |
474 root_layer->StackAtBottom(black_layer_.get()); | |
475 } | |
476 black_layer_->SetVisible(true); | |
477 } | |
478 | |
479 void SessionStateAnimator::DropBlackLayer() { | |
480 black_layer_.reset(); | |
481 } | |
482 | |
483 void SessionStateAnimator::ScheduleDropBlackLayer() { | |
484 hide_black_layer_timer_.Stop(); | |
485 hide_black_layer_timer_.Start( | |
486 FROM_HERE, | |
487 base::TimeDelta::FromMilliseconds(kUndoSlowCloseAnimMs), | |
488 this, &SessionStateAnimator::DropBlackLayer); | |
489 } | |
490 | |
491 void SessionStateAnimator::CreateForeground() { | 440 void SessionStateAnimator::CreateForeground() { |
492 if (foreground_.get()) | 441 if (foreground_.get()) |
493 return; | 442 return; |
494 aura::Window* window = Shell::GetContainer( | 443 aura::Window* window = Shell::GetContainer( |
495 Shell::GetPrimaryRootWindow(), | 444 Shell::GetPrimaryRootWindow(), |
496 internal::kShellWindowId_PowerButtonAnimationContainer); | 445 internal::kShellWindowId_PowerButtonAnimationContainer); |
497 HideWindow(window, NULL); | 446 HideWindow(window, NULL); |
498 foreground_.reset( | 447 foreground_.reset( |
499 new ColoredWindowController(window, "SessionStateAnimatorForeground")); | 448 new ColoredWindowController(window, "SessionStateAnimatorForeground")); |
500 foreground_->SetColor(SK_ColorWHITE); | 449 foreground_->SetColor(SK_ColorWHITE); |
501 foreground_->GetWidget()->Show(); | 450 foreground_->GetWidget()->Show(); |
502 } | 451 } |
503 | 452 |
504 void SessionStateAnimator::DropForeground() { | 453 void SessionStateAnimator::DropForeground() { |
505 foreground_.reset(); | 454 foreground_.reset(); |
506 } | 455 } |
507 | 456 |
508 } // namespace internal | 457 } // namespace internal |
509 } // namespace ash | 458 } // namespace ash |
OLD | NEW |