advapi32/tests: Use win_skip() to skip over unimplemented functionality.
[wine] / include / msinkaut.idl
1 /* Copyright (C) 2007 C John Klehm
2  *
3  * This library is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU Lesser General Public
5  * License as published by the Free Software Foundation; either
6  * version 2.1 of the License, or (at your option) any later version.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16  */
17
18 import "oaidl.idl";
19 import "ocidl.idl";
20
21 [
22     uuid(7D868ACD-1A5D-4A47-A247-F39741353012),
23     version(1.0)
24 ]
25 library MSINKAUTLib
26 {
27     importlib("stdole2.tlb");
28
29     typedef float single;
30
31     typedef enum InkBoundingBoxMode {
32         IBBM_Default = 0,
33         IBBM_NoCurveFit = 1,
34         IBBM_CurveFit = 2,
35         IBBM_PointsOnly = 3,
36         IBBM_Union = 4
37     } InkBoundingBoxMode;
38
39     typedef enum InkExtractFlags {
40         IEF_CopyFromOriginal = 0x0,
41         IEF_RemoveFromOriginal = 0x1,
42         IEF_Default = IEF_RemoveFromOriginal
43     } InkExtractFlags;
44
45     typedef enum InkPersistenceFormat {
46         IPF_InkSerializeFormat = 0,
47         IPF_Base64InkSerializedFormat = 1,
48         IPF_GIF = 2,
49         IPF_Base64GIF = 3
50     } InkPersistenceFormat;
51
52     typedef enum InkPersistenceCompressionMode
53     {
54         IPCM_Default = 0,
55         IPCM_MaximumCompression = 1,
56         IPCM_NoCompression = 2
57     } InkPersistenceCompressionMode;
58
59     typedef enum InkPenTip {
60         IPT_Ball = 0,
61         IPT_Rectangle = 1
62     } InkPenTip;
63
64     typedef enum InkRasterOperation {
65         IRO_Black = 1,
66         IRO_NotMergePen,
67         IRO_MaskNotPen,
68         IRO_NotCopyPen,
69         IRO_MaskPenNot,
70         IRO_Not,
71         IRO_XOrPen,
72         IRO_NotMaskPen,
73         IRO_MaskPen,
74         IRO_NotXOrPen,
75         IRO_NoOperation,
76         IRO_MergeNotPen,
77         IRO_CopyPen,
78         IRO_MergePenNot,
79         IRO_MergePen,
80         IRO_White
81     } InkRasterOperation;
82
83     typedef enum InkClipboardModes {
84         ICB_Copy = 0,
85         ICB_Cut = 0x1,
86         ICB_DelayedCopy = 0x20,
87         ICB_ExtractOnly = 0x30,
88         ICB_Default = ICB_Copy
89     } InkClipboardModes;
90
91     typedef enum InkClipboardFormats {
92         ICF_None = 0,
93         ICF_InkSerializedFormat = 0x1,
94         ICF_SketchInk = 0x2,
95         ICF_TextInk = 0x6,
96         ICF_EnhancedMetafile = 0x8,
97         ICF_Metafile = 0x20,
98         ICF_Bitmap = 0x40,
99         ICF_PasteMask = 0x7,
100         ICF_CopyMask = 0x7f,
101         ICF_Default = ICF_CopyMask
102     } InkClipboardFormats;
103
104     typedef enum InkRecognitionConfidence
105     {
106         IRC_Strong = 0,
107         IRC_Intermediate = 1,
108         IRC_Poor = 2
109     } InkRecognitionConfidence;
110
111     [
112         odl,
113         uuid(DB489209-B7C3-411D-90F6-1548CFFF271E),
114         dual,
115         oleautomation
116     ]
117     interface IInkExtendedProperty : IDispatch {
118         [id(0x00000001), propget] HRESULT Guid([out, retval] BSTR* Guid);
119         [id(0x00000002), propget] HRESULT Data([out, retval] VARIANT* Data);
120         [id(0x00000002), propput] HRESULT Data([in] VARIANT Data);
121     };
122
123     [
124         odl,
125         uuid(89F2A8BE-95A9-4530-8B8F-88E971E3E25F),
126         dual,
127         oleautomation
128     ]
129     interface IInkExtendedProperties : IDispatch {
130         HRESULT Count([out, retval] long* Count);
131         HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
132         HRESULT Item(
133             [in] VARIANT Identifier,
134             [out, retval] IInkExtendedProperty** Item);
135         HRESULT Add(
136             [in] BSTR Guid,
137             [in] VARIANT Data,
138             [out, retval] IInkExtendedProperty** InkExtendedProperty);
139         HRESULT Remove([in] VARIANT Identifier);
140         HRESULT Clear();
141         HRESULT DoesPropertyExist(
142             [in] BSTR Guid,
143             [out, retval] VARIANT_BOOL* DoesPropertyExist);
144     };
145
146     [
147         odl,
148         uuid(BF519B75-0A15-4623-ADC9-C00D436A8092),
149         dual,
150         oleautomation
151     ]
152     interface IInkDrawingAttributes : IDispatch {
153         [id(0x00000002), propget] HRESULT Color(
154             [out, retval] long* CurrentColor);
155         [id(0x00000002), propput] HRESULT Color([in] long CurrentColor);
156         [id(0x00000003), propget] HRESULT Width(
157             [out, retval] single* CurrentWidth);
158         [id(0x00000003), propput] HRESULT Width([in] single CurrentWidth);
159         [id(0x00000001), propget] HRESULT Height(
160             [out, retval] single* CurrentHeight);
161         [id(0x00000001), propput] HRESULT Height([in] single CurrentHeight);
162         [id(0x00000004), propget] HRESULT FitToCurve(
163             [out, retval] VARIANT_BOOL* Flag);
164         [id(0x00000004), propput] HRESULT FitToCurve([in] VARIANT_BOOL Flag);
165         [id(0x00000005), propget] HRESULT IgnorePressure(
166             [out, retval] VARIANT_BOOL* Flag);
167         [id(0x00000005), propput] HRESULT IgnorePressure(
168             [in] VARIANT_BOOL Flag);
169         [id(0x00000006), propget] HRESULT AntiAliased(
170             [out, retval] VARIANT_BOOL* Flag);
171         [id(0x00000006), propput] HRESULT AntiAliased([in] VARIANT_BOOL Flag);
172         [id(0x00000007), propget] HRESULT Transparency(
173             [out, retval] long* CurrentTransparency);
174         [id(0x00000007), propput] HRESULT Transparency(
175             [in] long CurrentTransparency);
176         [id(0x00000008), propget] HRESULT RasterOperation(
177             [out, retval] InkRasterOperation* CurrentRasterOperation);
178         [id(0x00000008), propput] HRESULT RasterOperation(
179             [in] InkRasterOperation CurrentRasterOperation);
180         [id(0x00000009), propget] HRESULT PenTip(
181             [out, retval] InkPenTip* CurrentPenTip);
182         [id(0x00000009), propput] HRESULT PenTip([in] InkPenTip CurrentPenTip);
183         [id(0x0000000b), propget] HRESULT ExtendedProperties(
184             [out, retval] IInkExtendedProperties** Properties);
185         [id(0x0000000a)]          HRESULT Clone(
186             [out, retval] IInkDrawingAttributes** DrawingAttributes);
187     };
188
189 cpp_quote("#ifndef _WINGDI_")
190 /* already defined in wingdi.h but needed for WIDL */
191     typedef struct tagXFORM {
192         single eM11;
193         single eM12;
194         single eM21;
195         single eM22;
196         single eDx;
197         single eDy;
198     } XFORM;
199 cpp_quote("#endif /* _WINGDI_ */")
200
201     [
202         odl,
203         uuid(615F1D43-8703-4565-88E2-8201D2ECD7B7),
204         dual,
205         oleautomation
206     ]
207     interface IInkTransform : IDispatch {
208         [id(0x00000001)] HRESULT Reset();
209         [id(0x00000002)] HRESULT Translate(
210             [in] single HorizontalComponent,
211             [in] single VerticalComponent);
212         [id(0x00000003)] HRESULT Rotate(
213             [in] single Degrees,
214             [in, optional, defaultvalue(0)] single x,
215             [in, optional, defaultvalue(0)] single y);
216         [id(0x00000004)] HRESULT Reflect(
217             [in] VARIANT_BOOL Horizontally,
218             [in] VARIANT_BOOL Vertically);
219         [id(0x00000005)] HRESULT Shear(
220             [in] single HorizontalComponent,
221             [in] single VerticalComponent);
222         [id(0x00000006)] HRESULT ScaleTransform(
223             [in] single HorizontalMultiplier,
224             [in] single VerticalMultiplier);
225         [id(0x0000000d)] HRESULT GetTransform(
226             [out] single* eM11,
227             [out] single* eM12,
228             [out] single* eM21,
229             [out] single* eM22,
230             [out] single* eDx,
231             [out] single* eDy);
232         [id(0x0000000e)] HRESULT SetTransform(
233             [in] single eM11,
234             [in] single eM12,
235             [in] single eM21,
236             [in] single eM22,
237             [in] single eDx,
238             [in] single eDy);
239         [id(0x00000007), propget, hidden] HRESULT eM11(
240             [out, retval] single* Value);
241         [id(0x00000007), propput, hidden] HRESULT eM11([in] single Value);
242         [id(0x00000008), propget, hidden] HRESULT eM12(
243             [out, retval] single* Value);
244         [id(0x00000008), propput, hidden] HRESULT eM12([in] single Value);
245         [id(0x00000009), propget, hidden] HRESULT eM21(
246             [out, retval] single* Value);
247         [id(0x00000009), propput, hidden] HRESULT eM21([in] single Value);
248         [id(0x0000000a), propget, hidden] HRESULT eM22(
249             [out, retval] single* Value);
250         [id(0x0000000a), propput, hidden] HRESULT eM22([in] single Value);
251         [id(0x0000000b), propget, hidden] HRESULT eDx(
252             [out, retval] single* Value);
253         [id(0x0000000b), propput, hidden] HRESULT eDx([in] single Value);
254         [id(0x0000000c), propget, hidden] HRESULT eDy(
255             [out, retval] single* Value);
256         [id(0x0000000c), propput, hidden] HRESULT eDy([in] single Value);
257         [id(0x0000000f), propget, hidden] HRESULT Data(
258             [out, retval] XFORM* XFORM);
259         [id(0x0000000f), propput, hidden] HRESULT Data([in] XFORM XFORM);
260     };
261
262     interface IInkDisp;
263
264     [
265         odl,
266         uuid(9794FF82-6071-4717-8A8B-6AC7C64A686E),
267         dual,
268         oleautomation
269     ]
270     interface IInkRectangle
271     {
272         [id(1), propget] HRESULT Top([out, retval] long* Units);
273         [id(1), propput] HRESULT Top([in] long Units);
274         [id(2), propget] HRESULT Left([out, retval] long* Units);
275         [id(2), propput] HRESULT Left([in] long Units);
276         [id(3), propget] HRESULT Bottom([out, retval] long* Units);
277         [id(3), propput] HRESULT Bottom([in] long Units);
278         [id(4), propget] HRESULT Right([out, retval] long* Units);
279         [id(4), propput] HRESULT Right([in] long Units);
280         [id(7), propget] HRESULT Data([out, retval] RECT* Rect);
281         [id(7), propput] HRESULT Data([in] RECT Rect);
282         [id(5)] HRESULT GetRectangle(
283             [out] long* Top,
284             [out] long* Left,
285             [out] long* Bottom,
286             [out] long* Right);
287         [id(6)] HRESULT SetRectangle(
288             [in] long Top,
289             [in] long Left,
290             [in] long Bottom,
291             [in] long Right);
292     };
293
294     interface IInkStrokes;
295
296     typedef enum {
297         TPMU_Default,
298         TPMU_Inches,
299         TPMU_Centimeters,
300         TPMU_Degrees,
301         TPMU_Radians,
302         TPMU_Seconds,
303         TPMU_Pounds,
304         TPMU_Grams
305     } TabletPropertyMetricUnit;
306
307     [
308         odl,
309         uuid(43242FEA-91D1-4A72-963E-FBB91829CFA2),
310         dual,
311         oleautomation
312     ]
313     interface IInkStrokeDisp : IDispatch {
314         [id(0x00000002), propget]    HRESULT Id([out, retval] long* Id);
315         [id(0x0000000d), propget]    HRESULT BezierPoints(
316             [out, retval] VARIANT* Points);
317         [id(0x00000004), propget]    HRESULT DrawingAttributes(
318             [out, retval] IInkDrawingAttributes** DrawAttrs);
319         [id(0x00000004), propputref] HRESULT DrawingAttributes(
320             [in] IInkDrawingAttributes* DrawAttrs);
321         [id(0x0000000c), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);
322         [id(0x0000000b), propget]    HRESULT ExtendedProperties(
323             [out, retval] IInkExtendedProperties** Properties);
324         [id(0x0000000e), propget]    HRESULT PolylineCusps(
325             [out, retval] VARIANT* Cusps);
326         [id(0x0000000f), propget]    HRESULT BezierCusps(
327             [out, retval] VARIANT* Cusps);
328         [id(0x00000010), propget]    HRESULT SelfIntersections(
329             [out, retval] VARIANT* Intersections);
330         [id(0x00000011), propget]    HRESULT PacketCount(
331             [out, retval] long* plCount);
332         [id(0x00000012), propget]    HRESULT PacketSize(
333             [out, retval] long* plSize);
334         [id(0x00000013), propget]    HRESULT PacketDescription(
335             [out, retval] VARIANT* PacketDescription);
336         [id(0x00000014), propget]    HRESULT Deleted(
337             [out, retval] VARIANT_BOOL* Deleted);
338         [id(0x00000003)]             HRESULT GetBoundingBox(
339             [in, optional, defaultvalue(0)] InkBoundingBoxMode BoundingBoxMode,
340             [out, retval] IInkRectangle** Rectangle);
341         [id(0x00000005)]             HRESULT FindIntersections(
342             [in] IInkStrokes* Strokes,
343             [out, retval] VARIANT* Intersections);
344         [id(0x00000006)]             HRESULT GetRectangleIntersections(
345             [in] IInkRectangle* Rectangle,
346             [out, retval] VARIANT* Intersections);
347         [id(0x00000007)]             HRESULT Clip(
348             [in] IInkRectangle* Rectangle);
349         [id(0x00000008)]             HRESULT HitTestCircle(
350             [in] long x,
351             [in] long y,
352             [in] single radius,
353             [out, retval] VARIANT_BOOL* Intersects);
354         [id(0x00000009)]             HRESULT NearestPoint(
355             [in] long x,
356             [in] long y,
357             [in, out, optional, defaultvalue(0)] single* Distance,
358             [out, retval] single* Point);
359         [id(0x0000000a)]             HRESULT Split(
360             [in] single SplitAt,
361             [out, retval] IInkStrokeDisp** NewStroke);
362         [id(0x00000015)]             HRESULT GetPacketDescriptionPropertyMetrics(
363             [in] BSTR propertyName,
364             [out] long* Minimum,
365             [out] long* Maximum,
366             [out] TabletPropertyMetricUnit* Units,
367             [out] single* Resolution);
368         [id(0x00000016)]             HRESULT GetPoints(
369             [in, optional, defaultvalue(0)] long Index,
370             [in, optional, defaultvalue(-1)] long Count,
371             [out, retval] VARIANT* Points);
372         [id(0x00000017)]             HRESULT SetPoints(
373             [in] VARIANT Points,
374             [in, optional, defaultvalue(0)] long Index,
375             [in, optional, defaultvalue(-1)] long Count,
376             [out, retval] long* NumberOfPointsSet);
377         [id(0x00000018)]             HRESULT GetPacketData(
378             [in, optional, defaultvalue(0)] long Index,
379             [in, optional, defaultvalue(-1)] long Count,
380             [out, retval] VARIANT* PacketData);
381         [id(0x00000019)]             HRESULT GetPacketValuesByProperty(
382             [in] BSTR propertyName,
383             [in, optional, defaultvalue(0)] long Index,
384             [in, optional, defaultvalue(-1)] long Count,
385             [out, retval] VARIANT* PacketValues);
386         [id(0x0000001a)]             HRESULT SetPacketValuesByProperty(
387             [in] BSTR bstrPropertyName,
388             [in] VARIANT PacketValues,
389             [in, optional, defaultvalue(0)] long Index,
390             [in, optional, defaultvalue(-1)] long Count,
391             [out, retval] long* NumberOfPacketsSet);
392         [id(0x0000001b)]             HRESULT GetFlattenedBezierPoints(
393             [in, optional, defaultvalue(0)] long FittingError,
394             [out, retval] VARIANT* FlattenedBezierPoints);
395         [id(0x0000001d)]             HRESULT Transform(
396             [in] IInkTransform* Transform,
397             [in, optional, defaultvalue(0)] VARIANT_BOOL ApplyOnPenWidth);
398         [id(0x0000001c)]             HRESULT ScaleToRectangle(
399             [in] IInkRectangle* Rectangle);
400         [id(0x0000001e)]             HRESULT Move(
401             [in] single HorizontalComponent,
402             [in] single VerticalComponent);
403         [id(0x0000001f)]             HRESULT Rotate(
404             [in] single Degrees,
405             [in, optional, defaultvalue(0)] single x,
406             [in, optional, defaultvalue(0)] single y);
407         [id(0x00000020)]             HRESULT Shear(
408             [in] single HorizontalMultiplier,
409             [in] single VerticalMultiplier);
410         [id(0x00000021)]             HRESULT ScaleTransform(
411             [in] single HorizontalMultiplier,
412             [in] single VerticalMultiplier);
413     };
414
415     interface IInkRecognitionResult;
416
417     [
418         odl,
419         uuid(F1F4C9D8-590A-4963-B3AE-1935671BB6F3),
420         dual,
421         oleautomation
422     ]
423     interface IInkStrokes : IDispatch {
424         [propget]                   HRESULT Count(
425             [out, retval] long *Count);
426         [propget, restricted]       HRESULT _NewEnum(
427             [out, retval] IUnknown **_NewEnum);
428         [propget]                   HRESULT Ink(
429             [out, retval] IInkDisp **Ink);
430         [propget]                   HRESULT RecognitionResult(
431             [out, retval] IInkRecognitionResult **RecognitionResult);
432         HRESULT ToString(
433             [out, retval] BSTR *ToString);
434         HRESULT Item(
435             [in] long Index,
436             [out, retval] IInkStrokeDisp **Stroke);
437         HRESULT Add(
438             [in] IInkStrokeDisp *InkStroke);
439         HRESULT AddStrokes(
440             [in] IInkStrokes *InkStrokes);
441         HRESULT Remove(
442             [in] IInkStrokeDisp *InkStroke);
443         HRESULT RemoveStrokes(
444             [in] IInkStrokes *InkStrokes);
445         HRESULT ModifyDrawingAttributes(
446             [in] IInkDrawingAttributes *DrawAttrs);
447         HRESULT GetBoundingBox(
448             [in] InkBoundingBoxMode BoundingBoxMode,
449             [out, retval] IInkRectangle **BoundingBox);
450         HRESULT Transform(
451             [in] IInkTransform *Transform,
452             [in] VARIANT_BOOL ApplyOnPenWidth);
453         HRESULT ScaleToRectangle(
454             [in] IInkRectangle *Rectangle);
455         HRESULT Move(
456             [in] float HorizontalComponent,
457             [in] float VerticalComponent);
458         HRESULT Rotate(
459             [in] float Degrees,
460             [in] float x,
461             [in] float y);
462         HRESULT Shear(
463             [in] float HorizontalMultiplier,
464             [in] float VerticalMultiplier);
465         HRESULT ScaleTransform(
466             [in] float HorizontalMultiplier,
467             [in] float VerticalMultiplier);
468         HRESULT Clip(
469             [in] IInkRectangle *Rectangle);
470         HRESULT RemoveRecognitionResult();
471     };
472
473     [
474         odl,
475         uuid(7E23A88F-C30E-420f-9BDB-28902543F0C1),
476         dual,
477         oleautomation
478     ]
479     interface IInkCustomStrokes : IDispatch {
480         [propget]               HRESULT Count(
481             [out, retval] long *Count);
482         [propget]               HRESULT _NewEnum(
483             [out, retval] IUnknown **_NewEnum);
484         HRESULT Item(
485             [in] VARIANT Identifier,
486             [out, retval] IInkStrokes **Strokes);
487         HRESULT Add(
488             [in] BSTR Name,
489             [in] IInkStrokes *Strokes);
490         HRESULT Remove(
491             [in] VARIANT Identifier);
492         HRESULT Clear();
493     };
494
495     interface IInkRecognitionAlternate;
496     interface IInkRecognitionAlternates;
497
498     [
499         odl,
500         uuid(3BC129A8-86CD-45ad-BDE8-E0D32D61C16D),
501         dual,
502         oleautomation
503     ]
504     interface IInkRecognitionResult : IDispatch {
505         [propget]               HRESULT TopString(
506             [out, retval] BSTR *TopString);
507         [propget]               HRESULT TopAlternate(
508             [out, retval] IInkRecognitionAlternate **TopAlternate);
509         [propget]               HRESULT TopConfidence(
510             [out, retval] InkRecognitionConfidence *TopConfidence);
511         [propget]               HRESULT Strokes(
512             [out, retval] IInkStrokes **Strokes);
513         HRESULT AlternatesFromSelection(
514             [in] long selectionStart,
515             [in] long selectionLength,
516             [in] long maximumAlternates,
517             [out, retval] IInkRecognitionAlternates **AlternatesFromSelection);
518         HRESULT ModifyTopAlternate(
519             [in] IInkRecognitionAlternate *Alternate);
520         HRESULT SetResultOnStrokes();
521     };
522
523     [
524         odl,
525         uuid(B7E660AD-77E4-429b-ADDA-873780D1FC4A),
526         dual,
527         oleautomation
528     ]
529     interface IInkRecognitionAlternate : IDispatch {
530         [propget]               HRESULT String(
531             [out, retval] BSTR *RecoString);
532         [propget]               HRESULT Confidence(
533             [out, retval] InkRecognitionConfidence *Confidence);
534         [propget]               HRESULT Baseline(
535             [out, retval] VARIANT *Baseline);
536         [propget]               HRESULT Midline(
537             [out, retval] VARIANT *Midline);
538         [propget]               HRESULT Ascender(
539             [out, retval] VARIANT *Ascender);
540         [propget]               HRESULT Descender(
541             [out, retval] VARIANT *Descender);
542         [propget]               HRESULT LineNumber(
543             [out, retval] long *LineNumber);
544         [propget]               HRESULT Strokes(
545             [out, retval] IInkStrokes **Strokes);
546         [propget]               HRESULT LineAlternates(
547             [out, retval] IInkRecognitionAlternates **LineAlternates);
548         [propget]               HRESULT ConfidenceAlternates(
549             [out, retval] IInkRecognitionAlternates **ConfidenceAlternates);
550         HRESULT GetStrokesFromStrokeRanges(
551             [in] IInkStrokes *Stroke,
552             [out, retval] IInkStrokes **GetStrokesFromTextRange);
553         HRESULT GetStrokesFromTextRange(
554             [in, out] long *selectionStart,
555             [in, out] long *selectionLength,
556             [out, retval] IInkStrokes **GetStrokesFromTextRange);
557         HRESULT GetTextRangeFromStrokes(
558             [in] IInkStrokes *Strokes,
559             [in, out] long *selectionStart,
560             [in, out] long *selectionLength);
561         HRESULT AlternatesWithConstantPropertyValues(
562             [in] BSTR PropertyType,
563             [out, retval] IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);
564         HRESULT GetPropertyValue(
565             [in] BSTR PropertyType,
566             [out, retval] VARIANT *PropertyValue);
567     };
568
569     [
570         odl,
571         uuid(286A167F-9F19-4c61-9D53-4F07BE622B84),
572         dual,
573         oleautomation
574     ]
575     interface IInkRecognitionAlternates : IDispatch {
576     [propget]                   HRESULT Count(
577         [out, retval] long *Count);
578     [propget, restricted]       HRESULT _NewEnum(
579         [out, retval] IUnknown **_NewEnum);
580     [propget]                   HRESULT Strokes(
581         [out, retval] IInkStrokes **Strokes);
582     HRESULT Item(
583         [in] long Index,
584         [out, retval] IInkRecognitionAlternate **InkRecoAlternate);
585     };
586
587     [
588         odl,
589         uuid(9D398FA0-C4E2-4fcd-9973-975CAAF47EA6),
590         dual,
591         oleautomation
592     ]
593     interface IInkDisp : IDispatch {
594         [propget]               HRESULT Strokes(
595             [out, retval] IInkStrokes **Strokes);
596         [propget]               HRESULT ExtendedProperties(
597             [out, retval] IInkExtendedProperties **Properties);
598         [propget]               HRESULT Dirty(
599             [out, retval] VARIANT_BOOL *Dirty);
600         [propput]               HRESULT Dirty(
601             [in] VARIANT_BOOL Dirty);
602         [propget]               HRESULT CustomStrokes(
603             [out, retval] IInkCustomStrokes **CustomStrokes);
604         HRESULT GetBoundingBox(
605             [in] InkBoundingBoxMode BoundingBoxMode,
606             [out] IInkRectangle **Rectangle);
607         HRESULT DeleteStrokes(
608             [in, unique] IInkStrokes *Strokes);
609         HRESULT DeleteStroke(
610             [in] IInkStrokeDisp *Stroke);
611         HRESULT ExtractStrokes(
612             [in] IInkStrokes *Strokes,
613             [in] InkExtractFlags ExtractFlags,
614             [out, retval] IInkDisp **ExtractedInk);
615         HRESULT ExtractWithRectangle(
616             [in] IInkRectangle *Rectangle,
617             [in] InkExtractFlags ExtractFlags,
618             [out, retval] IInkDisp **ExtractedInk);
619         HRESULT Clip(
620             [in] IInkRectangle *Rectangle);
621         HRESULT Clone(
622             [out, retval] IInkDisp **NewInk);
623         HRESULT HitTestCircle(
624             [in] long X,
625             [in] long Y,
626             [in] float radius,
627             [out, retval] IInkStrokes **Strokes);
628         HRESULT HitTestWithRectangle(
629             [in] IInkRectangle *SelectionRectangle,
630             [in] float IntersectPercent,
631             [out, retval] IInkStrokes **Strokes);
632         HRESULT HitTestWithLasso(
633             [in] VARIANT Points,
634             [in] float IntersectPercent,
635             [in, out, unique] VARIANT *LassoPoints,
636             [out, retval] IInkStrokes **Strokes);
637         HRESULT NearestPoint(
638             [in] long X,
639             [in] long Y,
640             [in, out] float *PointOnStroke,
641             [in, out] float *DistanceFromPacket,
642             [out, retval] IInkStrokeDisp **Stroke);
643         HRESULT CreateStrokes(
644             [in] VARIANT StrokeIds,
645             [out, retval] IInkStrokes **Strokes);
646         HRESULT AddStrokesAtRectangle(
647             [in] IInkStrokes *SourceStrokes,
648             [in] IInkRectangle *TargetRectangle);
649         HRESULT Save(
650             [in] InkPersistenceFormat PersistenceFormat,
651             [in] InkPersistenceCompressionMode CompressionMode,
652             [out, retval] VARIANT *Data);
653         HRESULT Load(
654             [in] VARIANT Data);
655         HRESULT CreateStroke(
656             [in] VARIANT PacketData,
657             [in] VARIANT PacketDescription,
658             [out, retval] IInkStrokeDisp **Stroke);
659         HRESULT ClipboardCopyWithRectangle(
660             [in] IInkRectangle *Rectangle,
661             [in] InkClipboardFormats ClipboardFormats,
662             [in] InkClipboardModes ClipboardModes,
663             [out, retval] IDataObject **DataObject);
664         HRESULT ClipboardCopy(
665             [in] IInkStrokes *strokes,
666             [in] InkClipboardFormats ClipboardFormats,
667             [in] InkClipboardModes ClipboardModes,
668             [out, retval] IDataObject **DataObject);
669         HRESULT CanPaste(
670             [in] IDataObject *DataObject,
671             [out, retval] VARIANT_BOOL *CanPaste);
672         HRESULT ClipboardPaste(
673             [in] long x,
674             [in] long y,
675             [in, unique] IDataObject *DataObject,
676             [out, retval] IInkStrokes **Strokes);
677     };
678
679     [
680         odl,
681         uuid(E6257A9C-B511-4F4C-A8B0-A7DBC9506B83),
682         dual,
683         oleautomation
684     ]
685     interface IInkRenderer : IDispatch {
686         HRESULT GetViewTransform([in] IInkTransform* ViewTransform);
687         HRESULT SetViewTransform([in] IInkTransform* ViewTransform);
688         HRESULT GetObjectTransform([in] IInkTransform* ObjectTransform);
689         HRESULT SetObjectTransform([in] IInkTransform* ObjectTransform);
690         HRESULT Draw(
691             [in] long hDC,
692             [in] IInkStrokes* Strokes);
693         HRESULT DrawStroke(
694             [in] long hDC,
695             [in] IInkStrokeDisp* Stroke,
696             [in, optional, defaultvalue(0)]
697             IInkDrawingAttributes* DrawingAttributes);
698         HRESULT PixelToInkSpace(
699             [in] long hDC,
700             [in, out] long* x,
701             [in, out] long* y);
702         HRESULT InkSpaceToPixel(
703             [in] long hdcDisplay,
704             [in, out] long* x,
705             [in, out] long* y);
706         HRESULT PixelToInkSpaceFromPoints(
707             [in] long hDC,
708             [in, out] VARIANT* Points);
709         HRESULT InkSpaceToPixelFromPoints(
710             [in] long hDC,
711             [in, out] VARIANT* Points);
712         HRESULT Measure(
713             [in] IInkStrokes* Strokes,
714             [out, retval] IInkRectangle** Rectangle);
715         HRESULT MeasureStroke(
716             [in] IInkStrokeDisp* Stroke,
717             [in, optional, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes,
718             [out, retval] IInkRectangle** Rectangle);
719         HRESULT Move(
720             [in] single HorizontalComponent,
721             [in] single VerticalComponent);
722         HRESULT Rotate(
723             [in] single Degrees,
724             [in, optional, defaultvalue(0)] single x,
725             [in, optional, defaultvalue(0)] single y);
726         HRESULT ScaleTransform(
727             [in] single HorizontalMultiplier,
728             [in] single VerticalMultiplier,
729             [in, optional, defaultvalue(-1)] VARIANT_BOOL ApplyOnPenWidth);
730     };
731
732     typedef enum {
733         ICM_InkOnly,
734         ICM_GestureOnly,
735         ICM_InkAndGesture
736     } InkCollectionMode;
737
738     typedef enum {
739         IMP_Default,
740         IMP_Arrow,
741         IMP_Crosshair,
742         IMP_Ibeam,
743         IMP_SizeNESW,
744         IMP_SizeNS,
745         IMP_SizeNWSE,
746         IMP_SizeWE,
747         IMP_UpArrow,
748         IMP_Hourglass,
749         IMP_NoDrop,
750         IMP_ArrowHourglass,
751         IMP_ArrowQuestion,
752         IMP_SizeAll,
753         IMP_Hand,
754         IMP_Custom = 99
755     } InkMousePointer;
756
757     typedef enum {
758         THWC_Integrated = 1,
759         THWC_CursorMustTouch = 2,
760         THWC_HardProximity = 4,
761         THWC_CursorsHavePhysicalIds = 8
762     } TabletHardwareCapabilities;
763
764     [
765         odl,
766         uuid(2DE25EAA-6EF8-42D5-AEE9-185BC81B912D),
767         dual,
768         oleautomation
769     ]
770     interface IInkTablet : IDispatch {
771         [propget] HRESULT Name([out, retval] BSTR* Name);
772         [propget] HRESULT PlugAndPlayId([out, retval] BSTR* Id);
773         [propget] HRESULT MaximumInputRectangle([out, retval] IInkRectangle** Rectangle);
774         [propget] HRESULT HardwareCapabilities(
775             [out, retval] TabletHardwareCapabilities* Capabilities);
776         HRESULT IsPacketPropertySupported(
777             [in] BSTR packetPropertyName,
778             [out, retval] VARIANT_BOOL* Supported);
779         HRESULT GetPropertyMetrics(
780             [in] BSTR propertyName,
781             [out] long* Minimum,
782             [out] long* Maximum,
783             [out] TabletPropertyMetricUnit* Units,
784             [out] single* Resolution);
785     };
786
787     typedef enum {
788         ICBS_Unavailable,
789         ICBS_Up,
790         ICBS_Down
791     } InkCursorButtonState;
792
793     [
794         odl,
795         uuid(85EF9417-1D59-49B2-A13C-702C85430894),
796         dual,
797         oleautomation
798     ]
799     interface IInkCursorButton : IDispatch {
800         [propget] HRESULT Name([out, retval] BSTR* Name);
801         [propget] HRESULT Id([out, retval] BSTR* Id);
802         [propget] HRESULT State([out, retval] InkCursorButtonState* CurrentState);
803     };
804
805     [
806         odl,
807         uuid(3671CC40-B624-4671-9FA0-DB119D952D54),
808         dual,
809         oleautomation
810     ]
811     interface IInkCursorButtons : IDispatch {
812         [propget] HRESULT Count([out, retval] long* Count);
813         [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
814         HRESULT Item(
815             [in] VARIANT Identifier,
816             [out, retval] IInkCursorButton** Button);
817     };
818
819     [
820         odl,
821         uuid(AD30C630-40C5-4350-8405-9C71012FC558),
822         dual,
823         oleautomation
824     ]
825     interface IInkCursor : IDispatch {
826         [id(0x00000000), propget]    HRESULT Name([out, retval] BSTR* Name);
827         [id(0x00000001), propget]    HRESULT Id([out, retval] long* Id);
828         [id(0x00000004), propget]    HRESULT Inverted(
829             [out, retval] VARIANT_BOOL* Status);
830         [id(0x00000002), propget]    HRESULT DrawingAttributes(
831             [out, retval] IInkDrawingAttributes** Attributes);
832         [id(0x00000002), propputref] HRESULT DrawingAttributes(
833             [in] IInkDrawingAttributes* Attributes);
834         [id(0x00000005), propget]    HRESULT Tablet(
835             [out, retval] IInkTablet** Tablet);
836         [id(0x00000003), propget]    HRESULT Buttons(
837             [out, retval] IInkCursorButtons** Buttons);
838     };
839
840     [
841         odl,
842         uuid(A248C1AC-C698-4E06-9E5C-D57F77C7E647),
843         dual,
844         oleautomation
845     ]
846     interface IInkCursors : IDispatch {
847         [propget] HRESULT Count([out, retval] long* Count);
848         [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
849         HRESULT Item(
850             [in] long Index,
851             [out, retval] IInkCursor** Cursor);
852     };
853
854     typedef enum {
855         IAG_AllGestures = 0,
856         IAG_NoGesture = 61440,
857         IAG_Scratchout = 61441,
858         IAG_Triangle = 61442,
859         IAG_Square = 61443,
860         IAG_Star = 61444,
861         IAG_Check = 61445,
862         IAG_Curlicue = 61456,
863         IAG_DoubleCurlicue = 61457,
864         IAG_Circle = 61472,
865         IAG_DoubleCircle = 61473,
866         IAG_SemiCircleLeft = 61480,
867         IAG_SemiCircleRight = 61481,
868         IAG_ChevronUp = 61488,
869         IAG_ChevronDown = 61489,
870         IAG_ChevronLeft = 61490,
871         IAG_ChevronRight = 61491,
872         IAG_ArrowUp = 61496,
873         IAG_ArrowDown = 61497,
874         IAG_ArrowLeft = 61498,
875         IAG_ArrowRight = 61499,
876         IAG_Up = 61528,
877         IAG_Down = 61529,
878         IAG_Left = 61530,
879         IAG_Right = 61531,
880         IAG_UpDown = 61536,
881         IAG_DownUp = 61537,
882         IAG_LeftRight = 61538,
883         IAG_RightLeft = 61539,
884         IAG_UpLeftLong = 61540,
885         IAG_UpRightLong = 61541,
886         IAG_DownLeftLong = 61542,
887         IAG_DownRightLong = 61543,
888         IAG_UpLeft = 61544,
889         IAG_UpRight = 61545,
890         IAG_DownLeft = 61546,
891         IAG_DownRight = 61547,
892         IAG_LeftUp = 61548,
893         IAG_LeftDown = 61549,
894         IAG_RightUp = 61550,
895         IAG_RightDown = 61551,
896         IAG_Exclamation = 61604,
897         IAG_Tap = 61680,
898         IAG_DoubleTap = 61681
899     } InkApplicationGesture;
900
901     typedef enum {
902         ICEI_DefaultEvents = -1,
903         ICEI_CursorDown = 0,
904         ICEI_Stroke,
905         ICEI_NewPackets,
906         ICEI_NewInAirPackets,
907         ICEI_CursorButtonDown,
908         ICEI_CursorButtonUp,
909         ICEI_CursorInRange,
910         ICEI_CursorOutOfRange,
911         ICEI_SystemGesture,
912         ICEI_TabletAdded,
913         ICEI_TabletRemoved,
914         ICEI_MouseDown,
915         ICEI_MouseMove,
916         ICEI_MouseUp,
917         ICEI_MouseWheel,
918         ICEI_DblClick,
919         ICEI_AllEvents
920     } InkCollectorEventInterest;
921
922     [
923         odl,
924         uuid(F0F060B5-8B1F-4A7C-89EC-880692588A4F),
925         dual,
926         oleautomation
927     ]
928     interface IInkCollector : IDispatch {
929         [id(0x00000002), propget]    HRESULT hWnd(
930             [out, retval] long* CurrentWindow);
931         [id(0x00000002), propput]    HRESULT hWnd([in] long CurrentWindow);
932         [id(0x00000001), propget]    HRESULT Enabled(
933             [out, retval] VARIANT_BOOL* Collecting);
934         [id(0x00000001), propput]    HRESULT Enabled(
935             [in] VARIANT_BOOL Collecting);
936         [id(0x00000005), propget]    HRESULT DefaultDrawingAttributes(
937             [out, retval] IInkDrawingAttributes** CurrentAttributes);
938         [id(0x00000005), propputref] HRESULT DefaultDrawingAttributes(
939             [in] IInkDrawingAttributes* CurrentAttributes);
940         [id(0x00000006), propget]    HRESULT Renderer(
941             [out, retval] IInkRenderer** CurrentInkRenderer);
942         [id(0x00000006), propputref] HRESULT Renderer(
943             [in] IInkRenderer* CurrentInkRenderer);
944         [id(0x00000007), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);
945         [id(0x00000007), propputref] HRESULT Ink([in] IInkDisp* Ink);
946         [id(0x00000008), propget]    HRESULT AutoRedraw(
947             [out, retval] VARIANT_BOOL* AutoRedraw);
948         [id(0x00000008), propput]    HRESULT AutoRedraw(
949             [in] VARIANT_BOOL AutoRedraw);
950         [id(0x00000009), propget]    HRESULT CollectingInk(
951             [out, retval] VARIANT_BOOL* Collecting);
952         [id(0x0000001c), propget]    HRESULT CollectionMode(
953             [out, retval] InkCollectionMode* Mode);
954         [id(0x0000001c), propput]    HRESULT CollectionMode(
955             [in] InkCollectionMode Mode);
956         [id(0x0000001f), propget]    HRESULT DynamicRendering(
957             [out, retval] VARIANT_BOOL* Enabled);
958         [id(0x0000001f), propput]    HRESULT DynamicRendering(
959             [in] VARIANT_BOOL Enabled);
960         [id(0x00000020), propget]    HRESULT DesiredPacketDescription(
961             [out, retval] VARIANT* PacketGuids);
962         [id(0x00000020), propput]    HRESULT DesiredPacketDescription(
963             [in] VARIANT PacketGuids);
964         [id(0x00000023), propget]    HRESULT MouseIcon(
965             [out, retval] IPictureDisp** MouseIcon);
966         [id(0x00000023), propput]    HRESULT MouseIcon(
967             [in] IPictureDisp* MouseIcon);
968         [id(0x00000023), propputref] HRESULT MouseIcon(
969             [in] IPictureDisp* MouseIcon);
970         [id(0x00000024), propget]    HRESULT MousePointer(
971             [out, retval] InkMousePointer* MousePointer);
972         [id(0x00000024), propput]    HRESULT MousePointer(
973             [in] InkMousePointer MousePointer);
974         [id(0x00000014), propget]    HRESULT Cursors(
975             [out, retval] IInkCursors** Cursors);
976         [id(0x00000015), propget]    HRESULT MarginX(
977             [out, retval] long* MarginX);
978         [id(0x00000015), propput]    HRESULT MarginX([in] long MarginX);
979         [id(0x00000016), propget]    HRESULT MarginY(
980             [out, retval] long* MarginY);
981         [id(0x00000016), propput]    HRESULT MarginY([in] long MarginY);
982         [id(0x00000019), propget]    HRESULT Tablet(
983             [out, retval] IInkTablet** SingleTablet);
984         [id(0x00000026), propget]    HRESULT SupportHighContrastInk(
985             [out, retval] VARIANT_BOOL* Support);
986         [id(0x00000026), propput]    HRESULT SupportHighContrastInk(
987             [in] VARIANT_BOOL Support);
988         [id(0x0000001d)]             HRESULT SetGestureStatus(
989             [in] InkApplicationGesture Gesture,
990             [in] VARIANT_BOOL Listen);
991         [id(0x0000001e)]             HRESULT GetGestureStatus(
992             [in] InkApplicationGesture Gesture,
993             [out, retval] VARIANT_BOOL* Listening);
994         [id(0x00000018)]             HRESULT GetWindowInputRectangle(
995             [in, out] IInkRectangle** WindowInputRectangle);
996         [id(0x00000017)]             HRESULT SetWindowInputRectangle(
997             [in] IInkRectangle* WindowInputRectangle);
998         [id(0x0000001a)]             HRESULT SetAllTabletsMode(
999             [in, optional, defaultvalue(-1)] VARIANT_BOOL UseMouseForInput);
1000         [id(0x0000001b)]             HRESULT SetSingleTabletIntegratedMode(
1001             [in] IInkTablet* Tablet);
1002         [id(0x0000000b)]             HRESULT GetEventInterest(
1003             [in] InkCollectorEventInterest EventId,
1004             [out, retval] VARIANT_BOOL* Listen);
1005         [id(0x0000000a)]             HRESULT SetEventInterest(
1006             [in] InkCollectorEventInterest EventId,
1007             [in] VARIANT_BOOL Listen);
1008     };
1009 };