Index: athena/home/home_card_impl.cc |
diff --git a/athena/home/home_card_impl.cc b/athena/home/home_card_impl.cc |
index a537cf11d47e4e612c2a738fcfd07c5734621242..c1efcb75c99f9c8defc31ae0d25c1a32d74d7162 100644 |
--- a/athena/home/home_card_impl.cc |
+++ b/athena/home/home_card_impl.cc |
@@ -127,10 +127,18 @@ class HomeCardView : public views::WidgetDelegateView, |
HomeCardView(app_list::AppListViewDelegate* view_delegate, |
aura::Window* container, |
HomeCardGestureManager::Delegate* gesture_delegate) |
- : minimized_background_(new views::View()), |
- drag_indicator_(new views::View()), |
+ : background_(new views::View), |
main_view_(new AthenaStartPageView(view_delegate)), |
+ minimized_background_(new views::View()), |
+ drag_indicator_(new views::View()), |
gesture_delegate_(gesture_delegate) { |
+ background_->set_background( |
+ views::Background::CreateVerticalGradientBackground(SK_ColorLTGRAY, |
+ SK_ColorWHITE)); |
+ background_->SetPaintToLayer(true); |
+ background_->SetFillsBoundsOpaquely(false); |
+ AddChildView(background_); |
+ |
// Ideally AppListMainView should be used here and have AthenaStartPageView |
// as its child view, so that custom pages and apps grid are available in |
// the home card. |
@@ -163,12 +171,28 @@ class HomeCardView : public views::WidgetDelegateView, |
main_view_->SetLayoutState(1.0f - progress); |
else if (to_state == HomeCard::VISIBLE_CENTERED) |
main_view_->SetLayoutState(progress); |
+ |
+ float background_opacity = 1.0f; |
if (from_state == HomeCard::VISIBLE_MINIMIZED || |
to_state == HomeCard::VISIBLE_MINIMIZED) { |
- minimized_background_->layer()->SetOpacity( |
- (to_state == HomeCard::VISIBLE_MINIMIZED) ? progress |
- : (1.0f - progress)); |
+ background_opacity = (from_state == HomeCard::VISIBLE_MINIMIZED) |
+ ? progress |
+ : (1.0f - progress); |
+ } |
+ background_->layer()->SetOpacity(background_opacity); |
+ minimized_background_->layer()->SetOpacity(1.0f - background_opacity); |
+ |
+ int background_height = kHomeCardHeight; |
+ if (from_state == HomeCard::VISIBLE_CENTERED || |
+ to_state == HomeCard::VISIBLE_CENTERED) { |
+ gfx::Rect window_bounds = GetWidget()->GetWindowBoundsInScreen(); |
+ background_height = window_bounds.height() - window_bounds.y(); |
} |
+ gfx::Transform background_transform; |
+ background_transform.Scale( |
+ SK_MScalar1, |
+ SkIntToMScalar(background_height) / SkIntToMScalar(height())); |
+ background_->layer()->SetTransform(background_transform); |
gfx::Rect from_bounds = GetDragIndicatorBounds(from_state); |
gfx::Rect to_bounds = GetDragIndicatorBounds(to_state); |
@@ -181,16 +205,32 @@ class HomeCardView : public views::WidgetDelegateView, |
void SetStateWithAnimation(HomeCard::State state, |
gfx::Tween::Type tween_type) { |
- float minimized_target_opacity_for_state = |
+ float minimized_opacity = |
(state == HomeCard::VISIBLE_MINIMIZED) ? 1.0f : 0.0f; |
- if (minimized_target_opacity_for_state != |
+ if (minimized_opacity != |
minimized_background_->layer()->GetTargetOpacity()) { |
ui::ScopedLayerAnimationSettings settings( |
minimized_background_->layer()->GetAnimator()); |
settings.SetTweenType(gfx::Tween::EASE_IN); |
- minimized_background_->layer()->SetOpacity( |
- minimized_target_opacity_for_state); |
+ minimized_background_->layer()->SetOpacity(minimized_opacity); |
+ } |
+ |
+ gfx::Transform background_transform; |
+ if (state != HomeCard::VISIBLE_CENTERED) { |
+ background_transform.Scale( |
+ SK_MScalar1, |
+ SkIntToMScalar(kHomeCardHeight) / SkIntToMScalar(height())); |
+ } |
+ float background_opacity = 1.0f - minimized_opacity; |
+ if (background_->layer()->GetTargetTransform() != background_transform || |
+ background_->layer()->GetTargetOpacity() != background_opacity) { |
+ ui::ScopedLayerAnimationSettings settings( |
+ background_->layer()->GetAnimator()); |
+ settings.SetTweenType(tween_type); |
+ background_->layer()->SetTransform(background_transform); |
+ background_->layer()->SetOpacity(background_opacity); |
} |
+ |
if (state == HomeCard::VISIBLE_CENTERED) |
main_view_->RequestFocusOnSearchBox(); |
else |
@@ -245,6 +285,7 @@ class HomeCardView : public views::WidgetDelegateView, |
void Layout() override { |
gfx::Rect contents_bounds = GetContentsBounds(); |
+ background_->SetBoundsRect(contents_bounds); |
main_view_->SetBoundsRect(contents_bounds); |
minimized_background_->SetBoundsRect(contents_bounds); |
drag_indicator_->SetBoundsRect( |
@@ -261,9 +302,10 @@ class HomeCardView : public views::WidgetDelegateView, |
HomeCard::Get()->SetState(HomeCard::VISIBLE_CENTERED); |
} |
+ views::View* background_; |
+ AthenaStartPageView* main_view_; |
views::View* minimized_background_; |
views::View* drag_indicator_; |
- AthenaStartPageView* main_view_; |
HomeCard::State state_; |
scoped_ptr<HomeCardGestureManager> gesture_manager_; |
HomeCardGestureManager::Delegate* gesture_delegate_; |