diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-15 00:26:08 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-15 00:26:08 +0000 |
commit | b51f39b2364bee171953f11d7375fdda6e4a3d5b (patch) | |
tree | 701a93ba1b5ba7fc9fd85c8ae4a64c2a5a1bd4d0 /ui | |
parent | aae0e5946288261ec691e1490270070734242934 (diff) | |
download | chromium_src-b51f39b2364bee171953f11d7375fdda6e4a3d5b.zip chromium_src-b51f39b2364bee171953f11d7375fdda6e4a3d5b.tar.gz chromium_src-b51f39b2364bee171953f11d7375fdda6e4a3d5b.tar.bz2 |
app_list: Make over scroll animation faster.
- Add an over scroll animation duration of 50ms;
- Use the over scroll animation duration for transition to invalid page
(i.e. over scroll); This was using normal page transition duration of 180ms
before.
- Use the same duration for snap back animation; This was 100ms and now changed
to 50ms.
Also fixed a bug that app launcher bubble moves to wrong location if starting an
over scroll before previous over scroll snap back animation finishes.
BUG=160590
TEST=Verify over scroll animation is fast enough.
R=sky@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11275320
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167784 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/app_list/app_list_constants.cc | 6 | ||||
-rw-r--r-- | ui/app_list/app_list_constants.h | 3 | ||||
-rw-r--r-- | ui/app_list/apps_grid_view_unittest.cc | 2 | ||||
-rw-r--r-- | ui/app_list/contents_view.cc | 6 | ||||
-rw-r--r-- | ui/app_list/pagination_model.cc | 42 | ||||
-rw-r--r-- | ui/app_list/pagination_model.h | 6 | ||||
-rw-r--r-- | ui/app_list/pagination_model_unittest.cc | 2 |
7 files changed, 39 insertions, 28 deletions
diff --git a/ui/app_list/app_list_constants.cc b/ui/app_list/app_list_constants.cc index 2d7e765..172b499 100644 --- a/ui/app_list/app_list_constants.cc +++ b/ui/app_list/app_list_constants.cc @@ -8,4 +8,10 @@ namespace app_list { const SkColor kContentsBackgroundColor = SkColorSetRGB(0xF5, 0xF5, 0xF5); +// Duration in milliseconds for page transition. +const int kPageTransitionDurationInMs = 180; + +// Duration in milliseconds for over scroll page transition. +const int kOverscrollPageTransitionDurationMs = 50; + } // namespace app_list diff --git a/ui/app_list/app_list_constants.h b/ui/app_list/app_list_constants.h index 90e3901..e14bf8f 100644 --- a/ui/app_list/app_list_constants.h +++ b/ui/app_list/app_list_constants.h @@ -12,6 +12,9 @@ namespace app_list { APP_LIST_EXPORT extern const SkColor kContentsBackgroundColor; +APP_LIST_EXPORT extern const int kPageTransitionDurationInMs; +APP_LIST_EXPORT extern const int kOverscrollPageTransitionDurationMs; + } // namespace app_list #endif // UI_APP_LIST_APP_LIST_CONSTANTS_H_ diff --git a/ui/app_list/apps_grid_view_unittest.cc b/ui/app_list/apps_grid_view_unittest.cc index abd3775..dffafc8 100644 --- a/ui/app_list/apps_grid_view_unittest.cc +++ b/ui/app_list/apps_grid_view_unittest.cc @@ -288,7 +288,7 @@ TEST_F(AppsGridViewTest, MouseDrag) { TEST_F(AppsGridViewTest, MouseDragFlipPage) { test_api_->SetPageFlipDelay(10); - pagination_model_->SetTransitionDuration(10); + pagination_model_->SetTransitionDurations(10, 10); PageFlipWaiter page_flip_waiter(&message_loop_, pagination_model_.get()); diff --git a/ui/app_list/contents_view.cc b/ui/app_list/contents_view.cc index cbb4c2a..f5e7030 100644 --- a/ui/app_list/contents_view.cc +++ b/ui/app_list/contents_view.cc @@ -6,6 +6,7 @@ #include <algorithm> +#include "ui/app_list/app_list_constants.h" #include "ui/app_list/app_list_view.h" #include "ui/app_list/apps_grid_view.h" #include "ui/app_list/pagination_model.h" @@ -32,7 +33,6 @@ const int kMinScrollToSwitchPage = 20; const int kMinHorizVelocityToSwitchPage = 800; const double kFinishTransitionThreshold = 0.33; -const int kTransitionAnimationDurationInMs = 180; // Helpers to get certain child view from |model|. AppsGridView* GetAppsGridView(views::ViewModel* model) { @@ -53,7 +53,9 @@ ContentsView::ContentsView(AppListView* app_list_view, view_model_(new views::ViewModel), ALLOW_THIS_IN_INITIALIZER_LIST( bounds_animator_(new views::BoundsAnimator(this))) { - pagination_model_->SetTransitionDuration(kTransitionAnimationDurationInMs); + pagination_model_->SetTransitionDurations( + kPageTransitionDurationInMs, + kOverscrollPageTransitionDurationMs); AppsGridView* apps_grid_view = new AppsGridView(app_list_view, pagination_model); diff --git a/ui/app_list/pagination_model.cc b/ui/app_list/pagination_model.cc index a6ef581..bb56d57 100644 --- a/ui/app_list/pagination_model.cc +++ b/ui/app_list/pagination_model.cc @@ -16,7 +16,8 @@ PaginationModel::PaginationModel() selected_page_(-1), transition_(-1, 0), pending_selected_page_(-1), - transition_duration_ms_(0) { + transition_duration_ms_(0), + overscroll_transition_duration_ms_(0) { } PaginationModel::~PaginationModel() { @@ -44,11 +45,11 @@ void PaginationModel::SelectPage(int page, bool animate) { return; // Creates an animation if there is not one. - StartTranstionAnimation(page); + StartTransitionAnimation(Transition(page, 0)); return; } else { const bool showing = transition_animation_->IsShowing(); - const int from_page = showing ? selected_page_ : transition_.target_page; + const int from_page = showing ? selected_page_ : transition_.target_page; const int to_page = showing ? transition_.target_page : selected_page_; if (from_page == page) { @@ -95,8 +96,10 @@ void PaginationModel::SetTransition(const Transition& transition) { NotifyTransitionChanged(); } -void PaginationModel::SetTransitionDuration(int duration_ms) { +void PaginationModel::SetTransitionDurations(int duration_ms, + int overscroll_duration_ms) { transition_duration_ms_ = duration_ms; + overscroll_transition_duration_ms_ = overscroll_duration_ms; } void PaginationModel::StartScroll() { @@ -134,11 +137,8 @@ void PaginationModel::EndScroll(bool cancel) { if (!has_transition()) return; - CreateTransitionAnimation(); - transition_animation_->Reset(transition_.progress); + StartTransitionAnimation(transition_); - // Always call Show to ensure animation will run. - transition_animation_->Show(); if (cancel) transition_animation_->Hide(); } @@ -190,19 +190,21 @@ int PaginationModel::CalculateTargetPage(int delta) const { return std::max(start_page, std::min(end_page, target_page)); } -void PaginationModel::StartTranstionAnimation(int target_page) { - DCHECK(selected_page_ != target_page); +void PaginationModel::StartTransitionAnimation(const Transition& transition) { + DCHECK(selected_page_ != transition.target_page); - SetTransition(Transition(target_page, 0)); - CreateTransitionAnimation(); - transition_animation_->Show(); -} + SetTransition(transition); -void PaginationModel::CreateTransitionAnimation() { transition_animation_.reset(new ui::SlideAnimation(this)); transition_animation_->SetTweenType(ui::Tween::LINEAR); - if (transition_duration_ms_) - transition_animation_->SetSlideDuration(transition_duration_ms_); + transition_animation_->Reset(transition_.progress); + + const int duration = is_valid_page(transition_.target_page) ? + transition_duration_ms_ : overscroll_transition_duration_ms_; + if (duration) + transition_animation_->SetSlideDuration(duration); + + transition_animation_->Show(); } void PaginationModel::ResetTransitionAnimation() { @@ -223,10 +225,8 @@ void PaginationModel::AnimationEnded(const ui::Animation* animation) { if (transition_animation_->GetCurrentValue() == 1) { // Showing animation ends. - int target_page = transition_.target_page; - - // If target page is not in valid range, reverse the animation. - if (target_page < 0 || target_page >= total_pages_) { + if (!is_valid_page(transition_.target_page)) { + // If target page is not in valid range, reverse the animation. transition_animation_->Hide(); return; } diff --git a/ui/app_list/pagination_model.h b/ui/app_list/pagination_model.h index d51241af..9f27e42 100644 --- a/ui/app_list/pagination_model.h +++ b/ui/app_list/pagination_model.h @@ -59,7 +59,7 @@ class APP_LIST_EXPORT PaginationModel : public ui::AnimationDelegate { void SelectPageRelative(int delta, bool animate); void SetTransition(const Transition& transition); - void SetTransitionDuration(int duration_ms); + void SetTransitionDurations(int duration_ms, int overscroll_duration_ms); // Starts a scroll transition. If there is a running transition animation, // cancels it but keeps the transition info. @@ -108,8 +108,7 @@ class APP_LIST_EXPORT PaginationModel : public ui::AnimationDelegate { // -1 or |total_pages_| is returned to indicate the situation. int CalculateTargetPage(int delta) const; - void StartTranstionAnimation(int target_page); - void CreateTransitionAnimation(); + void StartTransitionAnimation(const Transition& transition); void ResetTransitionAnimation(); // ui::AnimationDelegate overrides: @@ -128,6 +127,7 @@ class APP_LIST_EXPORT PaginationModel : public ui::AnimationDelegate { scoped_ptr<ui::SlideAnimation> transition_animation_; int transition_duration_ms_; // Transition duration in millisecond. + int overscroll_transition_duration_ms_; ObserverList<PaginationModelObserver> observers_; diff --git a/ui/app_list/pagination_model_unittest.cc b/ui/app_list/pagination_model_unittest.cc index 159ddc8f..e7c6b03 100644 --- a/ui/app_list/pagination_model_unittest.cc +++ b/ui/app_list/pagination_model_unittest.cc @@ -106,7 +106,7 @@ class PaginationModelTest : public testing::Test { // testing::Test overrides: virtual void SetUp() OVERRIDE { pagination_.SetTotalPages(5); - pagination_.SetTransitionDuration(1); + pagination_.SetTransitionDurations(1, 1); observer_.set_model(&pagination_); pagination_.AddObserver(&observer_); } |