| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/browser/cocoa/web_drag_source.h" | 5 #import "chrome/browser/cocoa/web_drag_source.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 10 #include "base/task.h" | 10 #include "base/task.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 - (void)fillPasteboard; | 115 - (void)fillPasteboard; |
| 116 - (NSImage*)dragImage; | 116 - (NSImage*)dragImage; |
| 117 | 117 |
| 118 @end // @interface WebDragSource(Private) | 118 @end // @interface WebDragSource(Private) |
| 119 | 119 |
| 120 | 120 |
| 121 @implementation WebDragSource | 121 @implementation WebDragSource |
| 122 | 122 |
| 123 - (id)initWithContentsView:(TabContentsViewCocoa*)contentsView | 123 - (id)initWithContentsView:(TabContentsViewCocoa*)contentsView |
| 124 dropData:(const WebDropData*)dropData | 124 dropData:(const WebDropData*)dropData |
| 125 pasteboard:(NSPasteboard*)pboard { | 125 pasteboard:(NSPasteboard*)pboard |
| 126 dragOperationMask:(NSDragOperation)dragOperationMask { |
| 126 if ((self = [super init])) { | 127 if ((self = [super init])) { |
| 127 contentsView_ = contentsView; | 128 contentsView_ = contentsView; |
| 128 DCHECK(contentsView_); | 129 DCHECK(contentsView_); |
| 129 | 130 |
| 130 dropData_.reset(new WebDropData(*dropData)); | 131 dropData_.reset(new WebDropData(*dropData)); |
| 131 DCHECK(dropData_.get()); | 132 DCHECK(dropData_.get()); |
| 132 | 133 |
| 133 pasteboard_.reset([pboard retain]); | 134 pasteboard_.reset([pboard retain]); |
| 134 DCHECK(pasteboard_.get()); | 135 DCHECK(pasteboard_.get()); |
| 135 | 136 |
| 137 dragOperationMask_ = dragOperationMask; |
| 138 |
| 136 [self fillPasteboard]; | 139 [self fillPasteboard]; |
| 137 } | 140 } |
| 138 | 141 |
| 139 return self; | 142 return self; |
| 140 } | 143 } |
| 141 | 144 |
| 145 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal { |
| 146 return dragOperationMask_; |
| 147 } |
| 148 |
| 142 - (void)lazyWriteToPasteboard:(NSPasteboard*)pboard forType:(NSString*)type { | 149 - (void)lazyWriteToPasteboard:(NSPasteboard*)pboard forType:(NSString*)type { |
| 143 // Be extra paranoid; avoid crashing. | 150 // Be extra paranoid; avoid crashing. |
| 144 if (!dropData_.get()) { | 151 if (!dropData_.get()) { |
| 145 NOTREACHED() << "No drag-and-drop data available for lazy write."; | 152 NOTREACHED() << "No drag-and-drop data available for lazy write."; |
| 146 return; | 153 return; |
| 147 } | 154 } |
| 148 | 155 |
| 149 // HTML. | 156 // HTML. |
| 150 if ([type isEqualToString:NSHTMLPboardType]) { | 157 if ([type isEqualToString:NSHTMLPboardType]) { |
| 151 DCHECK(!dropData_->text_html.empty()); | 158 DCHECK(!dropData_->text_html.empty()); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 [contentsView_ dragImage:[self dragImage] | 226 [contentsView_ dragImage:[self dragImage] |
| 220 at:position | 227 at:position |
| 221 offset:NSZeroSize | 228 offset:NSZeroSize |
| 222 event:dragEvent | 229 event:dragEvent |
| 223 pasteboard:pasteboard_ | 230 pasteboard:pasteboard_ |
| 224 source:contentsView_ | 231 source:contentsView_ |
| 225 slideBack:YES]; | 232 slideBack:YES]; |
| 226 } | 233 } |
| 227 | 234 |
| 228 - (void)endDragAt:(NSPoint)screenPoint | 235 - (void)endDragAt:(NSPoint)screenPoint |
| 229 isCancelled:(BOOL)cancelled { | 236 operation:(NSDragOperation)operation { |
| 230 RenderViewHost* rvh = [contentsView_ tabContents]->render_view_host(); | 237 RenderViewHost* rvh = [contentsView_ tabContents]->render_view_host(); |
| 231 if (rvh) { | 238 if (rvh) { |
| 232 rvh->DragSourceSystemDragEnded(); | 239 rvh->DragSourceSystemDragEnded(); |
| 233 | 240 |
| 234 // Convert |screenPoint| to view coordinates and flip it. | 241 // Convert |screenPoint| to view coordinates and flip it. |
| 235 NSPoint localPoint = [contentsView_ convertPointFromBase:screenPoint]; | 242 NSPoint localPoint = [contentsView_ convertPointFromBase:screenPoint]; |
| 236 NSRect viewFrame = [contentsView_ frame]; | 243 NSRect viewFrame = [contentsView_ frame]; |
| 237 localPoint.y = viewFrame.size.height - localPoint.y; | 244 localPoint.y = viewFrame.size.height - localPoint.y; |
| 238 // Flip |screenPoint|. | 245 // Flip |screenPoint|. |
| 239 NSRect screenFrame = [[[contentsView_ window] screen] frame]; | 246 NSRect screenFrame = [[[contentsView_ window] screen] frame]; |
| 240 screenPoint.y = screenFrame.size.height - screenPoint.y; | 247 screenPoint.y = screenFrame.size.height - screenPoint.y; |
| 241 | 248 |
| 242 if (cancelled) { | 249 rvh->DragSourceEndedAt(localPoint.x, localPoint.y, |
| 243 rvh->DragSourceCancelledAt(localPoint.x, localPoint.y, | 250 screenPoint.x, screenPoint.y, |
| 244 screenPoint.x, screenPoint.y); | 251 static_cast<WebKit::WebDragOperation>(operation)); |
| 245 } else { | |
| 246 rvh->DragSourceEndedAt(localPoint.x, localPoint.y, | |
| 247 screenPoint.x, screenPoint.y); | |
| 248 } | |
| 249 } | 252 } |
| 250 | 253 |
| 251 // Make sure the pasteboard owner isn't us. | 254 // Make sure the pasteboard owner isn't us. |
| 252 [pasteboard_ declareTypes:[NSArray array] owner:nil]; | 255 [pasteboard_ declareTypes:[NSArray array] owner:nil]; |
| 253 } | 256 } |
| 254 | 257 |
| 255 - (void)moveDragTo:(NSPoint)screenPoint { | 258 - (void)moveDragTo:(NSPoint)screenPoint { |
| 256 RenderViewHost* rvh = [contentsView_ tabContents]->render_view_host(); | 259 RenderViewHost* rvh = [contentsView_ tabContents]->render_view_host(); |
| 257 if (rvh) { | 260 if (rvh) { |
| 258 // Convert |screenPoint| to view coordinates and flip it. | 261 // Convert |screenPoint| to view coordinates and flip it. |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 if (!dropData_->plain_text.empty()) | 354 if (!dropData_->plain_text.empty()) |
| 352 [pasteboard_ addTypes:[NSArray arrayWithObject:NSStringPboardType] | 355 [pasteboard_ addTypes:[NSArray arrayWithObject:NSStringPboardType] |
| 353 owner:contentsView_]; | 356 owner:contentsView_]; |
| 354 } | 357 } |
| 355 | 358 |
| 356 - (NSImage*)dragImage { | 359 - (NSImage*)dragImage { |
| 357 return MakeDragImage(dropData_.get()); | 360 return MakeDragImage(dropData_.get()); |
| 358 } | 361 } |
| 359 | 362 |
| 360 @end // @implementation WebDragSource (Private) | 363 @end // @implementation WebDragSource (Private) |
| OLD | NEW |