• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef UI_APP_LIST_PAGINATION_CONTROLLER_H_
6 #define UI_APP_LIST_PAGINATION_CONTROLLER_H_
7 
8 #include "ui/app_list/app_list_export.h"
9 
10 namespace gfx {
11 class Vector2d;
12 class Rect;
13 }
14 
15 namespace ui {
16 class GestureEvent;
17 }
18 
19 namespace app_list {
20 
21 class PaginationModel;
22 
23 // Receives user scroll events from various sources (mouse wheel, touchpad,
24 // touch gestures) and manipulates a PaginationModel as necessary.
25 class APP_LIST_EXPORT PaginationController {
26  public:
27   enum ScrollAxis { SCROLL_AXIS_HORIZONTAL, SCROLL_AXIS_VERTICAL };
28 
29   // Creates a PaginationController. Does not take ownership of |model|. The
30   // |model| is required to outlive this PaginationController. |scroll_axis|
31   // specifies the axis in which the pages will scroll.
32   PaginationController(PaginationModel* model, ScrollAxis scroll_axis);
33 
scroll_axis()34   ScrollAxis scroll_axis() const { return scroll_axis_; }
35 
36   // Handles a mouse wheel or touchpad scroll event in the area represented by
37   // the PaginationModel. |offset| is the number of units scrolled in each axis.
38   // Returns true if the event was captured and there was some room to scroll.
39   bool OnScroll(const gfx::Vector2d& offset);
40 
41   // Handles a touch gesture event in the area represented by the
42   // PaginationModel. Returns true if the event was captured.
43   bool OnGestureEvent(const ui::GestureEvent& event, const gfx::Rect& bounds);
44 
45  private:
46   PaginationModel* pagination_model_;  // Not owned.
47   ScrollAxis scroll_axis_;
48 };
49 
50 }  // namespace app_list
51 
52 #endif  // UI_APP_LIST_PAGINATION_CONTROLLER_H_
53