Chromium Code Reviews| 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..f9330bf9eaeabf6d0279b9357ae21ec0c9450612 |
| --- /dev/null |
| +++ b/ui/views/cocoa/drag_drop_client_mac.h |
| @@ -0,0 +1,97 @@ |
| +// 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> |
| + |
| +#import "base/mac/scoped_nsobject.h" |
| +#include "base/macros.h" |
| +#include "base/run_loop.h" |
| +#include "ui/base/dragdrop/drag_drop_types.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 ui { |
| +class OSExchangeData; |
| +} |
| + |
| +namespace views { |
| +namespace test { |
| +class CocoaDragDropTest; |
| +} |
| + |
| +class BridgedNativeWidget; |
| +class DropHelper; |
| + |
| +// 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_.get(); } |
| + |
| + private: |
| + friend class test::CocoaDragDropTest; |
| + |
| + // 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. |
| + std::unique_ptr<DropHelper> drop_helper_; |
|
tapted
2016/06/01 01:57:01
Can this just be
DropHelper drop_helper_;
we can
spqchan
2016/06/01 19:09:29
I don't think it'll work, since DropHelper is DISA
tapted
2016/06/02 00:24:50
It should still work. DragDropClientMac is also DI
|
| + |
| + // The drag and drop operation. |
| + int operation_; |
| + |
| + // The bridge between the content view and the drag drop client. |
| + BridgedNativeWidget* bridge_; // Weak. Owns |this|. |
| + |
| + // True if a runloop is running. This is reqired for tests, in which |
| + // a runloop does not happen. |
| + bool is_run_loop_running_; |
| + |
| + // The closure for the drag and drop's runloop. |
| + base::Closure quit_closure_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DragDropClientMac); |
| +}; |
| + |
| +} // namespace views |
| + |
| +#endif // UI_VIEWS_COCOA_DRAG_DROP_CLIENT_MAC_H_ |