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

Side by Side Diff: ui/app_list/views/contents_view.cc

Issue 497413003: Refactor app list event handling and prerendering. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reorder in .cc file. Created 6 years, 3 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
« no previous file with comments | « ui/app_list/views/contents_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/views/contents_view.h" 5 #include "ui/app_list/views/contents_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "ui/app_list/app_list_constants.h" 11 #include "ui/app_list/app_list_constants.h"
12 #include "ui/app_list/app_list_switches.h" 12 #include "ui/app_list/app_list_switches.h"
13 #include "ui/app_list/app_list_view_delegate.h" 13 #include "ui/app_list/app_list_view_delegate.h"
14 #include "ui/app_list/views/app_list_folder_view.h" 14 #include "ui/app_list/views/app_list_folder_view.h"
15 #include "ui/app_list/views/app_list_main_view.h" 15 #include "ui/app_list/views/app_list_main_view.h"
16 #include "ui/app_list/views/apps_container_view.h" 16 #include "ui/app_list/views/apps_container_view.h"
17 #include "ui/app_list/views/apps_grid_view.h" 17 #include "ui/app_list/views/apps_grid_view.h"
18 #include "ui/app_list/views/contents_switcher_view.h" 18 #include "ui/app_list/views/contents_switcher_view.h"
19 #include "ui/app_list/views/search_result_list_view.h" 19 #include "ui/app_list/views/search_result_list_view.h"
20 #include "ui/app_list/views/start_page_view.h" 20 #include "ui/app_list/views/start_page_view.h"
21 #include "ui/events/event.h" 21 #include "ui/events/event.h"
22 #include "ui/resources/grit/ui_resources.h" 22 #include "ui/resources/grit/ui_resources.h"
23 #include "ui/views/view_model.h" 23 #include "ui/views/view_model.h"
24 #include "ui/views/view_model_utils.h" 24 #include "ui/views/view_model_utils.h"
25 25
26 namespace app_list { 26 namespace app_list {
27 27
28 namespace {
29
30 const int kMinMouseWheelToSwitchPage = 20;
31 const int kMinScrollToSwitchPage = 20;
32 const int kMinHorizVelocityToSwitchPage = 800;
33
34 const double kFinishTransitionThreshold = 0.33;
35
36 } // namespace
37
38 ContentsView::ContentsView(AppListMainView* app_list_main_view) 28 ContentsView::ContentsView(AppListMainView* app_list_main_view)
39 : search_results_view_(NULL), 29 : search_results_view_(NULL),
40 start_page_view_(NULL), 30 start_page_view_(NULL),
41 app_list_main_view_(app_list_main_view), 31 app_list_main_view_(app_list_main_view),
42 contents_switcher_view_(NULL), 32 contents_switcher_view_(NULL),
43 view_model_(new views::ViewModel), 33 view_model_(new views::ViewModel),
44 page_before_search_(0) { 34 page_before_search_(0) {
45 pagination_model_.AddObserver(this); 35 pagination_model_.AddObserver(this);
46 } 36 }
47 37
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 219
230 PaginationModel* ContentsView::GetAppsPaginationModel() { 220 PaginationModel* ContentsView::GetAppsPaginationModel() {
231 return apps_container_view_->apps_grid_view()->pagination_model(); 221 return apps_container_view_->apps_grid_view()->pagination_model();
232 } 222 }
233 223
234 void ContentsView::ShowFolderContent(AppListFolderItem* item) { 224 void ContentsView::ShowFolderContent(AppListFolderItem* item) {
235 apps_container_view_->ShowActiveFolder(item); 225 apps_container_view_->ShowActiveFolder(item);
236 } 226 }
237 227
238 void ContentsView::Prerender() { 228 void ContentsView::Prerender() {
239 const int selected_page = 229 apps_container_view_->apps_grid_view()->Prerender();
240 std::max(0, GetAppsPaginationModel()->selected_page());
241 apps_container_view_->apps_grid_view()->Prerender(selected_page);
242 } 230 }
243 231
244 views::View* ContentsView::GetPageView(int index) { 232 views::View* ContentsView::GetPageView(int index) {
245 return view_model_->view_at(index); 233 return view_model_->view_at(index);
246 } 234 }
247 235
248 void ContentsView::AddBlankPageForTesting() { 236 void ContentsView::AddBlankPageForTesting() {
249 AddLauncherPage(new views::View, 0); 237 AddLauncherPage(new views::View, 0);
250 } 238 }
251 239
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 for (int i = 0; i < view_model_->view_size(); ++i) { 284 for (int i = 0; i < view_model_->view_size(); ++i) {
297 view_model_->view_at(i)->SetBoundsRect( 285 view_model_->view_at(i)->SetBoundsRect(
298 i == pagination_model_.SelectedTargetPage() ? rect : offscreen_target); 286 i == pagination_model_.SelectedTargetPage() ? rect : offscreen_target);
299 } 287 }
300 } 288 }
301 289
302 bool ContentsView::OnKeyPressed(const ui::KeyEvent& event) { 290 bool ContentsView::OnKeyPressed(const ui::KeyEvent& event) {
303 return view_model_->view_at(GetActivePageIndex())->OnKeyPressed(event); 291 return view_model_->view_at(GetActivePageIndex())->OnKeyPressed(event);
304 } 292 }
305 293
306 bool ContentsView::OnMouseWheel(const ui::MouseWheelEvent& event) {
307 if (!IsNamedPageActive(NAMED_PAGE_APPS))
308 return false;
309
310 int offset;
311 if (abs(event.x_offset()) > abs(event.y_offset()))
312 offset = event.x_offset();
313 else
314 offset = event.y_offset();
315
316 if (abs(offset) > kMinMouseWheelToSwitchPage) {
317 if (!GetAppsPaginationModel()->has_transition()) {
318 GetAppsPaginationModel()->SelectPageRelative(offset > 0 ? -1 : 1, true);
319 }
320 return true;
321 }
322
323 return false;
324 }
325
326 void ContentsView::TotalPagesChanged() { 294 void ContentsView::TotalPagesChanged() {
327 } 295 }
328 296
329 void ContentsView::SelectedPageChanged(int old_selected, int new_selected) { 297 void ContentsView::SelectedPageChanged(int old_selected, int new_selected) {
330 } 298 }
331 299
332 void ContentsView::TransitionStarted() { 300 void ContentsView::TransitionStarted() {
333 } 301 }
334 302
335 void ContentsView::TransitionChanged() { 303 void ContentsView::TransitionChanged() {
336 UpdatePageBounds(); 304 UpdatePageBounds();
337 } 305 }
338 306
339 void ContentsView::OnGestureEvent(ui::GestureEvent* event) {
340 if (!IsNamedPageActive(NAMED_PAGE_APPS))
341 return;
342
343 switch (event->type()) {
344 case ui::ET_GESTURE_SCROLL_BEGIN:
345 GetAppsPaginationModel()->StartScroll();
346 event->SetHandled();
347 return;
348 case ui::ET_GESTURE_SCROLL_UPDATE:
349 // event->details.scroll_x() > 0 means moving contents to right. That is,
350 // transitioning to previous page.
351 GetAppsPaginationModel()->UpdateScroll(event->details().scroll_x() /
352 GetContentsBounds().width());
353 event->SetHandled();
354 return;
355 case ui::ET_GESTURE_SCROLL_END:
356 GetAppsPaginationModel()->EndScroll(
357 GetAppsPaginationModel()->transition().progress <
358 kFinishTransitionThreshold);
359 event->SetHandled();
360 return;
361 case ui::ET_SCROLL_FLING_START: {
362 GetAppsPaginationModel()->EndScroll(true);
363 if (fabs(event->details().velocity_x()) > kMinHorizVelocityToSwitchPage) {
364 GetAppsPaginationModel()->SelectPageRelative(
365 event->details().velocity_x() < 0 ? 1 : -1, true);
366 }
367 event->SetHandled();
368 return;
369 }
370 default:
371 break;
372 }
373 }
374
375 void ContentsView::OnScrollEvent(ui::ScrollEvent* event) {
376 if (!IsNamedPageActive(NAMED_PAGE_APPS) ||
377 event->type() == ui::ET_SCROLL_FLING_CANCEL) {
378 return;
379 }
380
381 float offset;
382 if (std::abs(event->x_offset()) > std::abs(event->y_offset()))
383 offset = event->x_offset();
384 else
385 offset = event->y_offset();
386
387 if (std::abs(offset) > kMinScrollToSwitchPage) {
388 if (!GetAppsPaginationModel()->has_transition()) {
389 GetAppsPaginationModel()->SelectPageRelative(offset > 0 ? -1 : 1, true);
390 }
391 event->SetHandled();
392 event->StopPropagation();
393 }
394 }
395
396 } // namespace app_list 307 } // namespace app_list
OLDNEW
« no previous file with comments | « ui/app_list/views/contents_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698