Index: ui/views/cocoa/drag_drop_client_mac.h |
diff --git a/ui/views/cocoa/drag_drop_client_mac.h b/ui/views/cocoa/drag_drop_client_mac.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1b725054b62d1eca8b7b683323066def46e4552b |
--- /dev/null |
+++ b/ui/views/cocoa/drag_drop_client_mac.h |
@@ -0,0 +1,90 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef UI_VIEWS_COCOA_DRAG_DROP_CLIENT_MAC_H_ |
+#define UI_VIEWS_COCOA_DRAG_DROP_CLIENT_MAC_H_ |
+ |
+#import <Cocoa/Cocoa.h> |
+ |
+#include "base/callback.h" |
+#import "base/mac/scoped_nsobject.h" |
+#include "base/macros.h" |
+#include "ui/base/dragdrop/drag_drop_types.h" |
+#include "ui/base/dragdrop/os_exchange_data.h" |
+#include "ui/views/views_export.h" |
+#include "ui/views/widget/drop_helper.h" |
+ |
+// This class acts as a bridge between NSPasteboardItem and OSExchangeData by |
+// implementing NSPasteboardItemDataProvider and writing data from |
+// OSExchangeData into the pasteboard. |
+VIEWS_EXPORT |
+@interface CocoaDragDropDataProvider : NSObject<NSPasteboardItemDataProvider> |
+- (id)initWithData:(const ui::OSExchangeData&)data; |
+@end |
+ |
+namespace gfx { |
+class Point; |
+} |
+ |
+namespace views { |
+namespace test { |
+class DragDropClientMacTest; |
+} |
+ |
+class BridgedNativeWidget; |
+class View; |
+ |
+// Implements drag and drop on MacViews. This class acts as a bridge between |
+// the Views and native system's drag and drop. This class mimics |
+// DesktopDragDropClientAuraX11. |
+class VIEWS_EXPORT DragDropClientMac { |
+ public: |
+ explicit DragDropClientMac(BridgedNativeWidget* bridge, View* root_view); |
+ ~DragDropClientMac(); |
+ |
+ // Initiates a drag and drop session. Returns the drag operation that was |
+ // applied at the end of the drag drop session. |
+ void StartDragAndDrop(View* view, |
+ const ui::OSExchangeData& data, |
+ int operation, |
+ ui::DragDropTypes::DragEventSource source); |
+ |
+ // Called when mouse is dragged during a drag and drop. |
+ NSDragOperation DragUpdate(id<NSDraggingInfo>); |
+ |
+ // Called when mouse is released during a drag and drop. |
+ NSDragOperation Drop(id<NSDraggingInfo> sender); |
+ |
+ // Called when the drag and drop session has ended. |
+ void EndDrag(); |
+ |
+ DropHelper* drop_helper() { return &drop_helper_; } |
+ |
+ private: |
+ friend class test::DragDropClientMacTest; |
+ |
+ // Converts the given NSPoint to the coordinate system in Views. |
+ gfx::Point LocationInView(NSPoint point) const; |
+ |
+ // Provides the data for the drag and drop session. |
+ base::scoped_nsobject<CocoaDragDropDataProvider> data_source_; |
+ |
+ // Used to handle drag and drop with Views. |
+ DropHelper drop_helper_; |
+ |
+ // The drag and drop operation. |
+ int operation_; |
+ |
+ // The bridge between the content view and the drag drop client. |
+ BridgedNativeWidget* bridge_; // Weak. Owns |this|. |
+ |
+ // The closure for the drag and drop's run loop. |
+ base::Closure quit_closure_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DragDropClientMac); |
+}; |
+ |
+} // namespace views |
+ |
+#endif // UI_VIEWS_COCOA_DRAG_DROP_CLIENT_MAC_H_ |