Skip to content

Commit b51f39b

Browse files
author
xiyuan@chromium.org
committed
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
1 parent aae0e59 commit b51f39b

8 files changed

+47
-36
lines changed

ash/wm/app_list_controller.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "ash/shell_window_ids.h"
1212
#include "ash/wm/property_util.h"
1313
#include "ash/wm/shelf_layout_manager.h"
14+
#include "ui/app_list/app_list_constants.h"
1415
#include "ui/app_list/app_list_view.h"
1516
#include "ui/app_list/pagination_model.h"
1617
#include "ui/aura/focus_manager.h"
@@ -33,9 +34,6 @@ const int kAnimationDurationMs = 200;
3334
// Offset in pixels to animation away/towards the launcher.
3435
const int kAnimationOffset = 8;
3536

36-
// Duration for snap back animation after over-scroll in milliseconds.
37-
const int kSnapBackAnimationDurationMs = 100;
38-
3937
// The maximum shift in pixels when over-scroll happens.
4038
const int kMaxOverScrollShift = 48;
4139

@@ -348,9 +346,11 @@ void AppListController::TransitionChanged() {
348346
return;
349347

350348
views::Widget* widget = view_->GetWidget();
349+
ui::LayerAnimator* widget_animator = GetLayer(widget)->GetAnimator();
351350
if (!pagination_model_->IsRevertingCurrentTransition()) {
352-
// Update cached |view_bounds_| before the first over-scroll move.
353-
if (!should_snap_back_)
351+
// Update cached |view_bounds_| if it is the first over-scroll move and
352+
// widget does not have running animations.
353+
if (!should_snap_back_ && !widget_animator->is_animating())
354354
view_bounds_ = widget->GetWindowBoundsInScreen();
355355

356356
const int current_page = pagination_model_->selected_page();
@@ -365,9 +365,9 @@ void AppListController::TransitionChanged() {
365365
should_snap_back_ = true;
366366
} else if (should_snap_back_) {
367367
should_snap_back_ = false;
368-
ui::ScopedLayerAnimationSettings animation(GetLayer(widget)->GetAnimator());
369-
animation.SetTransitionDuration(
370-
base::TimeDelta::FromMilliseconds(kSnapBackAnimationDurationMs));
368+
ui::ScopedLayerAnimationSettings animation(widget_animator);
369+
animation.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
370+
app_list::kOverscrollPageTransitionDurationMs));
371371
widget->SetBounds(view_bounds_);
372372
}
373373
}

ui/app_list/app_list_constants.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,10 @@ namespace app_list {
88

99
const SkColor kContentsBackgroundColor = SkColorSetRGB(0xF5, 0xF5, 0xF5);
1010

11+
// Duration in milliseconds for page transition.
12+
const int kPageTransitionDurationInMs = 180;
13+
14+
// Duration in milliseconds for over scroll page transition.
15+
const int kOverscrollPageTransitionDurationMs = 50;
16+
1117
} // namespace app_list

ui/app_list/app_list_constants.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ namespace app_list {
1212

1313
APP_LIST_EXPORT extern const SkColor kContentsBackgroundColor;
1414

15+
APP_LIST_EXPORT extern const int kPageTransitionDurationInMs;
16+
APP_LIST_EXPORT extern const int kOverscrollPageTransitionDurationMs;
17+
1518
} // namespace app_list
1619

1720
#endif // UI_APP_LIST_APP_LIST_CONSTANTS_H_

