Index: ui/app_list/pagination_model.cc |
diff --git a/ui/app_list/pagination_model.cc b/ui/app_list/pagination_model.cc |
index a6ef5814884ebfb2f7ec9966d1c171fb1dd87ca4..bb56d570146a20269119898185d720a207c7759e 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; |
} |