#ifndef UI_AURA_CLIENT_DRAG_DROP_CLIENT_H_
#define UI_AURA_CLIENT_DRAG_DROP_CLIENT_H_
#include <memory>
#include "ui/aura/aura_export.h"
#include "ui/base/dragdrop/mojom/drag_drop_types.mojom-forward.h"
#include "ui/gfx/native_ui_types.h"
namespace gfx {
class ImageSkia;
class Point;
class Vector2d;
}
namespace ui {
class OSExchangeData;
}
namespace aura {
class Window;
namespace client {
class DragDropClientObserver;
class AURA_EXPORT DragDropClient {
public:
virtual ~DragDropClient() = default;
virtual ui::mojom::DragOperation StartDragAndDrop(
std::unique_ptr<ui::OSExchangeData> data,
aura::Window* root_window,
aura::Window* source_window,
const gfx::Point& screen_location,
int allowed_operations,
ui::mojom::DragEventSource source) = 0;
#if BUILDFLAG(IS_LINUX)
virtual void UpdateDragImage(const gfx::ImageSkia& image,
const gfx::Vector2d& offset) = 0;
#endif
virtual void DragCancel() = 0;
virtual bool IsDragDropInProgress() = 0;
virtual void AddObserver(DragDropClientObserver* observer) = 0;
virtual void RemoveObserver(DragDropClientObserver* observer) = 0;
};
AURA_EXPORT void SetDragDropClient(Window* root_window,
DragDropClient* client);
AURA_EXPORT DragDropClient* GetDragDropClient(Window* root_window);
}
}
#endif