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

Unified Diff: ui/app_list/views/contents_view.cc

Issue 555753002: Experimental app list: Change transition animations of top-level pages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use gfx::Tween::RectValueBetween. Created 6 years, 3 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/app_list/views/contents_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..6d73740efb679dad0b20dd707dacc70a8d9786ef 100644
--- a/ui/app_list/views/contents_view.cc
+++ b/ui/app_list/views/contents_view.cc
@@ -19,6 +19,7 @@
#include "ui/app_list/views/search_result_list_view.h"
#include "ui/app_list/views/start_page_view.h"
#include "ui/events/event.h"
+#include "ui/gfx/animation/tween.h"
#include "ui/resources/grit/ui_resources.h"
#include "ui/views/view_model.h"
#include "ui/views/view_model_utils.h"
@@ -73,6 +74,7 @@ void ContentsView::InitNamedPages(AppListModel* model,
int initial_page_index = app_list::switches::IsExperimentalAppListEnabled()
? GetPageIndexForNamedPage(NAMED_PAGE_START)
: GetPageIndexForNamedPage(NAMED_PAGE_APPS);
+ DCHECK_GE(initial_page_index, 0);
page_before_search_ = initial_page_index;
pagination_model_.SelectPage(initial_page_index, false);
@@ -118,20 +120,18 @@ int ContentsView::GetActivePageIndex() const {
}
bool ContentsView::IsNamedPageActive(NamedPage named_page) const {
- 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();
+ int active_page_index = GetActivePageIndex();
+ return active_page_index >= 0 &&
+ GetPageIndexForNamedPage(named_page) == active_page_index;
}
int ContentsView::GetPageIndexForNamedPage(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);
- // GetPageIndexForNamedPage should never be called on a named_page that does
- // not have a corresponding view.
- DCHECK(it != named_page_to_view_.end());
+ if (it == named_page_to_view_.end())
+ return -1;
+
return it->second;
}
@@ -173,6 +173,7 @@ void ContentsView::ShowSearchResults(bool show) {
app_list::switches::IsExperimentalAppListEnabled()
? NAMED_PAGE_START
: NAMED_PAGE_SEARCH_RESULTS);
+ DCHECK_GE(search_page, 0);
SetActivePageInternal(show ? search_page : page_before_search_, show);
}
@@ -184,11 +185,19 @@ bool ContentsView::IsShowingSearchResults() const {
: IsNamedPageActive(NAMED_PAGE_SEARCH_RESULTS);
}
-void ContentsView::UpdatePageBounds() {
- gfx::Rect rect(GetContentsBounds());
- if (rect.IsEmpty())
- return;
+gfx::Rect ContentsView::GetOffscreenPageBounds(int page_index) const {
+ gfx::Rect bounds(GetContentsBounds());
+ // The start page and search page origins are above; all other pages' origins
+ // are below.
+ int page_height = bounds.height();
+ bool origin_above =
+ GetPageIndexForNamedPage(NAMED_PAGE_START) == page_index ||
+ GetPageIndexForNamedPage(NAMED_PAGE_SEARCH_RESULTS) == page_index;
+ bounds.set_y(origin_above ? -page_height : page_height);
+ return bounds;
+}
+void ContentsView::UpdatePageBounds() {
// The bounds calculations will potentially be mid-transition (depending on
// the state of the PaginationModel).
int current_page = std::max(0, pagination_model_.selected_page());
@@ -203,20 +212,18 @@ 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 on_screen(GetContentsBounds());
+ gfx::Rect current_page_origin(GetOffscreenPageBounds(current_page));
+ gfx::Rect target_page_origin(GetOffscreenPageBounds(target_page));
+ gfx::Rect current_page_rect(
+ gfx::Tween::RectValueBetween(progress, on_screen, current_page_origin));
+ gfx::Rect target_page_rect(
+ gfx::Tween::RectValueBetween(progress, target_page_origin, on_screen));
+
+ view_model_->view_at(current_page)->SetBoundsRect(current_page_rect);
+ view_model_->view_at(target_page)->SetBoundsRect(target_page_rect);
}
PaginationModel* ContentsView::GetAppsPaginationModel() {
« no previous file with comments | « ui/app_list/views/contents_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698