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

Unified Diff: ui/app_list/pagination_model.cc

Issue 645853013: Remove some platform specific stuff from views. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 2 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/pagination_model.h ('k') | ui/app_list/pagination_model_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/pagination_model.cc
diff --git a/ui/app_list/pagination_model.cc b/ui/app_list/pagination_model.cc
deleted file mode 100644
index 0e568d81535021426122c7f075359c8f6848b6eb..0000000000000000000000000000000000000000
--- a/ui/app_list/pagination_model.cc
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/app_list/pagination_model.h"
-
-#include <algorithm>
-
-#include "ui/app_list/pagination_model_observer.h"
-#include "ui/gfx/animation/slide_animation.h"
-
-namespace app_list {
-
-PaginationModel::PaginationModel()
- : total_pages_(-1),
- selected_page_(-1),
- transition_(-1, 0),
- pending_selected_page_(-1),
- transition_duration_ms_(0),
- overscroll_transition_duration_ms_(0),
- last_overscroll_target_page_(0) {
-}
-
-PaginationModel::~PaginationModel() {
-}
-
-void PaginationModel::SetTotalPages(int total_pages) {
- if (total_pages == total_pages_)
- return;
-
- total_pages_ = total_pages;
- if (selected_page_ < 0)
- SelectPage(0, false /* animate */);
- if (selected_page_ >= total_pages_)
- SelectPage(std::max(total_pages_ - 1, 0), false /* animate */);
- FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TotalPagesChanged());
-}
-
-void PaginationModel::SelectPage(int page, bool animate) {
- if (animate) {
- // -1 and |total_pages_| are valid target page for animation.
- DCHECK(page >= -1 && page <= total_pages_);
-
- if (!transition_animation_) {
- if (page == selected_page_)
- return;
-
- // Suppress over scroll animation if the same one happens too fast.
- if (!is_valid_page(page)) {
- const base::TimeTicks now = base::TimeTicks::Now();
-
- if (page == last_overscroll_target_page_) {
- const int kMinOverScrollTimeGapInMs = 500;
- const base::TimeDelta time_elapsed =
- now - last_overscroll_animation_start_time_;
- if (time_elapsed.InMilliseconds() < kMinOverScrollTimeGapInMs)
- return;
- }
-
- last_overscroll_target_page_ = page;
- last_overscroll_animation_start_time_ = now;
- }
-
- // Creates an animation if there is not one.
- StartTransitionAnimation(Transition(page, 0));
- return;
- } else {
- const bool showing = transition_animation_->IsShowing();
- const int from_page = showing ? selected_page_ : transition_.target_page;
- const int to_page = showing ? transition_.target_page : selected_page_;
-
- if (from_page == page) {
- if (showing)
- transition_animation_->Hide();
- else
- transition_animation_->Show();
- pending_selected_page_ = -1;
- } else if (to_page != page) {
- pending_selected_page_ = page;
- } else {
- pending_selected_page_ = -1;
- }
- }
- } else {
- DCHECK(total_pages_ == 0 || (page >= 0 && page < total_pages_));
-
- if (page == selected_page_)
- return;
-
- ResetTransitionAnimation();
-
- int old_selected = selected_page_;
- selected_page_ = page;
- NotifySelectedPageChanged(old_selected, selected_page_);
- }
-}
-
-void PaginationModel::SelectPageRelative(int delta, bool animate) {
- SelectPage(CalculateTargetPage(delta), animate);
-}
-
-void PaginationModel::FinishAnimation() {
- SelectPage(SelectedTargetPage(), false);
-}
-
-void PaginationModel::SetTransition(const Transition& transition) {
- // -1 and |total_pages_| is a valid target page, which means user is at
- // the end and there is no target page for this scroll.
- DCHECK(transition.target_page >= -1 &&
- transition.target_page <= total_pages_);
- DCHECK(transition.progress >= 0 && transition.progress <= 1);
-
- if (transition_.Equals(transition))
- return;
-
- transition_ = transition;
- NotifyTransitionChanged();
-}
-
-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() {
- // Cancels current transition animation (if any).
- transition_animation_.reset();
-}
-
-void PaginationModel::UpdateScroll(double delta) {
- // Translates scroll delta to desired page change direction.
- int page_change_dir = delta > 0 ? -1 : 1;
-
- // Initializes a transition if there is none.
- if (!has_transition())
- transition_.target_page = CalculateTargetPage(page_change_dir);
-
- // Updates transition progress.
- int transition_dir = transition_.target_page > selected_page_ ? 1 : -1;
- double progress = transition_.progress +
- fabs(delta) * page_change_dir * transition_dir;
-
- if (progress < 0) {
- if (transition_.progress) {
- transition_.progress = 0;
- NotifyTransitionChanged();
- }
- clear_transition();
- } else if (progress > 1) {
- if (is_valid_page(transition_.target_page)) {
- SelectPage(transition_.target_page, false);
- clear_transition();
- }
- } else {
- transition_.progress = progress;
- NotifyTransitionChanged();
- }
-}
-
-void PaginationModel::EndScroll(bool cancel) {
- if (!has_transition())
- return;
-
- StartTransitionAnimation(transition_);
-
- if (cancel)
- transition_animation_->Hide();
-}
-
-bool PaginationModel::IsRevertingCurrentTransition() const {
- // Use !IsShowing() so that we return true at the end of hide animation.
- return transition_animation_ && !transition_animation_->IsShowing();
-}
-
-void PaginationModel::AddObserver(PaginationModelObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void PaginationModel::RemoveObserver(PaginationModelObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-int PaginationModel::SelectedTargetPage() const {
- // If no animation, or animation is in reverse, just the selected page.
- if (!transition_animation_ || !transition_animation_->IsShowing())
- return selected_page_;
-
- // If, at the end of the current animation, we will animate to another page,
- // return that eventual page.
- if (pending_selected_page_ >= 0)
- return pending_selected_page_;
-
- // Just the target of the current animation.
- return transition_.target_page;
-}
-
-void PaginationModel::NotifySelectedPageChanged(int old_selected,
- int new_selected) {
- FOR_EACH_OBSERVER(PaginationModelObserver,
- observers_,
- SelectedPageChanged(old_selected, new_selected));
-}
-
-void PaginationModel::NotifyTransitionStarted() {
- FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TransitionStarted());
-}
-
-void PaginationModel::NotifyTransitionChanged() {
- FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TransitionChanged());
-}
-
-int PaginationModel::CalculateTargetPage(int delta) const {
- DCHECK_GT(total_pages_, 0);
- const int target_page = SelectedTargetPage() + delta;
-
- int start_page = 0;
- int end_page = total_pages_ - 1;
-
- // Use invalid page when |selected_page_| is at ends.
- if (target_page < start_page && selected_page_ == start_page)
- start_page = -1;
- else if (target_page > end_page && selected_page_ == end_page)
- end_page = total_pages_;
-
- return std::max(start_page, std::min(end_page, target_page));
-}
-
-void PaginationModel::StartTransitionAnimation(const Transition& transition) {
- DCHECK(selected_page_ != transition.target_page);
-
- NotifyTransitionStarted();
- SetTransition(transition);
-
- transition_animation_.reset(new gfx::SlideAnimation(this));
- transition_animation_->SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN);
- 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() {
- transition_animation_.reset();
- transition_.target_page = -1;
- transition_.progress = 0;
- pending_selected_page_ = -1;
-}
-
-void PaginationModel::AnimationProgressed(const gfx::Animation* animation) {
- transition_.progress = transition_animation_->GetCurrentValue();
- NotifyTransitionChanged();
-}
-
-void PaginationModel::AnimationEnded(const gfx::Animation* animation) {
- // Save |pending_selected_page_| because SelectPage resets it.
- int next_target = pending_selected_page_;
-
- if (transition_animation_->GetCurrentValue() == 1) {
- // Showing animation ends.
- if (!is_valid_page(transition_.target_page)) {
- // If target page is not in valid range, reverse the animation.
- transition_animation_->Hide();
- return;
- }
-
- // Otherwise, change page and finish the transition.
- DCHECK(selected_page_ != transition_.target_page);
- SelectPage(transition_.target_page, false /* animate */);
- } else if (transition_animation_->GetCurrentValue() == 0) {
- // Hiding animation ends. No page change should happen.
- ResetTransitionAnimation();
- }
-
- if (next_target >= 0)
- SelectPage(next_target, true);
-}
-
-} // namespace app_list
« no previous file with comments | « ui/app_list/pagination_model.h ('k') | ui/app_list/pagination_model_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698