blob: 5281dc1bfb073091503182bbbf897ce4143bbc1d [file] [log] [blame]
// Copyright 2014 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.
#ifndef UI_APP_LIST_PAGINATION_CONTROLLER_H_
#define UI_APP_LIST_PAGINATION_CONTROLLER_H_
#include "ui/app_list/app_list_export.h"
namespace gfx {
class Vector2d;
class Rect;
}
namespace ui {
class GestureEvent;
}
namespace app_list {
class PaginationModel;
// Receives user scroll events from various sources (mouse wheel, touchpad,
// touch gestures) and manipulates a PaginationModel as necessary.
class APP_LIST_EXPORT PaginationController {
public:
enum ScrollEventType { SCROLL_MOUSE_WHEEL, SCROLL_TOUCHPAD };
enum ScrollAxis { SCROLL_AXIS_HORIZONTAL, SCROLL_AXIS_VERTICAL };
// Creates a PaginationController. Does not take ownership of |model|. The
// |model| is required to outlive this PaginationController. |scroll_axis|
// specifies the axis in which the pages will scroll.
PaginationController(PaginationModel* model, ScrollAxis scroll_axis);
ScrollAxis scroll_axis() const { return scroll_axis_; }
// Handles a mouse wheel or touchpad scroll event in the area represented by
// the PaginationModel. |offset| is the number of units scrolled in each axis.
// Returns true if the event was captured and there was some room to scroll.
bool OnScroll(const gfx::Vector2d& offset, ScrollEventType type);
// Handles a touch gesture event in the area represented by the
// PaginationModel. Returns true if the event was captured.
bool OnGestureEvent(const ui::GestureEvent& event, const gfx::Rect& bounds);
private:
PaginationModel* pagination_model_; // Not owned.
ScrollAxis scroll_axis_;
};
} // namespace app_list
#endif // UI_APP_LIST_PAGINATION_CONTROLLER_H_