OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #import "ui/app_list/cocoa/apps_collection_view_drag_manager.h" | 5 #import "ui/app_list/cocoa/apps_collection_view_drag_manager.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/mac/foundation_util.h" | 8 #include "base/mac/foundation_util.h" |
9 #import "ui/app_list/cocoa/apps_grid_controller.h" | 9 #import "ui/app_list/cocoa/apps_grid_controller.h" |
10 #import "ui/app_list/cocoa/apps_grid_view_item.h" | 10 #import "ui/app_list/cocoa/apps_grid_view_item.h" |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 return NSNotFound; | 138 return NSNotFound; |
139 } | 139 } |
140 | 140 |
141 - (void)initiateDrag:(NSEvent*)theEvent { | 141 - (void)initiateDrag:(NSEvent*)theEvent { |
142 DCHECK_LT(itemHitIndex_, [gridController_ itemCount]); | 142 DCHECK_LT(itemHitIndex_, [gridController_ itemCount]); |
143 dragging_ = YES; | 143 dragging_ = YES; |
144 | 144 |
145 if (!itemDragController_) { | 145 if (!itemDragController_) { |
146 itemDragController_.reset( | 146 itemDragController_.reset( |
147 [[ItemDragController alloc] initWithGridCellSize:cellSize_]); | 147 [[ItemDragController alloc] initWithGridCellSize:cellSize_]); |
148 [[gridController_ view] addSubview:[itemDragController_ view]]; | 148 [[[gridController_ view] superview] addSubview:[itemDragController_ view]]; |
149 } | 149 } |
150 | 150 |
151 [itemDragController_ initiate:[gridController_ itemAtIndex:itemHitIndex_] | 151 [itemDragController_ initiate:[gridController_ itemAtIndex:itemHitIndex_] |
152 mouseDownLocation:mouseDownLocation_ | 152 mouseDownLocation:mouseDownLocation_ |
153 currentLocation:[theEvent locationInWindow] | 153 currentLocation:[theEvent locationInWindow] |
154 timestamp:[theEvent timestamp]]; | 154 timestamp:[theEvent timestamp]]; |
155 | 155 |
156 itemDragIndex_ = itemHitIndex_; | 156 itemDragIndex_ = itemHitIndex_; |
157 [self updateDrag:theEvent]; | 157 [self updateDrag:theEvent]; |
158 } | 158 } |
159 | 159 |
160 - (void)updateDrag:(NSEvent*)theEvent { | 160 - (void)updateDrag:(NSEvent*)theEvent { |
161 [itemDragController_ update:[theEvent locationInWindow] | 161 [itemDragController_ update:[theEvent locationInWindow] |
162 timestamp:[theEvent timestamp]]; | 162 timestamp:[theEvent timestamp]]; |
| 163 [gridController_ maybeChangePageForPoint:[theEvent locationInWindow]]; |
| 164 |
163 size_t visiblePage = [gridController_ visiblePage]; | 165 size_t visiblePage = [gridController_ visiblePage]; |
164 size_t itemIndexOver = [self itemIndexForPage:visiblePage | 166 size_t itemIndexOver = [self itemIndexForPage:visiblePage |
165 hitWithEvent:theEvent]; | 167 hitWithEvent:theEvent]; |
166 DCHECK_NE(0u, [gridController_ itemCount]); | 168 DCHECK_NE(0u, [gridController_ itemCount]); |
167 if (itemIndexOver == NSNotFound) { | 169 if (itemIndexOver == NSNotFound) { |
168 if (visiblePage != [gridController_ pageCount] - 1) | 170 if (visiblePage != [gridController_ pageCount] - 1) |
169 return; | 171 return; |
170 | 172 |
171 // If nothing was hit, but the last page is shown, move to the end. | 173 // If nothing was hit, but the last page is shown, move to the end. |
172 itemIndexOver = [gridController_ itemCount] - 1; | 174 itemIndexOver = [gridController_ itemCount] - 1; |
(...skipping 15 matching lines...) Expand all Loading... |
188 | 190 |
189 [gridController_ moveItemInView:itemDragIndex_ | 191 [gridController_ moveItemInView:itemDragIndex_ |
190 toItemIndex:itemHitIndex_]; | 192 toItemIndex:itemHitIndex_]; |
191 itemDragIndex_ = itemHitIndex_; | 193 itemDragIndex_ = itemHitIndex_; |
192 [self completeDrag]; | 194 [self completeDrag]; |
193 itemHitIndex_ = NSNotFound; // Ignore future mouse events for this drag. | 195 itemHitIndex_ = NSNotFound; // Ignore future mouse events for this drag. |
194 } | 196 } |
195 | 197 |
196 - (void)completeDrag { | 198 - (void)completeDrag { |
197 DCHECK_GE(itemDragIndex_, 0u); | 199 DCHECK_GE(itemDragIndex_, 0u); |
| 200 [gridController_ cancelScrollTimer]; |
198 AppsGridViewItem* item = [gridController_ itemAtIndex:itemDragIndex_]; | 201 AppsGridViewItem* item = [gridController_ itemAtIndex:itemDragIndex_]; |
199 | 202 |
200 // The item could still be animating in the NSCollectionView, so ask it where | 203 // The item could still be animating in the NSCollectionView, so ask it where |
201 // it would place the item. | 204 // it would place the item. |
202 NSCollectionView* pageView = base::mac::ObjCCastStrict<NSCollectionView>( | 205 NSCollectionView* pageView = base::mac::ObjCCastStrict<NSCollectionView>( |
203 [[item view] superview]); | 206 [[item view] superview]); |
204 size_t indexInPage = itemDragIndex_ % (rows_ * columns_); | 207 size_t indexInPage = itemDragIndex_ % (rows_ * columns_); |
205 NSPoint targetOrigin = [[gridController_ view] | 208 NSPoint targetOrigin = [[[itemDragController_ view] superview] |
206 convertPoint:[pageView frameForItemAtIndex:indexInPage].origin | 209 convertPoint:[pageView frameForItemAtIndex:indexInPage].origin |
207 fromView:pageView]; | 210 fromView:pageView]; |
208 | 211 |
209 [itemDragController_ complete:item | 212 [itemDragController_ complete:item |
210 targetOrigin:targetOrigin]; | 213 targetOrigin:targetOrigin]; |
211 [gridController_ moveItemWithIndex:itemHitIndex_ | 214 [gridController_ moveItemWithIndex:itemHitIndex_ |
212 toModelIndex:itemDragIndex_]; | 215 toModelIndex:itemDragIndex_]; |
213 | 216 |
214 dragging_ = NO; | 217 dragging_ = NO; |
215 } | 218 } |
(...skipping 15 matching lines...) Expand all Loading... |
231 | 234 |
232 - (void)mouseUp:(NSEvent*)theEvent { | 235 - (void)mouseUp:(NSEvent*)theEvent { |
233 [factory_ onMouseUp:theEvent]; | 236 [factory_ onMouseUp:theEvent]; |
234 } | 237 } |
235 | 238 |
236 - (BOOL)acceptsFirstResponder { | 239 - (BOOL)acceptsFirstResponder { |
237 return NO; | 240 return NO; |
238 } | 241 } |
239 | 242 |
240 @end | 243 @end |
OLD | NEW |