Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "athena/home/public/home_card.h" | 5 #include "athena/home/public/home_card.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "athena/common/container_priorities.h" | 10 #include "athena/common/container_priorities.h" |
| 11 #include "athena/home/app_list_view_delegate.h" | 11 #include "athena/home/app_list_view_delegate.h" |
| 12 #include "athena/home/athena_start_page_view.h" | 12 #include "athena/home/athena_start_page_view.h" |
| 13 #include "athena/home/minimized_home.h" | 13 #include "athena/home/minimized_home.h" |
| 14 #include "athena/home/public/app_model_builder.h" | 14 #include "athena/home/public/app_model_builder.h" |
| 15 #include "athena/input/public/accelerator_manager.h" | 15 #include "athena/input/public/accelerator_manager.h" |
| 16 #include "athena/screen/public/screen_manager.h" | 16 #include "athena/screen/public/screen_manager.h" |
| 17 #include "athena/wm/public/window_manager.h" | 17 #include "athena/wm/public/window_manager.h" |
| 18 #include "athena/wm/public/window_manager_observer.h" | 18 #include "athena/wm/public/window_manager_observer.h" |
| 19 #include "base/bind.h" | 19 #include "base/bind.h" |
| 20 #include "ui/app_list/search_provider.h" | 20 #include "ui/app_list/search_provider.h" |
| 21 #include "ui/app_list/views/app_list_main_view.h" | 21 #include "ui/app_list/views/app_list_main_view.h" |
| 22 #include "ui/app_list/views/contents_view.h" | 22 #include "ui/app_list/views/contents_view.h" |
| 23 #include "ui/aura/layout_manager.h" | 23 #include "ui/aura/layout_manager.h" |
| 24 #include "ui/aura/window.h" | 24 #include "ui/aura/window.h" |
| 25 #include "ui/compositor/layer_animation_observer.h" | |
| 26 #include "ui/compositor/scoped_layer_animation_settings.h" | |
| 25 #include "ui/views/background.h" | 27 #include "ui/views/background.h" |
| 26 #include "ui/views/layout/box_layout.h" | 28 #include "ui/views/layout/box_layout.h" |
| 27 #include "ui/views/widget/widget.h" | 29 #include "ui/views/widget/widget.h" |
| 28 #include "ui/views/widget/widget_delegate.h" | 30 #include "ui/views/widget/widget_delegate.h" |
| 29 #include "ui/wm/core/shadow_types.h" | 31 #include "ui/wm/core/shadow_types.h" |
| 30 #include "ui/wm/core/visibility_controller.h" | 32 #include "ui/wm/core/visibility_controller.h" |
| 31 #include "ui/wm/core/window_animations.h" | 33 #include "ui/wm/core/window_animations.h" |
| 32 #include "ui/wm/public/activation_change_observer.h" | 34 #include "ui/wm/public/activation_change_observer.h" |
| 33 #include "ui/wm/public/activation_client.h" | 35 #include "ui/wm/public/activation_client.h" |
| 34 | 36 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 81 | 83 |
| 82 virtual ~HomeCardLayoutManager() {} | 84 virtual ~HomeCardLayoutManager() {} |
| 83 | 85 |
| 84 void Layout() { | 86 void Layout() { |
| 85 aura::Window* home_card = delegate_->GetNativeWindow(); | 87 aura::Window* home_card = delegate_->GetNativeWindow(); |
| 86 // |home_card| could be detached from the root window (e.g. when it is being | 88 // |home_card| could be detached from the root window (e.g. when it is being |
| 87 // destroyed). | 89 // destroyed). |
| 88 if (!home_card || !home_card->GetRootWindow()) | 90 if (!home_card || !home_card->GetRootWindow()) |
| 89 return; | 91 return; |
| 90 | 92 |
| 91 SetChildBoundsDirect(home_card, GetBoundsForState( | 93 { |
| 92 home_card->GetRootWindow()->bounds(), delegate_->GetState())); | 94 ui::ScopedLayerAnimationSettings settings( |
| 95 home_card->layer()->GetAnimator()); | |
| 96 settings.SetTweenType(gfx::Tween::EASE_IN_OUT); | |
| 97 SetChildBoundsDirect(home_card, GetBoundsForState( | |
| 98 home_card->GetRootWindow()->bounds(), delegate_->GetState())); | |
| 99 } | |
| 93 } | 100 } |
| 94 | 101 |
| 95 private: | 102 private: |
| 96 // aura::LayoutManager: | 103 // aura::LayoutManager: |
| 97 virtual void OnWindowResized() OVERRIDE { Layout(); } | 104 virtual void OnWindowResized() OVERRIDE { Layout(); } |
| 98 virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE { Layout(); } | 105 virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE { Layout(); } |
| 99 virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE {} | 106 virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE {} |
| 100 virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE { | 107 virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE { |
| 101 Layout(); | 108 Layout(); |
| 102 } | 109 } |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 316 app_list::ContentsView* contents_view = main_view_->contents_view(); | 323 app_list::ContentsView* contents_view = main_view_->contents_view(); |
| 317 contents_view->SetActivePage(contents_view->GetPageIndexForNamedPage( | 324 contents_view->SetActivePage(contents_view->GetPageIndexForNamedPage( |
| 318 app_list::ContentsView::NAMED_PAGE_START)); | 325 app_list::ContentsView::NAMED_PAGE_START)); |
| 319 } | 326 } |
| 320 wm::SetShadowType(GetWidget()->GetNativeView(), | 327 wm::SetShadowType(GetWidget()->GetNativeView(), |
| 321 state == HomeCard::VISIBLE_MINIMIZED ? | 328 state == HomeCard::VISIBLE_MINIMIZED ? |
| 322 wm::SHADOW_TYPE_NONE : | 329 wm::SHADOW_TYPE_NONE : |
| 323 wm::SHADOW_TYPE_RECTANGULAR); | 330 wm::SHADOW_TYPE_RECTANGULAR); |
| 324 } | 331 } |
| 325 | 332 |
| 333 void SetStateWithAnimation(HomeCard::State from_state, | |
| 334 HomeCard::State to_state) { | |
| 335 if ((from_state == HomeCard::VISIBLE_MINIMIZED && | |
| 336 to_state == HomeCard::VISIBLE_BOTTOM) || | |
| 337 (from_state == HomeCard::VISIBLE_BOTTOM && | |
| 338 to_state == HomeCard::VISIBLE_MINIMIZED)) { | |
| 339 minimized_view_->SetVisible(true); | |
| 340 bottom_view_->SetVisible(true); | |
| 341 { | |
| 342 ui::ScopedLayerAnimationSettings settings( | |
| 343 minimized_view_->layer()->GetAnimator()); | |
| 344 settings.SetTweenType(gfx::Tween::EASE_IN_OUT); | |
| 345 settings.SetTransitionDuration(base::TimeDelta::FromSeconds(5)); | |
|
sadrul
2014/08/15 15:36:21
That's ... pretty long! Was for debugging, perhaps
Jun Mukai
2014/08/15 16:35:07
Ugh, removed. That is for debugging. Thanks for ca
| |
| 346 settings.AddObserver(new AnimationObserver(this, to_state)); | |
| 347 minimized_view_->layer()->SetOpacity( | |
| 348 (to_state == HomeCard::VISIBLE_MINIMIZED) ? 1.0f : 0.0f); | |
|
sadrul
2014/08/15 15:36:21
Do you need to set the opacity to 0/1 beforehand t
Jun Mukai
2014/08/15 16:35:08
Not sure what you mean, but if you meant the patte
sadrul
2014/08/15 16:37:26
Sounds good.
| |
| 349 } | |
| 350 } else { | |
| 351 // TODO(mukai): Take care of other transition. | |
| 352 SetState(to_state); | |
| 353 } | |
| 354 } | |
| 355 | |
| 326 void ClearGesture() { | 356 void ClearGesture() { |
| 327 gesture_manager_.reset(); | 357 gesture_manager_.reset(); |
| 328 } | 358 } |
| 329 | 359 |
| 330 // views::View: | 360 // views::View: |
| 331 virtual void Layout() OVERRIDE { | 361 virtual void Layout() OVERRIDE { |
| 332 for (int i = 0; i < child_count(); ++i) { | 362 for (int i = 0; i < child_count(); ++i) { |
| 333 views::View* child = child_at(i); | 363 views::View* child = child_at(i); |
| 334 if (child->visible()) { | 364 if (child->visible()) { |
| 335 if (child == minimized_view_) { | 365 if (child == minimized_view_) { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 349 gesture_manager_.reset(new HomeCardGestureManager( | 379 gesture_manager_.reset(new HomeCardGestureManager( |
| 350 gesture_delegate_, | 380 gesture_delegate_, |
| 351 GetWidget()->GetNativeWindow()->GetRootWindow()->bounds())); | 381 GetWidget()->GetNativeWindow()->GetRootWindow()->bounds())); |
| 352 } | 382 } |
| 353 | 383 |
| 354 if (gesture_manager_) | 384 if (gesture_manager_) |
| 355 gesture_manager_->ProcessGestureEvent(event); | 385 gesture_manager_->ProcessGestureEvent(event); |
| 356 } | 386 } |
| 357 | 387 |
| 358 private: | 388 private: |
| 389 class AnimationObserver : public ui::ImplicitAnimationObserver { | |
|
sadrul
2014/08/15 15:36:22
You should use ui::ClosureAnimationObserver!
Jun Mukai
2014/08/15 16:35:08
Done!
| |
| 390 public: | |
| 391 AnimationObserver(HomeCardView* view, HomeCard::State target_state) | |
| 392 : view_(view), | |
| 393 target_state_(target_state) {} | |
| 394 virtual ~AnimationObserver() {} | |
| 395 | |
| 396 private: | |
| 397 // ui::ImplicitAnimationObserver: | |
| 398 virtual void OnImplicitAnimationsCompleted() OVERRIDE { | |
| 399 view_->SetState(target_state_); | |
| 400 delete this; | |
| 401 } | |
| 402 | |
| 403 HomeCardView* view_; | |
| 404 HomeCard::State target_state_; | |
| 405 | |
| 406 DISALLOW_COPY_AND_ASSIGN(AnimationObserver); | |
| 407 }; | |
| 408 | |
| 359 virtual views::View* GetContentsView() OVERRIDE { | 409 virtual views::View* GetContentsView() OVERRIDE { |
| 360 return this; | 410 return this; |
| 361 } | 411 } |
| 362 | 412 |
| 363 app_list::AppListMainView* main_view_; | 413 app_list::AppListMainView* main_view_; |
| 364 views::View* bottom_view_; | 414 views::View* bottom_view_; |
| 365 views::View* minimized_view_; | 415 views::View* minimized_view_; |
| 366 scoped_ptr<HomeCardGestureManager> gesture_manager_; | 416 scoped_ptr<HomeCardGestureManager> gesture_manager_; |
| 367 HomeCardGestureManager::Delegate* gesture_delegate_; | 417 HomeCardGestureManager::Delegate* gesture_delegate_; |
| 368 | 418 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 499 AcceleratorManager::Get()->RegisterAccelerators( | 549 AcceleratorManager::Get()->RegisterAccelerators( |
| 500 accelerator_data, arraysize(accelerator_data), this); | 550 accelerator_data, arraysize(accelerator_data), this); |
| 501 } | 551 } |
| 502 | 552 |
| 503 void HomeCardImpl::SetState(HomeCard::State state) { | 553 void HomeCardImpl::SetState(HomeCard::State state) { |
| 504 if (state_ == state) | 554 if (state_ == state) |
| 505 return; | 555 return; |
| 506 | 556 |
| 507 // Update |state_| before changing the visibility of the widgets, so that | 557 // Update |state_| before changing the visibility of the widgets, so that |
| 508 // LayoutManager callbacks get the correct state. | 558 // LayoutManager callbacks get the correct state. |
| 559 HomeCard::State old_state = state_; | |
| 509 state_ = state; | 560 state_ = state; |
| 510 original_state_ = state; | 561 original_state_ = state; |
| 511 if (state_ == HIDDEN) { | 562 if (state_ == HIDDEN) { |
| 512 home_card_widget_->Hide(); | 563 home_card_widget_->Hide(); |
| 513 } else { | 564 } else { |
| 514 if (state_ == VISIBLE_CENTERED) | 565 if (state_ == VISIBLE_CENTERED) |
| 515 home_card_widget_->Show(); | 566 home_card_widget_->Show(); |
| 516 else | 567 else |
| 517 home_card_widget_->ShowInactive(); | 568 home_card_widget_->ShowInactive(); |
| 518 home_card_view_->SetState(state); | 569 home_card_view_->SetStateWithAnimation(old_state, state); |
| 519 layout_manager_->Layout(); | 570 layout_manager_->Layout(); |
| 520 } | 571 } |
| 521 } | 572 } |
| 522 | 573 |
| 523 HomeCard::State HomeCardImpl::GetState() { | 574 HomeCard::State HomeCardImpl::GetState() { |
| 524 return state_; | 575 return state_; |
| 525 } | 576 } |
| 526 | 577 |
| 527 void HomeCardImpl::RegisterSearchProvider( | 578 void HomeCardImpl::RegisterSearchProvider( |
| 528 app_list::SearchProvider* search_provider) { | 579 app_list::SearchProvider* search_provider) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 561 | 612 |
| 562 return home_card_widget_ ? home_card_widget_->GetNativeWindow() : NULL; | 613 return home_card_widget_ ? home_card_widget_->GetNativeWindow() : NULL; |
| 563 } | 614 } |
| 564 | 615 |
| 565 void HomeCardImpl::OnGestureEnded(State final_state) { | 616 void HomeCardImpl::OnGestureEnded(State final_state) { |
| 566 home_card_view_->ClearGesture(); | 617 home_card_view_->ClearGesture(); |
| 567 if (state_ != final_state && | 618 if (state_ != final_state && |
| 568 (state_ == VISIBLE_MINIMIZED || final_state == VISIBLE_MINIMIZED)) { | 619 (state_ == VISIBLE_MINIMIZED || final_state == VISIBLE_MINIMIZED)) { |
| 569 WindowManager::GetInstance()->ToggleOverview(); | 620 WindowManager::GetInstance()->ToggleOverview(); |
| 570 } else { | 621 } else { |
| 622 HomeCard::State old_state = state_; | |
| 571 state_ = final_state; | 623 state_ = final_state; |
| 572 home_card_view_->SetState(final_state); | 624 home_card_view_->SetStateWithAnimation(old_state, final_state); |
| 573 layout_manager_->Layout(); | 625 layout_manager_->Layout(); |
| 574 } | 626 } |
| 575 } | 627 } |
| 576 | 628 |
| 577 void HomeCardImpl::OnGestureProgressed( | 629 void HomeCardImpl::OnGestureProgressed( |
| 578 State from_state, State to_state, float progress) { | 630 State from_state, State to_state, float progress) { |
| 579 home_card_view_->SetStateProgress(from_state, to_state, progress); | 631 home_card_view_->SetStateProgress(from_state, to_state, progress); |
| 580 | 632 |
| 581 gfx::Rect screen_bounds = | 633 gfx::Rect screen_bounds = |
| 582 home_card_widget_->GetNativeWindow()->GetRootWindow()->bounds(); | 634 home_card_widget_->GetNativeWindow()->GetRootWindow()->bounds(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 621 instance = NULL; | 673 instance = NULL; |
| 622 } | 674 } |
| 623 | 675 |
| 624 // static | 676 // static |
| 625 HomeCard* HomeCard::Get() { | 677 HomeCard* HomeCard::Get() { |
| 626 DCHECK(instance); | 678 DCHECK(instance); |
| 627 return instance; | 679 return instance; |
| 628 } | 680 } |
| 629 | 681 |
| 630 } // namespace athena | 682 } // namespace athena |
| OLD | NEW |