summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--athena/home/home_card_impl.cc19
1 files changed, 18 insertions, 1 deletions
diff --git a/athena/home/home_card_impl.cc b/athena/home/home_card_impl.cc
index c1efcb7..f6a64f3 100644
--- a/athena/home/home_card_impl.cc
+++ b/athena/home/home_card_impl.cc
@@ -19,6 +19,7 @@
#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/layer.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/gfx/animation/tween.h"
@@ -131,7 +132,8 @@ class HomeCardView : public views::WidgetDelegateView,
main_view_(new AthenaStartPageView(view_delegate)),
minimized_background_(new views::View()),
drag_indicator_(new views::View()),
- gesture_delegate_(gesture_delegate) {
+ gesture_delegate_(gesture_delegate),
+ weak_factory_(this) {
background_->set_background(
views::Background::CreateVerticalGradientBackground(SK_ColorLTGRAY,
SK_ColorWHITE));
@@ -181,6 +183,7 @@ class HomeCardView : public views::WidgetDelegateView,
}
background_->layer()->SetOpacity(background_opacity);
minimized_background_->layer()->SetOpacity(1.0f - background_opacity);
+ UpdateMinimizedBackgroundVisibility();
int background_height = kHomeCardHeight;
if (from_state == HomeCard::VISIBLE_CENTERED ||
@@ -207,11 +210,18 @@ class HomeCardView : public views::WidgetDelegateView,
gfx::Tween::Type tween_type) {
float minimized_opacity =
(state == HomeCard::VISIBLE_MINIMIZED) ? 1.0f : 0.0f;
+ // |minimized_background_| needs to be visible before scheduling animation.
+ if (state == HomeCard::VISIBLE_MINIMIZED)
+ minimized_background_->SetVisible(true);
+
if (minimized_opacity !=
minimized_background_->layer()->GetTargetOpacity()) {
ui::ScopedLayerAnimationSettings settings(
minimized_background_->layer()->GetAnimator());
settings.SetTweenType(gfx::Tween::EASE_IN);
+ settings.AddObserver(new ui::ClosureAnimationObserver(
+ base::Bind(&HomeCardView::UpdateMinimizedBackgroundVisibility,
+ weak_factory_.GetWeakPtr())));
minimized_background_->layer()->SetOpacity(minimized_opacity);
}
@@ -293,6 +303,11 @@ class HomeCardView : public views::WidgetDelegateView,
}
private:
+ void UpdateMinimizedBackgroundVisibility() {
+ minimized_background_->SetVisible(
+ minimized_background_->layer()->GetTargetOpacity() != 0.0f);
+ }
+
// views::WidgetDelegate:
views::View* GetContentsView() override { return this; }
@@ -310,6 +325,8 @@ class HomeCardView : public views::WidgetDelegateView,
scoped_ptr<HomeCardGestureManager> gesture_manager_;
HomeCardGestureManager::Delegate* gesture_delegate_;
+ base::WeakPtrFactory<HomeCardView> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(HomeCardView);
};