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

Unified Diff: athena/home/home_card_impl.cc

Issue 473113002: Introduce the basic animation from minimized to bottom. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/home/DEPS ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/home/home_card_impl.cc
diff --git a/athena/home/home_card_impl.cc b/athena/home/home_card_impl.cc
index 9c993f2c413a80fe3a3dc3d3450a5ce932381b02..0e45acaeb139ca52752ec89758d6cea2ad2e40ff 100644
--- a/athena/home/home_card_impl.cc
+++ b/athena/home/home_card_impl.cc
@@ -17,11 +17,14 @@
#include "athena/wm/public/window_manager.h"
#include "athena/wm/public/window_manager_observer.h"
#include "base/bind.h"
+#include "base/memory/weak_ptr.h"
#include "ui/app_list/search_provider.h"
#include "ui/app_list/views/app_list_main_view.h"
#include "ui/app_list/views/contents_view.h"
#include "ui/aura/layout_manager.h"
#include "ui/aura/window.h"
+#include "ui/compositor/closure_animation_observer.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/views/background.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/widget/widget.h"
@@ -88,8 +91,13 @@ class HomeCardLayoutManager : public aura::LayoutManager {
if (!home_card || !home_card->GetRootWindow())
return;
- SetChildBoundsDirect(home_card, GetBoundsForState(
- home_card->GetRootWindow()->bounds(), delegate_->GetState()));
+ {
+ ui::ScopedLayerAnimationSettings settings(
+ home_card->layer()->GetAnimator());
+ settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
+ SetChildBoundsDirect(home_card, GetBoundsForState(
+ home_card->GetRootWindow()->bounds(), delegate_->GetState()));
+ }
}
private:
@@ -267,7 +275,8 @@ class HomeCardView : public views::WidgetDelegateView {
HomeCardView(app_list::AppListViewDelegate* view_delegate,
aura::Window* container,
HomeCardGestureManager::Delegate* gesture_delegate)
- : gesture_delegate_(gesture_delegate) {
+ : gesture_delegate_(gesture_delegate),
+ weak_factory_(this) {
bottom_view_ = new AthenaStartPageView(view_delegate);
AddChildView(bottom_view_);
bottom_view_->SetPaintToLayer(true);
@@ -323,6 +332,31 @@ class HomeCardView : public views::WidgetDelegateView {
wm::SHADOW_TYPE_RECTANGULAR);
}
+ void SetStateWithAnimation(HomeCard::State from_state,
+ HomeCard::State to_state) {
+ if ((from_state == HomeCard::VISIBLE_MINIMIZED &&
+ to_state == HomeCard::VISIBLE_BOTTOM) ||
+ (from_state == HomeCard::VISIBLE_BOTTOM &&
+ to_state == HomeCard::VISIBLE_MINIMIZED)) {
+ minimized_view_->SetVisible(true);
+ bottom_view_->SetVisible(true);
+ {
+ ui::ScopedLayerAnimationSettings settings(
+ minimized_view_->layer()->GetAnimator());
+ settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
+ settings.AddObserver(new ui::ClosureAnimationObserver(
+ base::Bind(&HomeCardView::SetState,
+ weak_factory_.GetWeakPtr(),
+ to_state)));
+ minimized_view_->layer()->SetOpacity(
+ (to_state == HomeCard::VISIBLE_MINIMIZED) ? 1.0f : 0.0f);
+ }
+ } else {
+ // TODO(mukai): Take care of other transition.
+ SetState(to_state);
+ }
+ }
+
void ClearGesture() {
gesture_manager_.reset();
}
@@ -356,6 +390,7 @@ class HomeCardView : public views::WidgetDelegateView {
}
private:
+ // views::WidgetDelegate:
virtual views::View* GetContentsView() OVERRIDE {
return this;
}
@@ -365,6 +400,7 @@ class HomeCardView : public views::WidgetDelegateView {
views::View* minimized_view_;
scoped_ptr<HomeCardGestureManager> gesture_manager_;
HomeCardGestureManager::Delegate* gesture_delegate_;
+ base::WeakPtrFactory<HomeCardView> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(HomeCardView);
};
@@ -506,6 +542,7 @@ void HomeCardImpl::SetState(HomeCard::State state) {
// Update |state_| before changing the visibility of the widgets, so that
// LayoutManager callbacks get the correct state.
+ HomeCard::State old_state = state_;
state_ = state;
original_state_ = state;
if (state_ == HIDDEN) {
@@ -515,7 +552,7 @@ void HomeCardImpl::SetState(HomeCard::State state) {
home_card_widget_->Show();
else
home_card_widget_->ShowInactive();
- home_card_view_->SetState(state);
+ home_card_view_->SetStateWithAnimation(old_state, state);
layout_manager_->Layout();
}
}
@@ -568,8 +605,9 @@ void HomeCardImpl::OnGestureEnded(State final_state) {
(state_ == VISIBLE_MINIMIZED || final_state == VISIBLE_MINIMIZED)) {
WindowManager::GetInstance()->ToggleOverview();
} else {
+ HomeCard::State old_state = state_;
state_ = final_state;
- home_card_view_->SetState(final_state);
+ home_card_view_->SetStateWithAnimation(old_state, final_state);
layout_manager_->Layout();
}
}
« no previous file with comments | « athena/home/DEPS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698