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

Unified Diff: ui/app_list/views/apps_grid_view.cc

Issue 524503003: Refactor app list scrolling: introduce the PaginationController class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ares-appgrid-vertical-scroll
Patch Set: Explicit static_cast<int>. Created 6 years, 4 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/views/apps_grid_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/views/apps_grid_view.cc
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc
index 3266fa409f4cfbc5234aa0fd22452060cb4140e2..ba178cfb7b1201dddefefbc9e6bd91571ff01378 100644
--- a/ui/app_list/views/apps_grid_view.cc
+++ b/ui/app_list/views/apps_grid_view.cc
@@ -13,6 +13,7 @@
#include "ui/app_list/app_list_folder_item.h"
#include "ui/app_list/app_list_item.h"
#include "ui/app_list/app_list_switches.h"
+#include "ui/app_list/pagination_controller.h"
#include "ui/app_list/views/app_list_drag_and_drop_host.h"
#include "ui/app_list/views/app_list_folder_view.h"
#include "ui/app_list/views/app_list_item_view.h"
@@ -23,6 +24,7 @@
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/events/event.h"
#include "ui/gfx/animation/animation.h"
+#include "ui/gfx/geometry/point.h"
#include "ui/views/border.h"
#include "ui/views/view_model_utils.h"
#include "ui/views/widget/widget.h"
@@ -92,13 +94,6 @@ const int kFolderItemReparentDelay = 50;
// UI.
const int kFolderDroppingCircleRadius = 15;
-// Constants for dealing with scroll events.
-const int kMinMouseWheelToSwitchPage = 20;
-const int kMinScrollToSwitchPage = 20;
-const int kMinHorizVelocityToSwitchPage = 800;
-
-const double kFinishTransitionThreshold = 0.33;
-
// RowMoveAnimationDelegate is used when moving an item into a different row.
// Before running the animation, the item's layer is re-created and kept in
// the original position, then the item is moved to just before its target
@@ -369,6 +364,13 @@ AppsGridView::AppsGridView(AppsGridViewDelegate* delegate)
kOverscrollPageTransitionDurationMs);
pagination_model_.AddObserver(this);
+ // The experimental app list transitions vertically.
+ PaginationController::ScrollAxis scroll_axis =
+ app_list::switches::IsExperimentalAppListEnabled()
+ ? PaginationController::SCROLL_AXIS_VERTICAL
+ : PaginationController::SCROLL_AXIS_HORIZONTAL;
+ pagination_controller_.reset(
+ new PaginationController(&pagination_model_, scroll_axis));
page_switcher_view_ = new PageSwitcher(&pagination_model_);
AddChildView(page_switcher_view_);
}
@@ -961,27 +963,8 @@ bool AppsGridView::OnKeyReleased(const ui::KeyEvent& event) {
}
bool AppsGridView::OnMouseWheel(const ui::MouseWheelEvent& event) {
- int offset;
- if (GetScrollAxis() == SCROLL_AXIS_HORIZONTAL) {
- // If the view scrolls horizontally, both horizontal and vertical scroll
- // events are valid (since most mouse wheels only have vertical scrolling).
- if (abs(event.x_offset()) > abs(event.y_offset()))
- offset = event.x_offset();
- else
- offset = event.y_offset();
- } else {
- // If the view scrolls vertically, only vertical scroll events are valid.
- offset = event.y_offset();
- }
-
- if (abs(offset) > kMinMouseWheelToSwitchPage) {
- if (!pagination_model_.has_transition()) {
- pagination_model_.SelectPageRelative(offset > 0 ? -1 : 1, true);
- }
- return true;
- }
-
- return false;
+ return pagination_controller_->OnScroll(
+ gfx::Point(event.x_offset(), event.y_offset()));
}
void AppsGridView::ViewHierarchyChanged(
@@ -1003,66 +986,16 @@ void AppsGridView::ViewHierarchyChanged(
}
void AppsGridView::OnGestureEvent(ui::GestureEvent* event) {
- const ui::GestureEventDetails& details = event->details();
- switch (event->type()) {
- case ui::ET_GESTURE_SCROLL_BEGIN:
- pagination_model_.StartScroll();
- event->SetHandled();
- return;
- case ui::ET_GESTURE_SCROLL_UPDATE: {
- float scroll = GetScrollAxis() == SCROLL_AXIS_HORIZONTAL
- ? details.scroll_x()
- : details.scroll_y();
- gfx::Rect bounds(GetContentsBounds());
- int size = GetScrollAxis() == SCROLL_AXIS_HORIZONTAL ? bounds.width()
- : bounds.height();
- // scroll > 0 means moving contents right or down. That is, transitioning
- // to the previous page.
- pagination_model_.UpdateScroll(scroll / size);
- event->SetHandled();
- return;
- }
- case ui::ET_GESTURE_SCROLL_END:
- pagination_model_.EndScroll(pagination_model_.transition().progress <
- kFinishTransitionThreshold);
- event->SetHandled();
- return;
- case ui::ET_SCROLL_FLING_START: {
- float velocity = GetScrollAxis() == SCROLL_AXIS_HORIZONTAL
- ? details.velocity_x()
- : details.velocity_y();
- pagination_model_.EndScroll(true);
- if (fabs(velocity) > kMinHorizVelocityToSwitchPage)
- pagination_model_.SelectPageRelative(velocity < 0 ? 1 : -1, true);
- event->SetHandled();
- return;
- }
- default:
- break;
- }
+ pagination_controller_->OnGestureEvent(event, GetContentsBounds());
}
void AppsGridView::OnScrollEvent(ui::ScrollEvent* event) {
if (event->type() == ui::ET_SCROLL_FLING_CANCEL)
return;
- float offset;
- if (GetScrollAxis() == SCROLL_AXIS_HORIZONTAL) {
- // If the view scrolls horizontally, both horizontal and vertical scroll
- // events are valid (vertical scroll events simulate mouse wheel).
- if (std::abs(event->x_offset()) > std::abs(event->y_offset()))
- offset = event->x_offset();
- else
- offset = event->y_offset();
- } else {
- // If the view scrolls vertically, only vertical scroll events are valid.
- offset = event->y_offset();
- }
-
- if (std::abs(offset) > kMinScrollToSwitchPage) {
- if (!pagination_model_.has_transition()) {
- pagination_model_.SelectPageRelative(offset > 0 ? -1 : 1, true);
- }
+ if (pagination_controller_->OnScroll(
+ gfx::Point(static_cast<int>(event->x_offset()),
+ static_cast<int>(event->y_offset())))) {
calamity 2014/09/01 01:49:30 Maybe gfx::ToFlooredPoint(gfx::PointF(event->x_off
Matt Giuca 2014/09/01 03:02:26 Done.
event->SetHandled();
event->StopPropagation();
}
@@ -1270,7 +1203,8 @@ void AppsGridView::CalculateIdealBounds() {
int x_offset = 0;
int y_offset = 0;
- if (GetScrollAxis() == SCROLL_AXIS_HORIZONTAL) {
+ if (pagination_controller_->scroll_axis() ==
+ PaginationController::SCROLL_AXIS_HORIZONTAL) {
if (view_index.page < current_page)
x_offset = -page_width;
else if (view_index.page > current_page)
@@ -2289,12 +2223,4 @@ void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index,
target_view->SetAsAttemptedFolderTarget(is_target_folder);
}
-// static
-AppsGridView::ScrollAxis AppsGridView::GetScrollAxis() {
- // The experimental app list transitions vertically.
- return app_list::switches::IsExperimentalAppListEnabled()
- ? SCROLL_AXIS_VERTICAL
- : SCROLL_AXIS_HORIZONTAL;
-}
-
} // namespace app_list
« no previous file with comments | « ui/app_list/views/apps_grid_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698