Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: chrome/browser/ui/cocoa/web_contents_drag_source.mm

Issue 6358008: [Mac] Organize some files into chrome/browser/ui/cocoa/tab_contents/.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 #import "chrome/browser/ui/cocoa/web_contents_drag_source.h"
6
7 #include "app/mac/nsimage_cache.h"
8 #include "base/string_util.h"
9 #include "base/sys_string_conversions.h"
10 #include "chrome/browser/renderer_host/render_view_host.h"
11 #include "chrome/browser/tab_contents/tab_contents.h"
12 #include "chrome/browser/tab_contents/tab_contents_view_mac.h"
13
14 namespace {
15
16 // Make a drag image from the drop data.
17 // TODO(feldstein): Make this work
18 NSImage* MakeDragImage() {
19 // TODO(feldstein): Just a stub for now. Make it do something (see, e.g.,
20 // WebKit/WebKit/mac/Misc/WebNSViewExtras.m: |-_web_DragImageForElement:...|).
21
22 // Default to returning a generic image.
23 return app::mac::GetCachedImageWithName(@"nav.pdf");
24 }
25
26 // Flips screen and point coordinates over the y axis to work with webkit
27 // coordinate systems.
28 void FlipPointCoordinates(NSPoint& screenPoint,
29 NSPoint& localPoint,
30 NSView* view) {
31 NSRect viewFrame = [view frame];
32 localPoint.y = NSHeight(viewFrame) - localPoint.y;
33 // Flip |screenPoint|.
34 NSRect screenFrame = [[[view window] screen] frame];
35 screenPoint.y = NSHeight(screenFrame) - screenPoint.y;
36 }
37
38 } // namespace
39
40
41 @implementation WebContentsDragSource
42
43 - (id)initWithContentsView:(TabContentsViewCocoa*)contentsView
44 pasteboard:(NSPasteboard*)pboard
45 dragOperationMask:(NSDragOperation)dragOperationMask {
46 if ((self = [super init])) {
47 contentsView_ = contentsView;
48 DCHECK(contentsView_);
49
50 pasteboard_.reset([pboard retain]);
51 DCHECK(pasteboard_.get());
52
53 dragOperationMask_ = dragOperationMask;
54 }
55
56 return self;
57 }
58
59 - (NSImage*)dragImage {
60 return MakeDragImage();
61 }
62
63 - (void)fillPasteboard {
64 NOTIMPLEMENTED() << "Subclasses should implement fillPasteboard";
65 }
66
67 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {
68 return dragOperationMask_;
69 }
70
71 - (void)startDrag {
72 [self fillPasteboard];
73 NSEvent* currentEvent = [NSApp currentEvent];
74
75 // Synthesize an event for dragging, since we can't be sure that
76 // [NSApp currentEvent] will return a valid dragging event.
77 NSWindow* window = [contentsView_ window];
78 NSPoint position = [window mouseLocationOutsideOfEventStream];
79 NSTimeInterval eventTime = [currentEvent timestamp];
80 NSEvent* dragEvent = [NSEvent mouseEventWithType:NSLeftMouseDragged
81 location:position
82 modifierFlags:NSLeftMouseDraggedMask
83 timestamp:eventTime
84 windowNumber:[window windowNumber]
85 context:nil
86 eventNumber:0
87 clickCount:1
88 pressure:1.0];
89 [window dragImage:[self dragImage]
90 at:position
91 offset:NSZeroSize
92 event:dragEvent
93 pasteboard:pasteboard_
94 source:self
95 slideBack:YES];
96 }
97
98 - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint
99 operation:(NSDragOperation)operation {
100 }
101
102 - (void)endDragAt:(NSPoint)screenPoint
103 operation:(NSDragOperation)operation {
104 RenderViewHost* rvh = [contentsView_ tabContents]->render_view_host();
105 if (rvh) {
106 rvh->DragSourceSystemDragEnded();
107
108 NSPoint localPoint = [contentsView_ convertPoint:screenPoint fromView: nil];
109 FlipPointCoordinates(screenPoint, localPoint, contentsView_);
110 rvh->DragSourceEndedAt(localPoint.x, localPoint.y,
111 screenPoint.x, screenPoint.y,
112 static_cast<WebKit::WebDragOperation>(operation));
113 }
114
115 // Make sure the pasteboard owner isn't us.
116 [pasteboard_ declareTypes:[NSArray array] owner:nil];
117 }
118
119 - (void)moveDragTo:(NSPoint)screenPoint {
120 RenderViewHost* rvh = [contentsView_ tabContents]->render_view_host();
121 if (rvh) {
122 NSPoint localPoint = [contentsView_ convertPoint:screenPoint fromView:nil];
123 FlipPointCoordinates(screenPoint, localPoint, contentsView_);
124 rvh->DragSourceMovedTo(localPoint.x, localPoint.y,
125 screenPoint.x, screenPoint.y);
126 }
127 }
128
129 @end // @implementation WebContentsDragSource
130
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698