summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-15 00:26:08 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-15 00:26:08 +0000
commitb51f39b2364bee171953f11d7375fdda6e4a3d5b (patch)
tree701a93ba1b5ba7fc9fd85c8ae4a64c2a5a1bd4d0 /ui
parentaae0e5946288261ec691e1490270070734242934 (diff)
downloadchromium_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.cc6
-rw-r--r--ui/app_list/app_list_constants.h3
-rw-r--r--ui/app_list/apps_grid_view_unittest.cc2
-rw-r--r--ui/app_list/contents_view.cc6
-rw-r--r--ui/app_list/pagination_model.cc42
-rw-r--r--ui/app_list/pagination_model.h6
-rw-r--r--ui/app_list/pagination_model_unittest.cc2
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_);
}