]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/windows/tests/cefclient/browser/osr_dragdrop_win.h
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / windows / tests / cefclient / browser / osr_dragdrop_win.h
diff --git a/dependencies64/cef/windows/tests/cefclient/browser/osr_dragdrop_win.h b/dependencies64/cef/windows/tests/cefclient/browser/osr_dragdrop_win.h
new file mode 100644 (file)
index 0000000..535eeb8
--- /dev/null
@@ -0,0 +1,193 @@
+// Copyright (c) 2014 The Chromium Embedded Framework 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 CEF_TESTS_CEFCLIENT_BROWSER_OSR_DRAGDROP_WIN_H_
+#define CEF_TESTS_CEFCLIENT_BROWSER_OSR_DRAGDROP_WIN_H_
+#pragma once
+
+// When generating projects with CMake the CEF_USE_ATL value will be defined
+// automatically if using a supported Visual Studio version. Pass -DUSE_ATL=OFF
+// to the CMake command-line to disable use of ATL.
+// Uncomment this line to manually enable ATL support.
+// #define CEF_USE_ATL 1
+
+#if defined(CEF_USE_ATL)
+
+#include <atlcomcli.h>
+#include <objidl.h>
+#include <stdio.h>
+
+#include "tests/cefclient/browser/osr_dragdrop_events.h"
+
+namespace client {
+
+#define DEFAULT_QUERY_INTERFACE(__Class) \
+  HRESULT __stdcall QueryInterface(const IID& iid, void** object) { \
+    *object = NULL; \
+    if (IsEqualIID(iid, IID_IUnknown)) { \
+      IUnknown* obj = this; \
+      *object = obj; \
+    } else if (IsEqualIID(iid, IID_ ## __Class)) { \
+      __Class* obj = this; \
+      *object = obj; \
+    } else { \
+      return E_NOINTERFACE; \
+    } \
+    AddRef(); \
+    return S_OK; \
+  }
+#define IUNKNOWN_IMPLEMENTATION \
+  ULONG __stdcall AddRef() { \
+    return ++ref_count_; \
+  } \
+  ULONG __stdcall Release() { \
+    if (--ref_count_ == 0) { \
+      delete this; \
+      return 0U; \
+    } \
+    return ref_count_; \
+  } \
+  protected: \
+  ULONG ref_count_;
+
+
+class DropTargetWin : public IDropTarget {
+ public:
+  static CComPtr<DropTargetWin> Create(OsrDragEvents* callback, HWND hWnd);
+
+  CefBrowserHost::DragOperationsMask StartDragging(
+      CefRefPtr<CefBrowser> browser,
+      CefRefPtr<CefDragData> drag_data,
+      CefRenderHandler::DragOperationsMask allowed_ops,
+      int x, int y);
+
+  // IDropTarget implementation:
+  HRESULT __stdcall DragEnter(IDataObject* data_object,
+                              DWORD key_state,
+                              POINTL cursor_position,
+                              DWORD* effect);
+
+  HRESULT __stdcall DragOver(DWORD key_state,
+                             POINTL cursor_position,
+                             DWORD* effect);
+
+  HRESULT __stdcall DragLeave();
+
+  HRESULT __stdcall Drop(IDataObject* data_object,
+                         DWORD key_state,
+                         POINTL cursor_position,
+                         DWORD* effect);
+
+  DEFAULT_QUERY_INTERFACE(IDropTarget)
+  IUNKNOWN_IMPLEMENTATION
+
+ protected:
+  DropTargetWin(OsrDragEvents* callback, HWND hWnd)
+      : ref_count_(0),
+        callback_(callback),
+        hWnd_(hWnd) {}
+  virtual ~DropTargetWin() {}
+
+ private:
+  OsrDragEvents* callback_;
+  HWND hWnd_;
+
+  CefRefPtr<CefDragData> current_drag_data_;
+};
+
+class DropSourceWin : public IDropSource {
+ public:
+  static CComPtr<DropSourceWin> Create();
+
+  // IDropSource implementation:
+  HRESULT __stdcall GiveFeedback(DWORD dwEffect);
+
+  HRESULT __stdcall QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState);
+
+  DEFAULT_QUERY_INTERFACE(IDropSource)
+  IUNKNOWN_IMPLEMENTATION
+
+ protected:
+  explicit DropSourceWin() : ref_count_(0) {}
+  virtual ~DropSourceWin() {}
+};
+
+class DragEnumFormatEtc : public IEnumFORMATETC {
+ public:
+  static HRESULT CreateEnumFormatEtc(UINT cfmt,
+                                     FORMATETC* afmt,
+                                     IEnumFORMATETC** ppEnumFormatEtc);
+
+  //
+  // IEnumFormatEtc members
+  //
+  HRESULT __stdcall Next(ULONG celt,
+                         FORMATETC * pFormatEtc,
+                         ULONG * pceltFetched);
+  HRESULT __stdcall Skip(ULONG celt);
+  HRESULT __stdcall Reset(void);
+  HRESULT __stdcall Clone(IEnumFORMATETC ** ppEnumFormatEtc);
+
+  //
+  // Construction / Destruction
+  //
+  DragEnumFormatEtc(FORMATETC *pFormatEtc, int nNumFormats);
+  ~DragEnumFormatEtc();
+
+  static void DeepCopyFormatEtc(FORMATETC *dest, FORMATETC *source);
+
+  DEFAULT_QUERY_INTERFACE(IEnumFORMATETC)
+  IUNKNOWN_IMPLEMENTATION
+
+ private:
+  ULONG m_nIndex;  // current enumerator index
+  ULONG m_nNumFormats;  // number of FORMATETC members
+  FORMATETC* m_pFormatEtc;  // array of FORMATETC objects
+};
+
+class DataObjectWin : public IDataObject {
+ public:
+  static CComPtr<DataObjectWin> Create(FORMATETC* fmtetc,
+                                       STGMEDIUM* stgmed,
+                                       int count);
+
+  // IDataObject memberS
+  HRESULT __stdcall GetDataHere(FORMATETC* pFormatEtc, STGMEDIUM *pmedium);
+  HRESULT __stdcall QueryGetData(FORMATETC* pFormatEtc);
+  HRESULT __stdcall GetCanonicalFormatEtc(FORMATETC* pFormatEct,
+                                          FORMATETC* pFormatEtcOut);
+  HRESULT __stdcall SetData(FORMATETC* pFormatEtc,
+                            STGMEDIUM* pMedium,
+                            BOOL fRelease);
+  HRESULT __stdcall DAdvise(FORMATETC* pFormatEtc,
+                            DWORD advf,
+                            IAdviseSink*,
+                            DWORD*);
+  HRESULT __stdcall DUnadvise(DWORD dwConnection);
+  HRESULT __stdcall EnumDAdvise(IEnumSTATDATA **ppEnumAdvise);
+
+  HRESULT __stdcall EnumFormatEtc(DWORD dwDirection,
+                                  IEnumFORMATETC **ppEnumFormatEtc);
+  HRESULT __stdcall GetData(FORMATETC *pFormatEtc, STGMEDIUM *pMedium);
+
+  DEFAULT_QUERY_INTERFACE(IDataObject)
+  IUNKNOWN_IMPLEMENTATION
+
+ protected:
+  int m_nNumFormats;
+  FORMATETC* m_pFormatEtc;
+  STGMEDIUM* m_pStgMedium;
+
+  static HGLOBAL DupGlobalMem(HGLOBAL hMem);
+
+  int LookupFormatEtc(FORMATETC *pFormatEtc);
+
+  explicit DataObjectWin(FORMATETC *fmtetc, STGMEDIUM *stgmed, int count);
+};
+
+}  // namespace client
+
+#endif  // defined(CEF_USE_ATL)
+
+#endif  // CEF_TESTS_CEFCLIENT_BROWSER_OSR_DRAGDROP_WIN_H_