directmanipulation.idl 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. /*
  2. * Copyright 2019 Alistair Leslie-Hughes
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  17. */
  18. import "oaidl.idl";
  19. import "ocidl.idl";
  20. cpp_quote("#if 0")
  21. typedef void* HWND;
  22. cpp_quote("#endif")
  23. interface IDirectManipulationViewportEventHandler;
  24. typedef enum DIRECTMANIPULATION_HITTEST_TYPE
  25. {
  26. DIRECTMANIPULATION_HITTEST_TYPE_ASYNCHRONOUS = 0x00000000,
  27. DIRECTMANIPULATION_HITTEST_TYPE_SYNCHRONOUS = 0x00000001,
  28. DIRECTMANIPULATION_HITTEST_TYPE_AUTO_SYNCHRONOUS = 0x00000002
  29. } DIRECTMANIPULATION_HITTEST_TYPE;
  30. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_HITTEST_TYPE)")
  31. typedef enum DIRECTMANIPULATION_STATUS
  32. {
  33. DIRECTMANIPULATION_BUILDING,
  34. DIRECTMANIPULATION_ENABLED,
  35. DIRECTMANIPULATION_DISABLED,
  36. DIRECTMANIPULATION_RUNNING,
  37. DIRECTMANIPULATION_INERTIA,
  38. DIRECTMANIPULATION_READY,
  39. DIRECTMANIPULATION_SUSPENDED
  40. } DIRECTMANIPULATION_STATUS;
  41. typedef enum DIRECTMANIPULATION_VIEWPORT_OPTIONS
  42. {
  43. DIRECTMANIPULATION_VIEWPORT_OPTIONS_DEFAULT = 0x00000000,
  44. DIRECTMANIPULATION_VIEWPORT_OPTIONS_AUTODISABLE = 0x00000001,
  45. DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE = 0x00000002,
  46. DIRECTMANIPULATION_VIEWPORT_OPTIONS_INPUT = 0x00000004,
  47. DIRECTMANIPULATION_VIEWPORT_OPTIONS_EXPLICITHITTEST = 0x00000008,
  48. DIRECTMANIPULATION_VIEWPORT_OPTIONS_DISABLEPIXELSNAPPING = 0x00000010,
  49. } DIRECTMANIPULATION_VIEWPORT_OPTIONS;
  50. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_VIEWPORT_OPTIONS)")
  51. typedef enum DIRECTMANIPULATION_CONFIGURATION
  52. {
  53. DIRECTMANIPULATION_CONFIGURATION_NONE = 0x00000000,
  54. DIRECTMANIPULATION_CONFIGURATION_INTERACTION = 0x00000001,
  55. DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_X = 0x00000002,
  56. DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_Y = 0x00000004,
  57. DIRECTMANIPULATION_CONFIGURATION_SCALING = 0x00000010,
  58. DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_INERTIA = 0x00000020,
  59. DIRECTMANIPULATION_CONFIGURATION_SCALING_INERTIA = 0x00000080,
  60. DIRECTMANIPULATION_CONFIGURATION_RAILS_X = 0x00000100,
  61. DIRECTMANIPULATION_CONFIGURATION_RAILS_Y = 0x00000200,
  62. } DIRECTMANIPULATION_CONFIGURATION;
  63. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_CONFIGURATION)")
  64. typedef enum DIRECTMANIPULATION_GESTURE_CONFIGURATION
  65. {
  66. DIRECTMANIPULATION_GESTURE_NONE = 0x00000000,
  67. DIRECTMANIPULATION_GESTURE_DEFAULT = 0x00000000,
  68. DIRECTMANIPULATION_GESTURE_CROSS_SLIDE_VERTICAL = 0x00000008,
  69. DIRECTMANIPULATION_GESTURE_CROSS_SLIDE_HORIZONTAL = 0x00000010,
  70. DIRECTMANIPULATION_GESTURE_PINCH_ZOOM = 0x00000020,
  71. } DIRECTMANIPULATION_GESTURE_CONFIGURATION;
  72. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_GESTURE_CONFIGURATION)")
  73. typedef enum DIRECTMANIPULATION_MOTION_TYPES
  74. {
  75. DIRECTMANIPULATION_MOTION_NONE = 0x00000000,
  76. DIRECTMANIPULATION_MOTION_TRANSLATEX = 0x00000001,
  77. DIRECTMANIPULATION_MOTION_TRANSLATEY = 0x00000002,
  78. DIRECTMANIPULATION_MOTION_ZOOM = 0x00000004,
  79. DIRECTMANIPULATION_MOTION_CENTERX = 0x00000010,
  80. DIRECTMANIPULATION_MOTION_CENTERY = 0x00000020,
  81. DIRECTMANIPULATION_MOTION_ALL = DIRECTMANIPULATION_MOTION_TRANSLATEX | DIRECTMANIPULATION_MOTION_TRANSLATEY |
  82. DIRECTMANIPULATION_MOTION_ZOOM | DIRECTMANIPULATION_MOTION_CENTERX |
  83. DIRECTMANIPULATION_MOTION_CENTERY
  84. } DIRECTMANIPULATION_MOTION_TYPES;
  85. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_MOTION_TYPES)")
  86. typedef enum DIRECTMANIPULATION_SNAPPOINT_TYPE
  87. {
  88. DIRECTMANIPULATION_SNAPPOINT_MANDATORY,
  89. DIRECTMANIPULATION_SNAPPOINT_OPTIONAL,
  90. DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE,
  91. DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE
  92. } DIRECTMANIPULATION_SNAPPOINT_TYPE;
  93. typedef enum DIRECTMANIPULATION_SNAPPOINT_COORDINATE
  94. {
  95. DIRECTMANIPULATION_COORDINATE_BOUNDARY = 0x00000000,
  96. DIRECTMANIPULATION_COORDINATE_ORIGIN = 0x00000001,
  97. DIRECTMANIPULATION_COORDINATE_MIRRORED = 0x00000010
  98. } DIRECTMANIPULATION_SNAPPOINT_COORDINATE;
  99. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_SNAPPOINT_COORDINATE)")
  100. typedef enum DIRECTMANIPULATION_HORIZONTALALIGNMENT
  101. {
  102. DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE = 0x00000000,
  103. DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT = 0x00000001,
  104. DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER = 0x00000002,
  105. DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT = 0x00000004,
  106. DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER = 0x00000008
  107. } DIRECTMANIPULATION_HORIZONTALALIGNMENT;
  108. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_HORIZONTALALIGNMENT)")
  109. typedef enum DIRECTMANIPULATION_VERTICALALIGNMENT
  110. {
  111. DIRECTMANIPULATION_VERTICALALIGNMENT_NONE = 0x00000000,
  112. DIRECTMANIPULATION_VERTICALALIGNMENT_TOP = 0x00000001,
  113. DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER = 0x00000002,
  114. DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM = 0x00000004,
  115. DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER = 0x00000008
  116. } DIRECTMANIPULATION_VERTICALALIGNMENT;
  117. cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DIRECTMANIPULATION_VERTICALALIGNMENT)")
  118. typedef enum DIRECTMANIPULATION_INPUT_MODE
  119. {
  120. DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC,
  121. DIRECTMANIPULATION_INPUT_MODE_MANUAL
  122. } DIRECTMANIPULATION_INPUT_MODE;
  123. [
  124. local,
  125. object,
  126. uuid(fb759dba-6f4c-4c01-874e-19c8a05907f9),
  127. pointer_default(unique)
  128. ]
  129. interface IDirectManipulationFrameInfoProvider : IUnknown
  130. {
  131. HRESULT GetNextFrameInfo([out] ULONGLONG *time, [out] ULONGLONG *process, [out] ULONGLONG *composition);
  132. }
  133. [
  134. local,
  135. object,
  136. uuid(fbf5d3b4-70c7-4163-9322-5a6f660d6fbc),
  137. pointer_default(unique)
  138. ]
  139. interface IDirectManipulationManager : IUnknown
  140. {
  141. HRESULT Activate([in] HWND window);
  142. HRESULT Deactivate([in] HWND window);
  143. HRESULT RegisterHitTestTarget([in] HWND window, [in] HWND hittest, [in] DIRECTMANIPULATION_HITTEST_TYPE type);
  144. HRESULT ProcessInput([in] const MSG *msg, [out, retval] BOOL *handled);
  145. HRESULT GetUpdateManager([in] REFIID riid, [out, iid_is(riid), retval,] void **obj);
  146. HRESULT CreateViewport([in] IDirectManipulationFrameInfoProvider *frame, [in] HWND window,
  147. [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
  148. HRESULT CreateContent([in] IDirectManipulationFrameInfoProvider *frame, [in] REFCLSID clsid,
  149. [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
  150. }
  151. [
  152. local,
  153. object,
  154. uuid(b89962cb-3d89-442b-bb58-5098fa0f9f16),
  155. pointer_default(unique)
  156. ]
  157. interface IDirectManipulationContent : IUnknown
  158. {
  159. HRESULT GetContentRect([out] RECT *size);
  160. HRESULT SetContentRect([in] const RECT *size);
  161. HRESULT GetViewport([in] REFIID riid, [out, iid_is(riid)] void **object);
  162. HRESULT GetTag([in] REFIID riid, [out, iid_is(riid)] void **object, [out] UINT32 *id);
  163. HRESULT SetTag([in, unique] IUnknown *object, [in] UINT32 id);
  164. HRESULT GetOutputTransform([out] float *matrix, [in] DWORD count);
  165. HRESULT GetContentTransform([out] float *matrix, [in] DWORD count);
  166. HRESULT SyncContentTransform([in] const float *matrix, [in] DWORD count);
  167. }
  168. [
  169. local,
  170. object,
  171. uuid(790b6337-64f8-4ff5-a269-b32bc2af27a7),
  172. pointer_default(unique)
  173. ]
  174. interface IDirectManipulationUpdateHandler : IUnknown
  175. {
  176. HRESULT Update();
  177. }
  178. [
  179. local,
  180. object,
  181. uuid(b0ae62fd-be34-46e7-9caa-d361facbb9cc),
  182. pointer_default(unique)
  183. ]
  184. interface IDirectManipulationUpdateManager : IUnknown
  185. {
  186. HRESULT RegisterWaitHandleCallback([in] HANDLE handle, [in] IDirectManipulationUpdateHandler *handler,
  187. [out] DWORD *cookie);
  188. HRESULT UnregisterWaitHandleCallback([in] DWORD cookie);
  189. HRESULT Update([in] IDirectManipulationFrameInfoProvider *provider);
  190. }
  191. [
  192. local,
  193. object,
  194. uuid(537a0825-0387-4efa-b62f-71eb1f085a7e),
  195. pointer_default(unique)
  196. ]
  197. interface IDirectManipulationCompositor : IUnknown
  198. {
  199. HRESULT AddContent([in] IDirectManipulationContent *content, [in] IUnknown *device,
  200. [in] IUnknown *parent, [in] IUnknown *child);
  201. HRESULT RemoveContent([in] IDirectManipulationContent *content);
  202. HRESULT SetUpdateManager([in] IDirectManipulationUpdateManager *manager);
  203. HRESULT Flush();
  204. }
  205. [
  206. local,
  207. object,
  208. uuid(28b85a3d-60a0-48bd-9ba1-5ce8d9ea3a6d),
  209. pointer_default(unique)
  210. ]
  211. interface IDirectManipulationViewport : IUnknown
  212. {
  213. HRESULT Enable();
  214. HRESULT Disable();
  215. HRESULT SetContact([in] UINT32 id);
  216. HRESULT ReleaseContact([in] UINT32 id);
  217. HRESULT ReleaseAllContacts();
  218. HRESULT GetStatus([out] DIRECTMANIPULATION_STATUS *status);
  219. HRESULT GetTag([in] REFIID riid, [out, iid_is(riid)] void **object, [out] UINT32 *id);
  220. HRESULT SetTag([in, unique] IUnknown *object, [in] UINT32 id);
  221. HRESULT GetViewportRect([out, retval] RECT *viewport);
  222. HRESULT SetViewportRect([in] const RECT *viewport);
  223. HRESULT ZoomToRect([in] const float left, [in] const float top, [in] const float right,
  224. [in] const float bottom, [in] BOOL animate);
  225. HRESULT SetViewportTransform([in] const float *matrix, [in] DWORD count);
  226. HRESULT SyncDisplayTransform([in] const float *matrix, [in] DWORD count);
  227. HRESULT GetPrimaryContent([in] REFIID riid, [out, iid_is(riid)] void **object);
  228. HRESULT AddContent([in, unique] IDirectManipulationContent *content);
  229. HRESULT RemoveContent([in, unique] IDirectManipulationContent *content);
  230. HRESULT SetViewportOptions([in] DIRECTMANIPULATION_VIEWPORT_OPTIONS options);
  231. HRESULT AddConfiguration([in] DIRECTMANIPULATION_CONFIGURATION configuration);
  232. HRESULT RemoveConfiguration([in] DIRECTMANIPULATION_CONFIGURATION configuration);
  233. HRESULT ActivateConfiguration([in] DIRECTMANIPULATION_CONFIGURATION configuration);
  234. HRESULT SetManualGesture([in] DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration);
  235. HRESULT SetChaining([in] DIRECTMANIPULATION_MOTION_TYPES enabledTypes);
  236. HRESULT AddEventHandler([in] HWND window, [in] IDirectManipulationViewportEventHandler *eventHandler,
  237. [out, retval] DWORD *cookie);
  238. HRESULT RemoveEventHandler([in] DWORD cookie);
  239. HRESULT SetInputMode([in] DIRECTMANIPULATION_INPUT_MODE mode);
  240. HRESULT SetUpdateMode([in] DIRECTMANIPULATION_INPUT_MODE mode);
  241. HRESULT Stop();
  242. HRESULT Abandon();
  243. }
  244. [
  245. local,
  246. object,
  247. uuid(923ccaac-61e1-4385-b726-017af189882a),
  248. pointer_default(unique)
  249. ]
  250. interface IDirectManipulationViewport2 : IDirectManipulationViewport
  251. {
  252. HRESULT AddBehavior([in] IUnknown *behavior, [out, retval] DWORD *cookie);
  253. HRESULT RemoveBehavior([in] DWORD cookie);
  254. HRESULT RemoveAllBehaviors();
  255. }
  256. [
  257. local,
  258. object,
  259. uuid(952121DA-D69F-45F9-B0F9-F23944321A6D),
  260. pointer_default(unique)
  261. ]
  262. interface IDirectManipulationViewportEventHandler : IUnknown
  263. {
  264. HRESULT OnViewportStatusChanged([in] IDirectManipulationViewport *viewport, [in] DIRECTMANIPULATION_STATUS current,
  265. [in] DIRECTMANIPULATION_STATUS previous);
  266. HRESULT OnViewportUpdated([in] IDirectManipulationViewport *viewport);
  267. HRESULT OnContentUpdated([in] IDirectManipulationViewport *viewport, [in] IDirectManipulationContent *content);
  268. }
  269. [
  270. local,
  271. object,
  272. uuid(fa1005e9-3d16-484c-bfc9-62b61e56ec4e),
  273. pointer_default(unique)
  274. ]
  275. interface IDirectManipulationManager2 : IDirectManipulationManager
  276. {
  277. HRESULT CreateBehavior([in] REFCLSID clsid, [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
  278. }
  279. [
  280. local,
  281. object,
  282. uuid(c12851e4-1698-4625-b9b1-7ca3ec18630b),
  283. pointer_default(unique)
  284. ]
  285. interface IDirectManipulationPrimaryContent : IUnknown
  286. {
  287. HRESULT SetSnapInterval([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] float interval, [in] float offset);
  288. HRESULT SetSnapPoints([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] const float *points, [in] DWORD count);
  289. HRESULT SetSnapType([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] DIRECTMANIPULATION_SNAPPOINT_TYPE type);
  290. HRESULT SetSnapCoordinate([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate,
  291. [in] float origin);
  292. HRESULT SetZoomBoundaries([in] float minimum, [in] float maximum);
  293. HRESULT SetHorizontalAlignment([in] DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment);
  294. HRESULT SetVerticalAlignment([in] DIRECTMANIPULATION_VERTICALALIGNMENT alignment);
  295. HRESULT GetInertiaEndTransform([out] float *matrix, [in] DWORD count);
  296. HRESULT GetCenterPoint([out] float *x, [out] float *y);
  297. }
  298. [
  299. local,
  300. object,
  301. uuid(d38c7822-f1cb-43cb-b4b9-ac0c767a412e),
  302. pointer_default(unique)
  303. ]
  304. interface IDirectManipulationCompositor2 : IDirectManipulationCompositor
  305. {
  306. HRESULT AddContentWithCrossProcessChaining([in] IDirectManipulationPrimaryContent *content, [in] IUnknown *device,
  307. [in] IUnknown *parentVisual, [in] IUnknown *childVisual);
  308. }
  309. [
  310. uuid(9fbedf98-f6d8-4e3b-b488-fa66dbf5e9f3),
  311. version(1.0)
  312. ]
  313. library DirectManipulation
  314. {
  315. [
  316. uuid(54e211b6-3650-4f75-8334-fa359598e1c5)
  317. ]
  318. coclass DirectManipulationManager
  319. {
  320. interface IDirectManipulationManager2;
  321. [default] interface IDirectManipulationManager;
  322. }
  323. [
  324. uuid(99793286-77cc-4b57-96db-3b354f6f9fb5)
  325. ]
  326. coclass DirectManipulationSharedManager
  327. {
  328. interface IDirectManipulationManager2;
  329. [default] interface IDirectManipulationManager;
  330. }
  331. [
  332. uuid(79dea627-a08a-43ac-8ef5-6900b9299126)
  333. ]
  334. coclass DCompManipulationCompositor
  335. {
  336. [default] interface IDirectManipulationCompositor;
  337. interface IDirectManipulationCompositor2;
  338. interface IDirectManipulationFrameInfoProvider;
  339. }
  340. [
  341. noncreatable,
  342. hidden,
  343. uuid(34e211b6-3650-4f75-8334-fa359598e1c5)
  344. ]
  345. coclass DirectManipulationViewport
  346. {
  347. interface IDirectManipulationViewport2;
  348. [default] interface IDirectManipulationViewport;
  349. }
  350. }