Chromium Code Reviews| Index: ui/app_list/views/contents_view.cc |
| diff --git a/ui/app_list/views/contents_view.cc b/ui/app_list/views/contents_view.cc |
| index 19c9dd93836895343e2c8637f186e69053dbf31e..f0c8dc1aefdc891f8410f4ef27513473e9d8f226 100644 |
| --- a/ui/app_list/views/contents_view.cc |
| +++ b/ui/app_list/views/contents_view.cc |
| @@ -118,11 +118,17 @@ int ContentsView::GetActivePageIndex() const { |
| } |
| bool ContentsView::IsNamedPageActive(NamedPage named_page) const { |
| + return IndexIsNamedPage(GetActivePageIndex(), named_page); |
| +} |
| + |
| +bool ContentsView::IndexIsNamedPage(int page_index, |
| + NamedPage named_page) const { |
| + // Find the index of the view corresponding to the given named_page. |
| std::map<NamedPage, int>::const_iterator it = |
| named_page_to_view_.find(named_page); |
| if (it == named_page_to_view_.end()) |
| return false; |
| - return it->second == GetActivePageIndex(); |
| + return it->second == page_index; |
| } |
| int ContentsView::GetPageIndexForNamedPage(NamedPage named_page) const { |
| @@ -184,6 +190,15 @@ bool ContentsView::IsShowingSearchResults() const { |
| : IsNamedPageActive(NAMED_PAGE_SEARCH_RESULTS); |
| } |
| +int ContentsView::PageOrigin(const gfx::Rect& bounds, int page_index) const { |
|
calamity
2014/09/10 01:56:40
This is cleaner without |bounds| and I don't think
Matt Giuca
2014/09/10 03:15:30
Done.
|
| + // The start page and search page origins are above; all other pages' origins |
| + // are below. |
| + int page_height = bounds.height(); |
| + bool origin_above = IndexIsNamedPage(page_index, NAMED_PAGE_START) || |
| + IndexIsNamedPage(page_index, NAMED_PAGE_SEARCH_RESULTS); |
| + return origin_above ? -page_height : page_height; |
| +} |
| + |
| void ContentsView::UpdatePageBounds() { |
| gfx::Rect rect(GetContentsBounds()); |
| if (rect.IsEmpty()) |
| @@ -203,20 +218,17 @@ void ContentsView::UpdatePageBounds() { |
| } |
| } |
| - gfx::Rect incoming_target(rect); |
| - gfx::Rect outgoing_target(rect); |
| - int dir = target_page > current_page ? -1 : 1; |
| - |
| - // Pages transition vertically. |
| - int page_height = rect.height(); |
| - int transition_offset = progress * page_height * dir; |
| - |
| - outgoing_target.set_y(transition_offset); |
| - incoming_target.set_y(dir < 0 ? transition_offset + page_height |
| - : transition_offset - page_height); |
| - |
| - view_model_->view_at(current_page)->SetBoundsRect(outgoing_target); |
| - view_model_->view_at(target_page)->SetBoundsRect(incoming_target); |
| + // Move |current_page| from 0 to its origin. Move |target_page| from its |
| + // origin to 0. |
| + gfx::Rect current_page_rect(rect); |
| + gfx::Rect target_page_rect(rect); |
| + int current_page_origin = PageOrigin(rect, current_page); |
| + int target_page_origin = PageOrigin(rect, target_page); |
| + current_page_rect.set_y(progress * current_page_origin); |
| + target_page_rect.set_y((1 - progress) * target_page_origin); |
| + |
| + view_model_->view_at(current_page)->SetBoundsRect(current_page_rect); |
| + view_model_->view_at(target_page)->SetBoundsRect(target_page_rect); |
| } |
| PaginationModel* ContentsView::GetAppsPaginationModel() { |