ui/app_list/apps_grid_view_unittest.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ TEST_F(AppsGridViewTest, MouseDrag) {
288288

289289
TEST_F(AppsGridViewTest, MouseDragFlipPage) {
290290
test_api_->SetPageFlipDelay(10);
291-
pagination_model_->SetTransitionDuration(10);
291+
pagination_model_->SetTransitionDurations(10, 10);
292292

293293
PageFlipWaiter page_flip_waiter(&message_loop_,
294294
pagination_model_.get());

ui/app_list/contents_view.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include <algorithm>
88

9+
#include "ui/app_list/app_list_constants.h"
910
#include "ui/app_list/app_list_view.h"
1011
#include "ui/app_list/apps_grid_view.h"
1112
#include "ui/app_list/pagination_model.h"
@@ -32,7 +33,6 @@ const int kMinScrollToSwitchPage = 20;
3233
const int kMinHorizVelocityToSwitchPage = 800;
3334

3435
const double kFinishTransitionThreshold = 0.33;
35-
const int kTransitionAnimationDurationInMs = 180;
3636

3737
// Helpers to get certain child view from |model|.
3838
AppsGridView* GetAppsGridView(views::ViewModel* model) {
@@ -53,7 +53,9 @@ ContentsView::ContentsView(AppListView* app_list_view,
5353
view_model_(new views::ViewModel),
5454
ALLOW_THIS_IN_INITIALIZER_LIST(
5555
bounds_animator_(new views::BoundsAnimator(this))) {
56-
pagination_model_->SetTransitionDuration(kTransitionAnimationDurationInMs);
56+
pagination_model_->SetTransitionDurations(
57+
kPageTransitionDurationInMs,
58+
kOverscrollPageTransitionDurationMs);
5759

5860
AppsGridView* apps_grid_view = new AppsGridView(app_list_view,
5961
pagination_model);

ui/app_list/pagination_model.cc

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ PaginationModel::PaginationModel()
1616
selected_page_(-1),
1717
transition_(-1, 0),
1818
pending_selected_page_(-1),
19-
transition_duration_ms_(0) {
19+
transition_duration_ms_(0),
20+
overscroll_transition_duration_ms_(0) {
2021
}
2122

2223
PaginationModel::~PaginationModel() {
@@ -44,11 +45,11 @@ void PaginationModel::SelectPage(int page, bool animate) {
4445
return;
4546

4647
// Creates an animation if there is not one.
47-
StartTranstionAnimation(page);
48+
StartTransitionAnimation(Transition(page, 0));
4849
return;
4950
} else {
5051
const bool showing = transition_animation_->IsShowing();
51-
const int from_page = showing ? selected_page_ : transition_.target_page;
52+
const int from_page = showing ? selected_page_ : transition_.target_page;
5253
const int to_page = showing ? transition_.target_page : selected_page_;
5354

5455
if (from_page == page) {
@@ -95,8 +96,10 @@ void PaginationModel::SetTransition(const Transition& transition) {
9596
NotifyTransitionChanged();
9697
}
9798

98-
void PaginationModel::SetTransitionDuration(int duration_ms) {
99+
void PaginationModel::SetTransitionDurations(int duration_ms,
100+
int overscroll_duration_ms) {
99101
transition_duration_ms_ = duration_ms;
102+
overscroll_transition_duration_ms_ = overscroll_duration_ms;
100103
}
101104

102105
void PaginationModel::StartScroll() {
@@ -134,11 +137,8 @@ void PaginationModel::EndScroll(bool cancel) {
134137
if (!has_transition())
135138
return;
136139

137-
CreateTransitionAnimation();
138-
transition_animation_->Reset(transition_.progress);
140+
StartTransitionAnimation(transition_);
139141

140-
// Always call Show to ensure animation will run.
141-
transition_animation_->Show();
142142
if (cancel)
143143
transition_animation_->Hide();
144144
}
@@ -190,19 +190,21 @@ int PaginationModel::CalculateTargetPage(int delta) const {
190190
return std::max(start_page, std::min(end_page, target_page));
191191
}
192192

193-
void PaginationModel::StartTranstionAnimation(int target_page) {
194-
DCHECK(selected_page_ != target_page);
193+
void PaginationModel::StartTransitionAnimation(const Transition& transition) {
194+
DCHECK(selected_page_ != transition.target_page);
195195

196-
SetTransition(Transition(target_page, 0));
197-
CreateTransitionAnimation();
198-
transition_animation_->Show();
199-
}
196+
SetTransition(transition);
200197

201-
void PaginationModel::CreateTransitionAnimation() {
202198
transition_animation_.reset(new ui::SlideAnimation(this));
203199
transition_animation_->SetTweenType(ui::Tween::LINEAR);
204-
if (transition_duration_ms_)
205-
transition_animation_->SetSlideDuration(transition_duration_ms_);
200+
transition_animation_->Reset(transition_.progress);
201+
202+
const int duration = is_valid_page(transition_.target_page) ?
203+
transition_duration_ms_ : overscroll_transition_duration_ms_;
204+
if (duration)
205+
transition_animation_->SetSlideDuration(duration);
206+
207+
transition_animation_->Show();
206208
}
207209

208210
void PaginationModel::ResetTransitionAnimation() {
@@ -223,10 +225,8 @@ void PaginationModel::AnimationEnded(const ui::Animation* animation) {
223225

224226
if (transition_animation_->GetCurrentValue() == 1) {
225227
// Showing animation ends.
226-
int target_page = transition_.target_page;
227-
228-
// If target page is not in valid range, reverse the animation.
229-
if (target_page < 0 || target_page >= total_pages_) {
228+
if (!is_valid_page(transition_.target_page)) {
229+
// If target page is not in valid range, reverse the animation.
230230
transition_animation_->Hide();
231231
return;
232232
}

ui/app_list/pagination_model.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class APP_LIST_EXPORT PaginationModel : public ui::AnimationDelegate {
5959
void SelectPageRelative(int delta, bool animate);
6060

6161
void SetTransition(const Transition& transition);
62-
void SetTransitionDuration(int duration_ms);
62+
void SetTransitionDurations(int duration_ms, int overscroll_duration_ms);
6363

6464
// Starts a scroll transition. If there is a running transition animation,
6565
// cancels it but keeps the transition info.
@@ -108,8 +108,7 @@ class APP_LIST_EXPORT PaginationModel : public ui::AnimationDelegate {
108108
// -1 or |total_pages_| is returned to indicate the situation.
109109
int CalculateTargetPage(int delta) const;
110110

111-
void StartTranstionAnimation(int target_page);
112-
void CreateTransitionAnimation();
111+
void StartTransitionAnimation(const Transition& transition);
113112
void ResetTransitionAnimation();
114113

115114
// ui::AnimationDelegate overrides:
@@ -128,6 +127,7 @@ class APP_LIST_EXPORT PaginationModel : public ui::AnimationDelegate {
128127

129128
scoped_ptr<ui::SlideAnimation> transition_animation_;
130129
int transition_duration_ms_; // Transition duration in millisecond.
130+
int overscroll_transition_duration_ms_;
131131

132132
ObserverList<PaginationModelObserver> observers_;
133133

ui/app_list/pagination_model_unittest.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class PaginationModelTest : public testing::Test {
106106
// testing::Test overrides:
107107
virtual void SetUp() OVERRIDE {
108108
pagination_.SetTotalPages(5);
109-
pagination_.SetTransitionDuration(1);
109+
pagination_.SetTransitionDurations(1, 1);
110110
observer_.set_model(&pagination_);
111111
pagination_.AddObserver(&observer_);
112112
}

0 commit comments

Comments
 (0)