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/athena_start_page_view.h" | 5 #include "athena/home/athena_start_page_view.h" |
6 | 6 |
7 #include "athena/home/home_card_constants.h" | 7 #include "athena/home/home_card_constants.h" |
8 #include "athena/system/public/system_ui.h" | 8 #include "athena/system/public/system_ui.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 | 237 |
238 AthenaStartPageView::~AthenaStartPageView() {} | 238 AthenaStartPageView::~AthenaStartPageView() {} |
239 | 239 |
240 void AthenaStartPageView::RequestFocusOnSearchBox() { | 240 void AthenaStartPageView::RequestFocusOnSearchBox() { |
241 search_box_view_->search_box()->RequestFocus(); | 241 search_box_view_->search_box()->RequestFocus(); |
242 } | 242 } |
243 | 243 |
244 void AthenaStartPageView::SetLayoutState(float layout_state) { | 244 void AthenaStartPageView::SetLayoutState(float layout_state) { |
245 layout_state_ = layout_state; | 245 layout_state_ = layout_state; |
246 Layout(); | 246 Layout(); |
| 247 FOR_EACH_OBSERVER(Observer, observers_, OnLayoutStateChanged(layout_state)); |
247 } | 248 } |
248 | 249 |
249 void AthenaStartPageView::SetLayoutStateWithAnimation( | 250 void AthenaStartPageView::SetLayoutStateWithAnimation( |
250 float layout_state, | 251 float layout_state, |
251 gfx::Tween::Type tween_type) { | 252 gfx::Tween::Type tween_type) { |
252 ui::ScopedLayerAnimationSettings system_info( | 253 ui::ScopedLayerAnimationSettings system_info( |
253 system_info_view_->layer()->GetAnimator()); | 254 system_info_view_->layer()->GetAnimator()); |
254 ui::ScopedLayerAnimationSettings logo(logo_->layer()->GetAnimator()); | 255 ui::ScopedLayerAnimationSettings logo(logo_->layer()->GetAnimator()); |
255 ui::ScopedLayerAnimationSettings search_box( | 256 ui::ScopedLayerAnimationSettings search_box( |
256 search_box_container_->layer()->GetAnimator()); | 257 search_box_container_->layer()->GetAnimator()); |
257 ui::ScopedLayerAnimationSettings icons( | 258 ui::ScopedLayerAnimationSettings icons( |
258 app_icon_container_->layer()->GetAnimator()); | 259 app_icon_container_->layer()->GetAnimator()); |
259 ui::ScopedLayerAnimationSettings controls( | 260 ui::ScopedLayerAnimationSettings controls( |
260 control_icon_container_->layer()->GetAnimator()); | 261 control_icon_container_->layer()->GetAnimator()); |
261 | 262 |
262 system_info.SetTweenType(tween_type); | 263 system_info.SetTweenType(tween_type); |
263 logo.SetTweenType(tween_type); | 264 logo.SetTweenType(tween_type); |
264 search_box.SetTweenType(tween_type); | 265 search_box.SetTweenType(tween_type); |
265 icons.SetTweenType(tween_type); | 266 icons.SetTweenType(tween_type); |
266 controls.SetTweenType(tween_type); | 267 controls.SetTweenType(tween_type); |
267 | 268 |
268 SetLayoutState(layout_state); | 269 SetLayoutState(layout_state); |
269 } | 270 } |
270 | 271 |
| 272 void AthenaStartPageView::AddObserver(AthenaStartPageView::Observer* observer) { |
| 273 observers_.AddObserver(observer); |
| 274 } |
| 275 |
| 276 void AthenaStartPageView::RemoveObserver( |
| 277 AthenaStartPageView::Observer* observer) { |
| 278 observers_.RemoveObserver(observer); |
| 279 } |
| 280 |
271 AthenaStartPageView::LayoutData AthenaStartPageView::CreateBottomBounds( | 281 AthenaStartPageView::LayoutData AthenaStartPageView::CreateBottomBounds( |
272 int width) { | 282 int width) { |
273 LayoutData state; | 283 LayoutData state; |
274 state.icons.set_size(app_icon_container_->size()); | 284 state.icons.set_size(app_icon_container_->size()); |
275 state.icons.set_x(kIconMargin); | 285 state.icons.set_x(kIconMargin); |
276 state.icons.set_y(kIconMargin); | 286 state.icons.set_y(kIconMargin); |
277 | 287 |
278 state.controls.set_size(control_icon_container_->size()); | 288 state.controls.set_size(control_icon_container_->size()); |
279 state.controls.set_x(width - kIconMargin - state.controls.width()); | 289 state.controls.set_x(width - kIconMargin - state.controls.width()); |
280 state.controls.set_y(kIconMargin); | 290 state.controls.set_y(kIconMargin); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 state.logo_opacity = 1.0f; | 322 state.logo_opacity = 1.0f; |
313 state.background_opacity = 1.0f; | 323 state.background_opacity = 1.0f; |
314 return state; | 324 return state; |
315 } | 325 } |
316 | 326 |
317 void AthenaStartPageView::LayoutSearchResults(bool should_show_search_results) { | 327 void AthenaStartPageView::LayoutSearchResults(bool should_show_search_results) { |
318 if (should_show_search_results == | 328 if (should_show_search_results == |
319 search_results_view_->layer()->GetTargetVisibility()) { | 329 search_results_view_->layer()->GetTargetVisibility()) { |
320 return; | 330 return; |
321 } | 331 } |
322 if (GetContentsBounds().height() <= kHomeCardHeight) { | 332 if (should_show_search_results && layout_state_ != 1.0f) |
323 search_results_view_->SetVisible(false); | 333 SetLayoutState(1.0f); |
324 Layout(); | |
325 return; | |
326 } | |
327 | 334 |
328 gfx::Rect search_box_bounds = search_box_container_->bounds(); | 335 gfx::Rect search_box_bounds = search_box_container_->bounds(); |
329 if (!search_results_view_->visible()) { | 336 if (!search_results_view_->visible()) { |
330 search_results_view_->SetVisible(true); | 337 search_results_view_->SetVisible(true); |
331 search_results_view_->SetBounds( | 338 search_results_view_->SetBounds( |
332 search_box_bounds.x(), search_box_bounds.bottom(), | 339 search_box_bounds.x(), search_box_bounds.bottom(), |
333 search_box_bounds.width(), 0); | 340 search_box_bounds.width(), 0); |
334 } | 341 } |
335 logo_->SetVisible(true); | 342 logo_->SetVisible(true); |
336 | 343 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 base::TrimWhitespace( | 439 base::TrimWhitespace( |
433 delegate_->GetModel()->search_box()->text(), base::TRIM_ALL, &query); | 440 delegate_->GetModel()->search_box()->text(), base::TRIM_ALL, &query); |
434 | 441 |
435 if (!query.empty()) | 442 if (!query.empty()) |
436 search_results_view_->SetSelectedIndex(0); | 443 search_results_view_->SetSelectedIndex(0); |
437 | 444 |
438 LayoutSearchResults(!query.empty()); | 445 LayoutSearchResults(!query.empty()); |
439 } | 446 } |
440 | 447 |
441 } // namespace athena | 448 } // namespace athena |
OLD | NEW |