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

Side by Side Diff: ui/app_list/pagination_model.cc

Issue 316393002: App list uses PaginationModel to transition between pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed tests -- adds blank pages so we have 3 pages in the test environment. Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/app_list/pagination_model.h" 5 #include "ui/app_list/pagination_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ui/app_list/pagination_model_observer.h" 9 #include "ui/app_list/pagination_model_observer.h"
10 #include "ui/gfx/animation/slide_animation.h" 10 #include "ui/gfx/animation/slide_animation.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 int old_selected = selected_page_; 92 int old_selected = selected_page_;
93 selected_page_ = page; 93 selected_page_ = page;
94 NotifySelectedPageChanged(old_selected, selected_page_); 94 NotifySelectedPageChanged(old_selected, selected_page_);
95 } 95 }
96 } 96 }
97 97
98 void PaginationModel::SelectPageRelative(int delta, bool animate) { 98 void PaginationModel::SelectPageRelative(int delta, bool animate) {
99 SelectPage(CalculateTargetPage(delta), animate); 99 SelectPage(CalculateTargetPage(delta), animate);
100 } 100 }
101 101
102 void PaginationModel::FinishAnimation() {
103 SelectPage(SelectedTargetPage(), false);
104 }
105
102 void PaginationModel::SetTransition(const Transition& transition) { 106 void PaginationModel::SetTransition(const Transition& transition) {
103 // -1 and |total_pages_| is a valid target page, which means user is at 107 // -1 and |total_pages_| is a valid target page, which means user is at
104 // the end and there is no target page for this scroll. 108 // the end and there is no target page for this scroll.
105 DCHECK(transition.target_page >= -1 && 109 DCHECK(transition.target_page >= -1 &&
106 transition.target_page <= total_pages_); 110 transition.target_page <= total_pages_);
107 DCHECK(transition.progress >= 0 && transition.progress <= 1); 111 DCHECK(transition.progress >= 0 && transition.progress <= 1);
108 112
109 if (transition_.Equals(transition)) 113 if (transition_.Equals(transition))
110 return; 114 return;
111 115
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 } 174 }
171 175
172 void PaginationModel::AddObserver(PaginationModelObserver* observer) { 176 void PaginationModel::AddObserver(PaginationModelObserver* observer) {
173 observers_.AddObserver(observer); 177 observers_.AddObserver(observer);
174 } 178 }
175 179
176 void PaginationModel::RemoveObserver(PaginationModelObserver* observer) { 180 void PaginationModel::RemoveObserver(PaginationModelObserver* observer) {
177 observers_.RemoveObserver(observer); 181 observers_.RemoveObserver(observer);
178 } 182 }
179 183
184 int PaginationModel::SelectedTargetPage() const {
185 // If no animation, or animation is in reverse, just the selected page.
186 if (!transition_animation_ || !transition_animation_->IsShowing())
187 return selected_page_;
188
189 // If, at the end of the current animation, we will animate to another page,
190 // return that eventual page.
191 if (pending_selected_page_ >= 0)
192 return pending_selected_page_;
193
194 // Just the target of the current animation.
195 return transition_.target_page;
196 }
197
180 void PaginationModel::NotifySelectedPageChanged(int old_selected, 198 void PaginationModel::NotifySelectedPageChanged(int old_selected,
181 int new_selected) { 199 int new_selected) {
182 FOR_EACH_OBSERVER(PaginationModelObserver, 200 FOR_EACH_OBSERVER(PaginationModelObserver,
183 observers_, 201 observers_,
184 SelectedPageChanged(old_selected, new_selected)); 202 SelectedPageChanged(old_selected, new_selected));
185 } 203 }
186 204
187 void PaginationModel::NotifyTransitionStarted() { 205 void PaginationModel::NotifyTransitionStarted() {
188 FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TransitionStarted()); 206 FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TransitionStarted());
189 } 207 }
190 208
191 void PaginationModel::NotifyTransitionChanged() { 209 void PaginationModel::NotifyTransitionChanged() {
192 FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TransitionChanged()); 210 FOR_EACH_OBSERVER(PaginationModelObserver, observers_, TransitionChanged());
193 } 211 }
194 212
195 int PaginationModel::CalculateTargetPage(int delta) const { 213 int PaginationModel::CalculateTargetPage(int delta) const {
196 DCHECK_GT(total_pages_, 0); 214 DCHECK_GT(total_pages_, 0);
197 215 const int target_page = SelectedTargetPage() + delta;
198 int current_page = selected_page_;
199 if (transition_animation_ && transition_animation_->IsShowing()) {
200 current_page = pending_selected_page_ >= 0 ?
201 pending_selected_page_ : transition_.target_page;
202 }
203
204 const int target_page = current_page + delta;
205 216
206 int start_page = 0; 217 int start_page = 0;
207 int end_page = total_pages_ - 1; 218 int end_page = total_pages_ - 1;
208 219
209 // Use invalid page when |selected_page_| is at ends. 220 // Use invalid page when |selected_page_| is at ends.
210 if (target_page < start_page && selected_page_ == start_page) 221 if (target_page < start_page && selected_page_ == start_page)
211 start_page = -1; 222 start_page = -1;
212 else if (target_page > end_page && selected_page_ == end_page) 223 else if (target_page > end_page && selected_page_ == end_page)
213 end_page = total_pages_; 224 end_page = total_pages_;
214 225
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 } else if (transition_animation_->GetCurrentValue() == 0) { 274 } else if (transition_animation_->GetCurrentValue() == 0) {
264 // Hiding animation ends. No page change should happen. 275 // Hiding animation ends. No page change should happen.
265 ResetTransitionAnimation(); 276 ResetTransitionAnimation();
266 } 277 }
267 278
268 if (next_target >= 0) 279 if (next_target >= 0)
269 SelectPage(next_target, true); 280 SelectPage(next_target, true);
270 } 281 }
271 282
272 } // namespace app_list 283 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698