Index: ui/app_list/views/apps_grid_view.h |
diff --git a/ui/app_list/views/apps_grid_view.h b/ui/app_list/views/apps_grid_view.h |
index f98843bd92d8f95f33abaaf5f35695544fea7341..fefa9f23d2f437ea80ecaed85e2202af5f5d0ecf 100644 |
--- a/ui/app_list/views/apps_grid_view.h |
+++ b/ui/app_list/views/apps_grid_view.h |
@@ -235,6 +235,12 @@ class APP_LIST_EXPORT AppsGridView : public views::View, |
bool operator!=(const Index& other) const { |
return page != other.page || slot != other.slot; |
} |
+ bool operator<(const Index& other) const { |
+ if (page != other.page) |
+ return page < other.page; |
+ |
+ return slot < other.slot; |
+ } |
int page; // Which page an item view is on. |
int slot; // Which slot in the page an item view is in. |
@@ -266,6 +272,9 @@ class APP_LIST_EXPORT AppsGridView : public views::View, |
Index GetIndexOfView(const views::View* view) const; |
views::View* GetViewAtIndex(const Index& index) const; |
+ // Gets the index of the AppListItemView at the end of the view model. |
+ Index GetLastViewIndex() const; |
+ |
void MoveSelected(int page_delta, int slot_x_delta, int slot_y_delta); |
void CalculateIdealBounds(); |
@@ -288,19 +297,19 @@ class APP_LIST_EXPORT AppsGridView : public views::View, |
void ExtractDragLocation(const ui::LocatedEvent& event, |
gfx::Point* drag_point); |
- // Calculates reorder and folder drop targets based on |drag_point|. |
- // |drag_point| is in the grid view's coordinates. When |
- // |use_page_button_hovering| is true and |drag_point| is hovering on a page |
- // button, use the last slot on that page as drop target. |
- void CalculateDropTarget(const gfx::Point& drag_point, |
- bool use_page_button_hovering); |
+ // Updates |reorder_drop_target_|, |folder_drop_target_| and |drop_attempt_| |
+ // based on |drag_view_|'s position. |
+ void CalculateDropTarget(); |
- // Same as CalculateDropTarget, but with folder UI enabled. The drop target |
- // can be either a target for re-ordering, or a target folder to move the |
- // dragged item into if |drag_view_| enters its re-ordering or folder |
- // dropping circle. |
- void CalculateDropTargetWithFolderEnabled(const gfx::Point& drag_point, |
- bool use_page_button_hovering); |
+ // If |point| is a valid folder drop target, returns true and sets |
+ // |drop_target| to the index of the view to do a folder drop for. |
+ bool CalculateFolderDropTarget(const gfx::Point& point, |
+ Index* drop_target) const; |
+ |
+ // Calculates the reorder target |point| and sets |drop_target| to the index |
+ // of the view to reorder. |
+ void CalculateReorderDropTarget(const gfx::Point& point, |
+ Index* drop_target) const; |
// Prepares |drag_and_drop_host_| for dragging. |grid_location| contains |
// the drag point in this grid view's coordinates. |
@@ -388,33 +397,20 @@ class APP_LIST_EXPORT AppsGridView : public views::View, |
// Whether target specified by |drap_target| can accept more items to be |
// dropped into it. |
- bool CanDropIntoTarget(const Index& drop_target); |
- |
- // Calculates the visual index of the nearest tile for which |drag_view_| |
- // enters either its re-ordering or folder dropping circle. |
- void CalculateNearestTileForDragView(); |
- |
- // Calculates |nearest_tile| in which |vertex| of the |drag_view| is |
- // enclosed. |
- // *|nearest_tile| and *|d_min| will be updated based on the calculation. |
- // *|d_min| is the distance between |nearest_tile| and |drag_view_|. |
- void CalculateNearestTileForVertex( |
- const gfx::Point& vertex, Index* nearest_tile, int* d_min); |
- |
- // Returns the bounds of the tile in which |point| is enclosed if there |
- // is a valid item sits on the tile. |
- gfx::Rect GetTileBoundsForPoint(const gfx::Point& point, Index* tile_index); |
+ bool CanDropIntoTarget(const Index& drop_target) const; |
// Returns the size of the entire tile grid. |
gfx::Size GetTileGridSize() const; |
- // Gets the expected bounds of a tile located at |row| and |col| on the |
- // current page. |
- gfx::Rect GetExpectedTileBounds(int row, int col) const; |
+ // Returns the slot number which the given |point| falls into or the closest |
+ // slot if |point| is outside the page's bounds. |
+ Index GetNearestTileIndexForPoint(const gfx::Point& point) const; |
- // Returns true if the slot of |index| is the last possible slot to drop |
- // an item, i.e. first empty slot next to the last item on the last page. |
- bool IsLastPossibleDropTarget(const Index& index) const; |
+ // Gets the bounds of the tile located at |slot| on the current page. |
+ gfx::Rect GetExpectedTileBounds(int slot) const; |
+ |
+ // Gets the bounds of the tile located at |row| and |col| on the current page. |
+ gfx::Rect GetExpectedTileBounds(int row, int col) const; |
// Gets the item view located at |slot| on the current page. If there is |
// no item located at |slot|, returns NULL. |
@@ -520,6 +516,10 @@ class APP_LIST_EXPORT AppsGridView : public views::View, |
// The most recent folder drop target. |
Index folder_drop_target_; |
+ // The index where an empty slot has been left as a placeholder for the |
+ // reorder drop target. This updates when the reorder animation triggers. |
+ Index reorder_placeholder_; |
+ |
// The current action that ending a drag will perform. |
DropAttempt drop_attempt_; |