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

Side by Side Diff: athena/home/home_card_impl.cc

Issue 692643003: Moves home card background to HomeCardView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « athena/home/athena_start_page_view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/home_card_impl.h" 5 #include "athena/home/home_card_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <limits> 8 #include <limits>
9 9
10 #include "athena/env/public/athena_env.h" 10 #include "athena/env/public/athena_env.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 DISALLOW_COPY_AND_ASSIGN(HomeCardLayoutManager); 120 DISALLOW_COPY_AND_ASSIGN(HomeCardLayoutManager);
121 }; 121 };
122 122
123 // The container view of home card contents of each state. 123 // The container view of home card contents of each state.
124 class HomeCardView : public views::WidgetDelegateView, 124 class HomeCardView : public views::WidgetDelegateView,
125 public AthenaStartPageView::Observer { 125 public AthenaStartPageView::Observer {
126 public: 126 public:
127 HomeCardView(app_list::AppListViewDelegate* view_delegate, 127 HomeCardView(app_list::AppListViewDelegate* view_delegate,
128 aura::Window* container, 128 aura::Window* container,
129 HomeCardGestureManager::Delegate* gesture_delegate) 129 HomeCardGestureManager::Delegate* gesture_delegate)
130 : minimized_background_(new views::View()), 130 : background_(new views::View),
131 main_view_(new AthenaStartPageView(view_delegate)),
132 minimized_background_(new views::View()),
131 drag_indicator_(new views::View()), 133 drag_indicator_(new views::View()),
132 main_view_(new AthenaStartPageView(view_delegate)),
133 gesture_delegate_(gesture_delegate) { 134 gesture_delegate_(gesture_delegate) {
135 background_->set_background(
136 views::Background::CreateVerticalGradientBackground(SK_ColorLTGRAY,
137 SK_ColorWHITE));
138 background_->SetPaintToLayer(true);
139 background_->SetFillsBoundsOpaquely(false);
140 AddChildView(background_);
141
134 // Ideally AppListMainView should be used here and have AthenaStartPageView 142 // Ideally AppListMainView should be used here and have AthenaStartPageView
135 // as its child view, so that custom pages and apps grid are available in 143 // as its child view, so that custom pages and apps grid are available in
136 // the home card. 144 // the home card.
137 // TODO(mukai): make it so after the detailed UI has been fixed. 145 // TODO(mukai): make it so after the detailed UI has been fixed.
138 main_view_->AddObserver(this); 146 main_view_->AddObserver(this);
139 AddChildView(main_view_); 147 AddChildView(main_view_);
140 148
141 minimized_background_->set_background( 149 minimized_background_->set_background(
142 views::Background::CreateSolidBackground( 150 views::Background::CreateSolidBackground(
143 SkColorSetA(SK_ColorBLACK, 256 * kMinimizedHomeOpacity))); 151 SkColorSetA(SK_ColorBLACK, 256 * kMinimizedHomeOpacity)));
(...skipping 12 matching lines...) Expand all
156 164
157 void SetStateProgress(HomeCard::State from_state, 165 void SetStateProgress(HomeCard::State from_state,
158 HomeCard::State to_state, 166 HomeCard::State to_state,
159 float progress) { 167 float progress) {
160 // TODO(mukai): not clear the focus, but simply close the virtual keyboard. 168 // TODO(mukai): not clear the focus, but simply close the virtual keyboard.
161 GetFocusManager()->ClearFocus(); 169 GetFocusManager()->ClearFocus();
162 if (from_state == HomeCard::VISIBLE_CENTERED) 170 if (from_state == HomeCard::VISIBLE_CENTERED)
163 main_view_->SetLayoutState(1.0f - progress); 171 main_view_->SetLayoutState(1.0f - progress);
164 else if (to_state == HomeCard::VISIBLE_CENTERED) 172 else if (to_state == HomeCard::VISIBLE_CENTERED)
165 main_view_->SetLayoutState(progress); 173 main_view_->SetLayoutState(progress);
174
175 float background_opacity = 1.0f;
166 if (from_state == HomeCard::VISIBLE_MINIMIZED || 176 if (from_state == HomeCard::VISIBLE_MINIMIZED ||
167 to_state == HomeCard::VISIBLE_MINIMIZED) { 177 to_state == HomeCard::VISIBLE_MINIMIZED) {
168 minimized_background_->layer()->SetOpacity( 178 background_opacity = (from_state == HomeCard::VISIBLE_MINIMIZED)
169 (to_state == HomeCard::VISIBLE_MINIMIZED) ? progress 179 ? progress
170 : (1.0f - progress)); 180 : (1.0f - progress);
171 } 181 }
182 background_->layer()->SetOpacity(background_opacity);
183 minimized_background_->layer()->SetOpacity(1.0f - background_opacity);
184
185 int background_height = kHomeCardHeight;
186 if (from_state == HomeCard::VISIBLE_CENTERED ||
187 to_state == HomeCard::VISIBLE_CENTERED) {
188 gfx::Rect window_bounds = GetWidget()->GetWindowBoundsInScreen();
189 background_height = window_bounds.height() - window_bounds.y();
190 }
191 gfx::Transform background_transform;
192 background_transform.Scale(
193 SK_MScalar1,
194 SkIntToMScalar(background_height) / SkIntToMScalar(height()));
195 background_->layer()->SetTransform(background_transform);
172 196
173 gfx::Rect from_bounds = GetDragIndicatorBounds(from_state); 197 gfx::Rect from_bounds = GetDragIndicatorBounds(from_state);
174 gfx::Rect to_bounds = GetDragIndicatorBounds(to_state); 198 gfx::Rect to_bounds = GetDragIndicatorBounds(to_state);
175 if (from_bounds != to_bounds) { 199 if (from_bounds != to_bounds) {
176 DCHECK_EQ(from_bounds.size().ToString(), to_bounds.size().ToString()); 200 DCHECK_EQ(from_bounds.size().ToString(), to_bounds.size().ToString());
177 drag_indicator_->SetBoundsRect( 201 drag_indicator_->SetBoundsRect(
178 gfx::Tween::RectValueBetween(progress, from_bounds, to_bounds)); 202 gfx::Tween::RectValueBetween(progress, from_bounds, to_bounds));
179 } 203 }
180 } 204 }
181 205
182 void SetStateWithAnimation(HomeCard::State state, 206 void SetStateWithAnimation(HomeCard::State state,
183 gfx::Tween::Type tween_type) { 207 gfx::Tween::Type tween_type) {
184 float minimized_target_opacity_for_state = 208 float minimized_opacity =
185 (state == HomeCard::VISIBLE_MINIMIZED) ? 1.0f : 0.0f; 209 (state == HomeCard::VISIBLE_MINIMIZED) ? 1.0f : 0.0f;
186 if (minimized_target_opacity_for_state != 210 if (minimized_opacity !=
187 minimized_background_->layer()->GetTargetOpacity()) { 211 minimized_background_->layer()->GetTargetOpacity()) {
188 ui::ScopedLayerAnimationSettings settings( 212 ui::ScopedLayerAnimationSettings settings(
189 minimized_background_->layer()->GetAnimator()); 213 minimized_background_->layer()->GetAnimator());
190 settings.SetTweenType(gfx::Tween::EASE_IN); 214 settings.SetTweenType(gfx::Tween::EASE_IN);
191 minimized_background_->layer()->SetOpacity( 215 minimized_background_->layer()->SetOpacity(minimized_opacity);
192 minimized_target_opacity_for_state);
193 } 216 }
217
218 gfx::Transform background_transform;
219 if (state != HomeCard::VISIBLE_CENTERED) {
220 background_transform.Scale(
221 SK_MScalar1,
222 SkIntToMScalar(kHomeCardHeight) / SkIntToMScalar(height()));
223 }
224 float background_opacity = 1.0f - minimized_opacity;
225 if (background_->layer()->GetTargetTransform() != background_transform ||
226 background_->layer()->GetTargetOpacity() != background_opacity) {
227 ui::ScopedLayerAnimationSettings settings(
228 background_->layer()->GetAnimator());
229 settings.SetTweenType(tween_type);
230 background_->layer()->SetTransform(background_transform);
231 background_->layer()->SetOpacity(background_opacity);
232 }
233
194 if (state == HomeCard::VISIBLE_CENTERED) 234 if (state == HomeCard::VISIBLE_CENTERED)
195 main_view_->RequestFocusOnSearchBox(); 235 main_view_->RequestFocusOnSearchBox();
196 else 236 else
197 GetWidget()->GetFocusManager()->ClearFocus(); 237 GetWidget()->GetFocusManager()->ClearFocus();
198 238
199 { 239 {
200 ui::ScopedLayerAnimationSettings settings( 240 ui::ScopedLayerAnimationSettings settings(
201 drag_indicator_->layer()->GetAnimator()); 241 drag_indicator_->layer()->GetAnimator());
202 settings.SetTweenType(gfx::Tween::EASE_IN_OUT); 242 settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
203 drag_indicator_->SetBoundsRect(GetDragIndicatorBounds(state)); 243 drag_indicator_->SetBoundsRect(GetDragIndicatorBounds(state));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 kHomeCardDragIndicatorMarginHeight, 278 kHomeCardDragIndicatorMarginHeight,
239 kHomeCardDragIndicatorWidth, 279 kHomeCardDragIndicatorWidth,
240 kHomeCardDragIndicatorHeight); 280 kHomeCardDragIndicatorHeight);
241 if (state == HomeCard::VISIBLE_CENTERED) 281 if (state == HomeCard::VISIBLE_CENTERED)
242 drag_indicator_bounds.Offset(0, kSystemUIHeight); 282 drag_indicator_bounds.Offset(0, kSystemUIHeight);
243 return drag_indicator_bounds; 283 return drag_indicator_bounds;
244 } 284 }
245 285
246 void Layout() override { 286 void Layout() override {
247 gfx::Rect contents_bounds = GetContentsBounds(); 287 gfx::Rect contents_bounds = GetContentsBounds();
288 background_->SetBoundsRect(contents_bounds);
248 main_view_->SetBoundsRect(contents_bounds); 289 main_view_->SetBoundsRect(contents_bounds);
249 minimized_background_->SetBoundsRect(contents_bounds); 290 minimized_background_->SetBoundsRect(contents_bounds);
250 drag_indicator_->SetBoundsRect( 291 drag_indicator_->SetBoundsRect(
251 GetDragIndicatorBounds(HomeCard::Get()->GetState())); 292 GetDragIndicatorBounds(HomeCard::Get()->GetState()));
252 } 293 }
253 294
254 private: 295 private:
255 // views::WidgetDelegate: 296 // views::WidgetDelegate:
256 views::View* GetContentsView() override { return this; } 297 views::View* GetContentsView() override { return this; }
257 298
258 // AthenaStartPageView::Observer: 299 // AthenaStartPageView::Observer:
259 void OnLayoutStateChanged(float new_state) override { 300 void OnLayoutStateChanged(float new_state) override {
260 if (new_state == 1.0f) 301 if (new_state == 1.0f)
261 HomeCard::Get()->SetState(HomeCard::VISIBLE_CENTERED); 302 HomeCard::Get()->SetState(HomeCard::VISIBLE_CENTERED);
262 } 303 }
263 304
305 views::View* background_;
306 AthenaStartPageView* main_view_;
264 views::View* minimized_background_; 307 views::View* minimized_background_;
265 views::View* drag_indicator_; 308 views::View* drag_indicator_;
266 AthenaStartPageView* main_view_;
267 HomeCard::State state_; 309 HomeCard::State state_;
268 scoped_ptr<HomeCardGestureManager> gesture_manager_; 310 scoped_ptr<HomeCardGestureManager> gesture_manager_;
269 HomeCardGestureManager::Delegate* gesture_delegate_; 311 HomeCardGestureManager::Delegate* gesture_delegate_;
270 312
271 DISALLOW_COPY_AND_ASSIGN(HomeCardView); 313 DISALLOW_COPY_AND_ASSIGN(HomeCardView);
272 }; 314 };
273 315
274 HomeCardImpl::HomeCardImpl(scoped_ptr<AppModelBuilder> model_builder, 316 HomeCardImpl::HomeCardImpl(scoped_ptr<AppModelBuilder> model_builder,
275 scoped_ptr<SearchControllerFactory> search_factory) 317 scoped_ptr<SearchControllerFactory> search_factory)
276 : model_builder_(model_builder.Pass()), 318 : model_builder_(model_builder.Pass()),
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 instance = nullptr; 502 instance = nullptr;
461 } 503 }
462 504
463 // static 505 // static
464 HomeCard* HomeCard::Get() { 506 HomeCard* HomeCard::Get() {
465 DCHECK(instance); 507 DCHECK(instance);
466 return instance; 508 return instance;
467 } 509 }
468 510
469 } // namespace athena 511 } // namespace athena
OLDNEW
« no previous file with comments | « athena/home/athena_start_page_view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698