Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/pagination_model.h" | |
|
calamity
2014/08/26 08:12:34
This is already included in the header.
Matt Giuca
2014/08/28 00:35:21
Done.
| |
| 14 #include "ui/app_list/views/app_list_folder_view.h" | 15 #include "ui/app_list/views/app_list_folder_view.h" |
| 15 #include "ui/app_list/views/app_list_main_view.h" | 16 #include "ui/app_list/views/app_list_main_view.h" |
| 16 #include "ui/app_list/views/apps_container_view.h" | 17 #include "ui/app_list/views/apps_container_view.h" |
| 17 #include "ui/app_list/views/apps_grid_view.h" | 18 #include "ui/app_list/views/apps_grid_view.h" |
| 18 #include "ui/app_list/views/contents_switcher_view.h" | 19 #include "ui/app_list/views/contents_switcher_view.h" |
| 19 #include "ui/app_list/views/search_result_list_view.h" | 20 #include "ui/app_list/views/search_result_list_view.h" |
| 20 #include "ui/app_list/views/start_page_view.h" | 21 #include "ui/app_list/views/start_page_view.h" |
| 21 #include "ui/events/event.h" | 22 #include "ui/events/event.h" |
| 22 #include "ui/resources/grit/ui_resources.h" | 23 #include "ui/resources/grit/ui_resources.h" |
| 23 #include "ui/views/view_model.h" | 24 #include "ui/views/view_model.h" |
| 24 #include "ui/views/view_model_utils.h" | 25 #include "ui/views/view_model_utils.h" |
| 25 | 26 |
| 26 namespace app_list { | 27 namespace app_list { |
| 27 | 28 |
| 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) | 29 ContentsView::ContentsView(AppListMainView* app_list_main_view) |
| 39 : search_results_view_(NULL), | 30 : search_results_view_(NULL), |
| 40 start_page_view_(NULL), | 31 start_page_view_(NULL), |
| 41 app_list_main_view_(app_list_main_view), | 32 app_list_main_view_(app_list_main_view), |
| 42 contents_switcher_view_(NULL), | 33 contents_switcher_view_(NULL), |
| 43 view_model_(new views::ViewModel), | 34 view_model_(new views::ViewModel), |
| 44 page_before_search_(0) { | 35 page_before_search_(0) { |
| 45 pagination_model_.AddObserver(this); | 36 pagination_model_.AddObserver(this); |
| 46 } | 37 } |
| 47 | 38 |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 239 | 230 |
| 240 PaginationModel* ContentsView::GetAppsPaginationModel() { | 231 PaginationModel* ContentsView::GetAppsPaginationModel() { |
| 241 return apps_container_view_->apps_grid_view()->pagination_model(); | 232 return apps_container_view_->apps_grid_view()->pagination_model(); |
| 242 } | 233 } |
| 243 | 234 |
| 244 void ContentsView::ShowFolderContent(AppListFolderItem* item) { | 235 void ContentsView::ShowFolderContent(AppListFolderItem* item) { |
| 245 apps_container_view_->ShowActiveFolder(item); | 236 apps_container_view_->ShowActiveFolder(item); |
| 246 } | 237 } |
| 247 | 238 |
| 248 void ContentsView::Prerender() { | 239 void ContentsView::Prerender() { |
| 249 const int selected_page = | 240 apps_container_view_->apps_grid_view()->Prerender(); |
| 250 std::max(0, GetAppsPaginationModel()->selected_page()); | |
| 251 apps_container_view_->apps_grid_view()->Prerender(selected_page); | |
| 252 } | 241 } |
| 253 | 242 |
| 254 views::View* ContentsView::GetPageView(int index) { | 243 views::View* ContentsView::GetPageView(int index) { |
| 255 return view_model_->view_at(index); | 244 return view_model_->view_at(index); |
| 256 } | 245 } |
| 257 | 246 |
| 258 void ContentsView::AddBlankPageForTesting() { | 247 void ContentsView::AddBlankPageForTesting() { |
| 259 AddLauncherPage(new views::View, 0); | 248 AddLauncherPage(new views::View, 0); |
| 260 } | 249 } |
| 261 | 250 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 306 for (int i = 0; i < view_model_->view_size(); ++i) { | 295 for (int i = 0; i < view_model_->view_size(); ++i) { |
| 307 view_model_->view_at(i)->SetBoundsRect( | 296 view_model_->view_at(i)->SetBoundsRect( |
| 308 i == pagination_model_.SelectedTargetPage() ? rect : offscreen_target); | 297 i == pagination_model_.SelectedTargetPage() ? rect : offscreen_target); |
| 309 } | 298 } |
| 310 } | 299 } |
| 311 | 300 |
| 312 bool ContentsView::OnKeyPressed(const ui::KeyEvent& event) { | 301 bool ContentsView::OnKeyPressed(const ui::KeyEvent& event) { |
| 313 return view_model_->view_at(GetActivePageIndex())->OnKeyPressed(event); | 302 return view_model_->view_at(GetActivePageIndex())->OnKeyPressed(event); |
| 314 } | 303 } |
| 315 | 304 |
| 316 bool ContentsView::OnMouseWheel(const ui::MouseWheelEvent& event) { | |
| 317 if (!IsNamedPageActive(NAMED_PAGE_APPS)) | |
| 318 return false; | |
| 319 | |
| 320 int offset; | |
| 321 if (abs(event.x_offset()) > abs(event.y_offset())) | |
| 322 offset = event.x_offset(); | |
| 323 else | |
| 324 offset = event.y_offset(); | |
| 325 | |
| 326 if (abs(offset) > kMinMouseWheelToSwitchPage) { | |
| 327 if (!GetAppsPaginationModel()->has_transition()) { | |
| 328 GetAppsPaginationModel()->SelectPageRelative(offset > 0 ? -1 : 1, true); | |
| 329 } | |
| 330 return true; | |
| 331 } | |
| 332 | |
| 333 return false; | |
| 334 } | |
| 335 | |
| 336 void ContentsView::TotalPagesChanged() { | 305 void ContentsView::TotalPagesChanged() { |
| 337 } | 306 } |
| 338 | 307 |
| 339 void ContentsView::SelectedPageChanged(int old_selected, int new_selected) { | 308 void ContentsView::SelectedPageChanged(int old_selected, int new_selected) { |
| 340 } | 309 } |
| 341 | 310 |
| 342 void ContentsView::TransitionStarted() { | 311 void ContentsView::TransitionStarted() { |
| 343 } | 312 } |
| 344 | 313 |
| 345 void ContentsView::TransitionChanged() { | 314 void ContentsView::TransitionChanged() { |
| 346 UpdatePageBounds(); | 315 UpdatePageBounds(); |
| 347 } | 316 } |
| 348 | 317 |
| 349 void ContentsView::OnGestureEvent(ui::GestureEvent* event) { | |
| 350 if (!IsNamedPageActive(NAMED_PAGE_APPS)) | |
| 351 return; | |
| 352 | |
| 353 switch (event->type()) { | |
| 354 case ui::ET_GESTURE_SCROLL_BEGIN: | |
| 355 GetAppsPaginationModel()->StartScroll(); | |
| 356 event->SetHandled(); | |
| 357 return; | |
| 358 case ui::ET_GESTURE_SCROLL_UPDATE: | |
| 359 // event->details.scroll_x() > 0 means moving contents to right. That is, | |
| 360 // transitioning to previous page. | |
| 361 GetAppsPaginationModel()->UpdateScroll(event->details().scroll_x() / | |
| 362 GetContentsBounds().width()); | |
| 363 event->SetHandled(); | |
| 364 return; | |
| 365 case ui::ET_GESTURE_SCROLL_END: | |
| 366 GetAppsPaginationModel()->EndScroll( | |
| 367 GetAppsPaginationModel()->transition().progress < | |
| 368 kFinishTransitionThreshold); | |
| 369 event->SetHandled(); | |
| 370 return; | |
| 371 case ui::ET_SCROLL_FLING_START: { | |
| 372 GetAppsPaginationModel()->EndScroll(true); | |
| 373 if (fabs(event->details().velocity_x()) > kMinHorizVelocityToSwitchPage) { | |
| 374 GetAppsPaginationModel()->SelectPageRelative( | |
| 375 event->details().velocity_x() < 0 ? 1 : -1, true); | |
| 376 } | |
| 377 event->SetHandled(); | |
| 378 return; | |
| 379 } | |
| 380 default: | |
| 381 break; | |
| 382 } | |
| 383 } | |
| 384 | |
| 385 void ContentsView::OnScrollEvent(ui::ScrollEvent* event) { | |
| 386 if (!IsNamedPageActive(NAMED_PAGE_APPS) || | |
| 387 event->type() == ui::ET_SCROLL_FLING_CANCEL) { | |
| 388 return; | |
| 389 } | |
| 390 | |
| 391 float offset; | |
| 392 if (std::abs(event->x_offset()) > std::abs(event->y_offset())) | |
| 393 offset = event->x_offset(); | |
| 394 else | |
| 395 offset = event->y_offset(); | |
| 396 | |
| 397 if (std::abs(offset) > kMinScrollToSwitchPage) { | |
| 398 if (!GetAppsPaginationModel()->has_transition()) { | |
| 399 GetAppsPaginationModel()->SelectPageRelative(offset > 0 ? -1 : 1, true); | |
| 400 } | |
| 401 event->SetHandled(); | |
| 402 event->StopPropagation(); | |
| 403 } | |
| 404 } | |
| 405 | |
| 406 } // namespace app_list | 318 } // namespace app_list |
| OLD | NEW |