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 "chrome/browser/ui/views/immersive_mode_controller.h" | 5 #include "chrome/browser/ui/views/immersive_mode_controller.h" |
6 | 6 |
7 #include "chrome/browser/ui/views/frame/browser_frame.h" | 7 #include "chrome/browser/ui/views/frame/browser_frame.h" |
8 #include "chrome/browser/ui/views/frame/browser_view.h" | 8 #include "chrome/browser/ui/views/frame/browser_view.h" |
9 #include "chrome/browser/ui/views/frame/contents_container.h" | 9 #include "chrome/browser/ui/views/frame/contents_container.h" |
10 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 10 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 | 303 |
304 #if defined(USE_ASH) | 304 #if defined(USE_ASH) |
305 native_window_->SetProperty(ash::internal::kImmersiveModeKey, enabled_); | 305 native_window_->SetProperty(ash::internal::kImmersiveModeKey, enabled_); |
306 // Ash on Windows may not have a shell. | 306 // Ash on Windows may not have a shell. |
307 if (ash::Shell::HasInstance()) { | 307 if (ash::Shell::HasInstance()) { |
308 // Shelf auto-hides in immersive mode. | 308 // Shelf auto-hides in immersive mode. |
309 ash::Shell::GetInstance()->UpdateShelfVisibility(); | 309 ash::Shell::GetInstance()->UpdateShelfVisibility(); |
310 } | 310 } |
311 #endif | 311 #endif |
312 | 312 |
| 313 // Ensure window caption buttons are shown/hidden appropriately. |
| 314 browser_view_->frame()->non_client_view()->frame_view()-> |
| 315 ResetWindowControls(); |
| 316 |
313 // Always ensure tab strip is in correct state. | 317 // Always ensure tab strip is in correct state. |
314 browser_view_->tabstrip()->SetImmersiveStyle(enabled_); | 318 browser_view_->tabstrip()->SetImmersiveStyle(enabled_); |
315 browser_view_->Layout(); | 319 browser_view_->Layout(); |
316 | 320 |
317 EnableWindowObservers(enabled_); | 321 EnableWindowObservers(enabled_); |
318 } | 322 } |
319 | 323 |
320 views::View* ImmersiveModeController::reveal_view() { | 324 views::View* ImmersiveModeController::reveal_view() { |
321 return reveal_view_.get(); | 325 return reveal_view_.get(); |
322 } | 326 } |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 // for window restore, which is not provided by views Widget. | 405 // for window restore, which is not provided by views Widget. |
402 window_observer_.reset(enable ? new WindowObserver(this) : NULL); | 406 window_observer_.reset(enable ? new WindowObserver(this) : NULL); |
403 #endif // defined(USE_AURA) | 407 #endif // defined(USE_AURA) |
404 } | 408 } |
405 | 409 |
406 void ImmersiveModeController::StartReveal() { | 410 void ImmersiveModeController::StartReveal() { |
407 if (revealed_) | 411 if (revealed_) |
408 return; | 412 return; |
409 revealed_ = true; | 413 revealed_ = true; |
410 | 414 |
| 415 // Reveal shows the window caption buttons. |
| 416 browser_view_->frame()->non_client_view()->frame_view()-> |
| 417 ResetWindowControls(); |
| 418 |
411 // Recompute the bounds of the views when painted normally. | 419 // Recompute the bounds of the views when painted normally. |
412 browser_view_->tabstrip()->SetImmersiveStyle(false); | 420 browser_view_->tabstrip()->SetImmersiveStyle(false); |
413 browser_view_->Layout(); | 421 browser_view_->Layout(); |
414 | 422 |
415 // Place tabstrip, toolbar, and bookmarks bar in a new view at the end of | 423 // Place tabstrip, toolbar, and bookmarks bar in a new view at the end of |
416 // the BrowserView hierarchy so it paints over the web contents. | 424 // the BrowserView hierarchy so it paints over the web contents. |
417 reveal_view_.reset(new RevealView(this, browser_view_)); | 425 reveal_view_.reset(new RevealView(this, browser_view_)); |
418 browser_view_->AddChildView(reveal_view_.get()); | 426 browser_view_->AddChildView(reveal_view_.get()); |
419 reveal_view_->AcquireTopViews(); | 427 reveal_view_->AcquireTopViews(); |
420 | 428 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 if (animate == ANIMATE_YES) { | 469 if (animate == ANIMATE_YES) { |
462 // Animation resets the reveal view when complete. | 470 // Animation resets the reveal view when complete. |
463 AnimateHideRevealView(); | 471 AnimateHideRevealView(); |
464 } else { | 472 } else { |
465 // Deleting the reveal view also removes it from its parent. | 473 // Deleting the reveal view also removes it from its parent. |
466 reveal_view_.reset(); | 474 reveal_view_.reset(); |
467 } | 475 } |
468 } | 476 } |
469 | 477 |
470 if (layout == LAYOUT_YES) { | 478 if (layout == LAYOUT_YES) { |
| 479 // Ending reveal hides the window caption buttons. |
| 480 browser_view_->frame()->non_client_view()->frame_view()-> |
| 481 ResetWindowControls(); |
| 482 |
471 browser_view_->tabstrip()->SetImmersiveStyle(enabled_); | 483 browser_view_->tabstrip()->SetImmersiveStyle(enabled_); |
472 browser_view_->Layout(); | 484 browser_view_->Layout(); |
473 } | 485 } |
474 } | 486 } |
475 | 487 |
476 void ImmersiveModeController::AnimateHideRevealView() { | 488 void ImmersiveModeController::AnimateHideRevealView() { |
477 ui::Layer* layer = reveal_view_->layer(); | 489 ui::Layer* layer = reveal_view_->layer(); |
478 // Stop any show animation in progress. | 490 // Stop any show animation in progress. |
479 // TODO(jamescook): Switch to AbortAllAnimations() when crrev.com/11571027 | 491 // TODO(jamescook): Switch to AbortAllAnimations() when crrev.com/11571027 |
480 // lands, which will avoid a "pop" if a hide is triggered mid-show. | 492 // lands, which will avoid a "pop" if a hide is triggered mid-show. |
481 layer->GetAnimator()->StopAnimating(); | 493 layer->GetAnimator()->StopAnimating(); |
482 // Detach the layer from its delegate to stop updating it. This prevents | 494 // Detach the layer from its delegate to stop updating it. This prevents |
483 // graphical glitches due to hover events causing repaints during the hide. | 495 // graphical glitches due to hover events causing repaints during the hide. |
484 layer->set_delegate(NULL); | 496 layer->set_delegate(NULL); |
485 | 497 |
486 ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); | 498 ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); |
487 settings.SetTweenType(ui::Tween::EASE_OUT); | 499 settings.SetTweenType(ui::Tween::EASE_OUT); |
488 settings.SetTransitionDuration( | 500 settings.SetTransitionDuration( |
489 base::TimeDelta::FromMilliseconds(kRevealAnimationDurationMs)); | 501 base::TimeDelta::FromMilliseconds(kRevealAnimationDurationMs)); |
490 settings.AddObserver(this); // Resets |reveal_view_| on completion. | 502 settings.AddObserver(this); // Resets |reveal_view_| on completion. |
491 gfx::Transform transform; | 503 gfx::Transform transform; |
492 transform.Translate(0, -layer->bounds().height()); | 504 transform.Translate(0, -layer->bounds().height()); |
493 layer->SetTransform(transform); | 505 layer->SetTransform(transform); |
494 } | 506 } |
495 | 507 |
496 void ImmersiveModeController::OnHideAnimationCompleted() { | 508 void ImmersiveModeController::OnHideAnimationCompleted() { |
497 reveal_view_.reset(); // Also removes from parent. | 509 reveal_view_.reset(); // Also removes from parent. |
498 } | 510 } |
OLD | NEW |