/* Copyright (C) 2007 C John Klehm
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";
import "ocidl.idl";

[
    uuid(7D868ACD-1A5D-4A47-A247-F39741353012),
    version(1.0)
]
library MSINKAUTLib
{
    importlib("stdole2.tlb");

    typedef float single;

    typedef enum InkBoundingBoxMode {
        IBBM_Default = 0,
        IBBM_NoCurveFit = 1,
        IBBM_CurveFit = 2,
        IBBM_PointsOnly = 3,
        IBBM_Union = 4
    } InkBoundingBoxMode;

    typedef enum InkExtractFlags {
        IEF_CopyFromOriginal = 0x0,
        IEF_RemoveFromOriginal = 0x1,
        IEF_Default = IEF_RemoveFromOriginal
    } InkExtractFlags;

    typedef enum InkPersistenceFormat {
        IPF_InkSerializeFormat = 0,
        IPF_Base64InkSerializedFormat = 1,
        IPF_GIF = 2,
        IPF_Base64GIF = 3
    } InkPersistenceFormat;

    typedef enum InkPersistenceCompressionMode
    {
        IPCM_Default = 0,
        IPCM_MaximumCompression = 1,
        IPCM_NoCompression = 2
    } InkPersistenceCompressionMode;

    typedef enum InkPenTip {
        IPT_Ball = 0,
        IPT_Rectangle = 1
    } InkPenTip;

    typedef enum InkRasterOperation {
        IRO_Black = 1,
        IRO_NotMergePen,
        IRO_MaskNotPen,
        IRO_NotCopyPen,
        IRO_MaskPenNot,
        IRO_Not,
        IRO_XOrPen,
        IRO_NotMaskPen,
        IRO_MaskPen,
        IRO_NotXOrPen,
        IRO_NoOperation,
        IRO_MergeNotPen,
        IRO_CopyPen,
        IRO_MergePenNot,
        IRO_MergePen,
        IRO_White
    } InkRasterOperation;

    typedef enum InkClipboardModes {
        ICB_Copy = 0,
        ICB_Cut = 0x1,
        ICB_DelayedCopy = 0x20,
        ICB_ExtractOnly = 0x30,
        ICB_Default = ICB_Copy
    } InkClipboardModes;

    typedef enum InkClipboardFormats {
        ICF_None = 0,
        ICF_InkSerializedFormat = 0x1,
        ICF_SketchInk = 0x2,
        ICF_TextInk = 0x6,
        ICF_EnhancedMetafile = 0x8,
        ICF_Metafile = 0x20,
        ICF_Bitmap = 0x40,
        ICF_PasteMask = 0x7,
        ICF_CopyMask = 0x7f,
        ICF_Default = ICF_CopyMask
    } InkClipboardFormats;

    typedef enum InkRecognitionConfidence
    {
        IRC_Strong = 0,
        IRC_Intermediate = 1,
        IRC_Poor = 2
    } InkRecognitionConfidence;

    [
        odl,
        uuid(DB489209-B7C3-411D-90F6-1548CFFF271E),
        dual,
        oleautomation
    ]
    interface IInkExtendedProperty : IDispatch {
        [id(0x00000001), propget] HRESULT Guid([out, retval] BSTR* Guid);
        [id(0x00000002), propget] HRESULT Data([out, retval] VARIANT* Data);
        [id(0x00000002), propput] HRESULT Data([in] VARIANT Data);
    };

    [
        odl,
        uuid(89F2A8BE-95A9-4530-8B8F-88E971E3E25F),
        dual,
        oleautomation
    ]
    interface IInkExtendedProperties : IDispatch {
        HRESULT Count([out, retval] long* Count);
        HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
        HRESULT Item(
            [in] VARIANT Identifier,
            [out, retval] IInkExtendedProperty** Item);
        HRESULT Add(
            [in] BSTR Guid,
            [in] VARIANT Data,
            [out, retval] IInkExtendedProperty** InkExtendedProperty);
        HRESULT Remove([in] VARIANT Identifier);
        HRESULT Clear();
        HRESULT DoesPropertyExist(
            [in] BSTR Guid,
            [out, retval] VARIANT_BOOL* DoesPropertyExist);
    };

    [
        odl,
        uuid(BF519B75-0A15-4623-ADC9-C00D436A8092),
        dual,
        oleautomation
    ]
    interface IInkDrawingAttributes : IDispatch {
        [id(0x00000002), propget] HRESULT Color(
            [out, retval] long* CurrentColor);
        [id(0x00000002), propput] HRESULT Color([in] long CurrentColor);
        [id(0x00000003), propget] HRESULT Width(
            [out, retval] single* CurrentWidth);
        [id(0x00000003), propput] HRESULT Width([in] single CurrentWidth);
        [id(0x00000001), propget] HRESULT Height(
            [out, retval] single* CurrentHeight);
        [id(0x00000001), propput] HRESULT Height([in] single CurrentHeight);
        [id(0x00000004), propget] HRESULT FitToCurve(
            [out, retval] VARIANT_BOOL* Flag);
        [id(0x00000004), propput] HRESULT FitToCurve([in] VARIANT_BOOL Flag);
        [id(0x00000005), propget] HRESULT IgnorePressure(
            [out, retval] VARIANT_BOOL* Flag);
        [id(0x00000005), propput] HRESULT IgnorePressure(
            [in] VARIANT_BOOL Flag);
        [id(0x00000006), propget] HRESULT AntiAliased(
            [out, retval] VARIANT_BOOL* Flag);
        [id(0x00000006), propput] HRESULT AntiAliased([in] VARIANT_BOOL Flag);
        [id(0x00000007), propget] HRESULT Transparency(
            [out, retval] long* CurrentTransparency);
        [id(0x00000007), propput] HRESULT Transparency(
            [in] long CurrentTransparency);
        [id(0x00000008), propget] HRESULT RasterOperation(
            [out, retval] InkRasterOperation* CurrentRasterOperation);
        [id(0x00000008), propput] HRESULT RasterOperation(
            [in] InkRasterOperation CurrentRasterOperation);
        [id(0x00000009), propget] HRESULT PenTip(
            [out, retval] InkPenTip* CurrentPenTip);
        [id(0x00000009), propput] HRESULT PenTip([in] InkPenTip CurrentPenTip);
        [id(0x0000000b), propget] HRESULT ExtendedProperties(
            [out, retval] IInkExtendedProperties** Properties);
        [id(0x0000000a)]          HRESULT Clone(
            [out, retval] IInkDrawingAttributes** DrawingAttributes);
    };

cpp_quote("#ifndef _WINGDI_")
/* already defined in wingdi.h but needed for WIDL */
    typedef struct tagXFORM {
        single eM11;
        single eM12;
        single eM21;
        single eM22;
        single eDx;
        single eDy;
    } XFORM;
cpp_quote("#endif /* _WINGDI_ */")

    [
        odl,
        uuid(615F1D43-8703-4565-88E2-8201D2ECD7B7),
        dual,
        oleautomation
    ]
    interface IInkTransform : IDispatch {
        [id(0x00000001)] HRESULT Reset();
        [id(0x00000002)] HRESULT Translate(
            [in] single HorizontalComponent,
            [in] single VerticalComponent);
        [id(0x00000003)] HRESULT Rotate(
            [in] single Degrees,
            [in, defaultvalue(0)] single x,
            [in, defaultvalue(0)] single y);
        [id(0x00000004)] HRESULT Reflect(
            [in] VARIANT_BOOL Horizontally,
            [in] VARIANT_BOOL Vertically);
        [id(0x00000005)] HRESULT Shear(
            [in] single HorizontalComponent,
            [in] single VerticalComponent);
        [id(0x00000006)] HRESULT ScaleTransform(
            [in] single HorizontalMultiplier,
            [in] single VerticalMultiplier);
        [id(0x0000000d)] HRESULT GetTransform(
            [out] single* eM11,
            [out] single* eM12,
            [out] single* eM21,
            [out] single* eM22,
            [out] single* eDx,
            [out] single* eDy);
        [id(0x0000000e)] HRESULT SetTransform(
            [in] single eM11,
            [in] single eM12,
            [in] single eM21,
            [in] single eM22,
            [in] single eDx,
            [in] single eDy);
        [id(0x00000007), propget, hidden] HRESULT eM11(
            [out, retval] single* Value);
        [id(0x00000007), propput, hidden] HRESULT eM11([in] single Value);
        [id(0x00000008), propget, hidden] HRESULT eM12(
            [out, retval] single* Value);
        [id(0x00000008), propput, hidden] HRESULT eM12([in] single Value);
        [id(0x00000009), propget, hidden] HRESULT eM21(
            [out, retval] single* Value);
        [id(0x00000009), propput, hidden] HRESULT eM21([in] single Value);
        [id(0x0000000a), propget, hidden] HRESULT eM22(
            [out, retval] single* Value);
        [id(0x0000000a), propput, hidden] HRESULT eM22([in] single Value);
        [id(0x0000000b), propget, hidden] HRESULT eDx(
            [out, retval] single* Value);
        [id(0x0000000b), propput, hidden] HRESULT eDx([in] single Value);
        [id(0x0000000c), propget, hidden] HRESULT eDy(
            [out, retval] single* Value);
        [id(0x0000000c), propput, hidden] HRESULT eDy([in] single Value);
        [id(0x0000000f), propget, hidden] HRESULT Data(
            [out, retval] XFORM* XFORM);
        [id(0x0000000f), propput, hidden] HRESULT Data([in] XFORM XFORM);
    };

    interface IInkDisp;

    [
        odl,
        uuid(9794FF82-6071-4717-8A8B-6AC7C64A686E),
        dual,
        oleautomation
    ]
    interface IInkRectangle
    {
        [id(1), propget] HRESULT Top([out, retval] long* Units);
        [id(1), propput] HRESULT Top([in] long Units);
        [id(2), propget] HRESULT Left([out, retval] long* Units);
        [id(2), propput] HRESULT Left([in] long Units);
        [id(3), propget] HRESULT Bottom([out, retval] long* Units);
        [id(3), propput] HRESULT Bottom([in] long Units);
        [id(4), propget] HRESULT Right([out, retval] long* Units);
        [id(4), propput] HRESULT Right([in] long Units);
        [id(7), propget] HRESULT Data([out, retval] RECT* Rect);
        [id(7), propput] HRESULT Data([in] RECT Rect);
        [id(5)] HRESULT GetRectangle(
            [out] long* Top,
            [out] long* Left,
            [out] long* Bottom,
            [out] long* Right);
        [id(6)] HRESULT SetRectangle(
            [in] long Top,
            [in] long Left,
            [in] long Bottom,
            [in] long Right);
    };

    interface IInkStrokes;

    typedef enum {
        TPMU_Default,
        TPMU_Inches,
        TPMU_Centimeters,
        TPMU_Degrees,
        TPMU_Radians,
        TPMU_Seconds,
        TPMU_Pounds,
        TPMU_Grams
    } TabletPropertyMetricUnit;

    [
        odl,
        uuid(43242FEA-91D1-4A72-963E-FBB91829CFA2),
        dual,
        oleautomation
    ]
    interface IInkStrokeDisp : IDispatch {
        [id(0x00000002), propget]    HRESULT Id([out, retval] long* Id);
        [id(0x0000000d), propget]    HRESULT BezierPoints(
            [out, retval] VARIANT* Points);
        [id(0x00000004), propget]    HRESULT DrawingAttributes(
            [out, retval] IInkDrawingAttributes** DrawAttrs);
        [id(0x00000004), propputref] HRESULT DrawingAttributes(
            [in] IInkDrawingAttributes* DrawAttrs);
        [id(0x0000000c), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);
        [id(0x0000000b), propget]    HRESULT ExtendedProperties(
            [out, retval] IInkExtendedProperties** Properties);
        [id(0x0000000e), propget]    HRESULT PolylineCusps(
            [out, retval] VARIANT* Cusps);
        [id(0x0000000f), propget]    HRESULT BezierCusps(
            [out, retval] VARIANT* Cusps);
        [id(0x00000010), propget]    HRESULT SelfIntersections(
            [out, retval] VARIANT* Intersections);
        [id(0x00000011), propget]    HRESULT PacketCount(
            [out, retval] long* plCount);
        [id(0x00000012), propget]    HRESULT PacketSize(
            [out, retval] long* plSize);
        [id(0x00000013), propget]    HRESULT PacketDescription(
            [out, retval] VARIANT* PacketDescription);
        [id(0x00000014), propget]    HRESULT Deleted(
            [out, retval] VARIANT_BOOL* Deleted);
        [id(0x00000003)]             HRESULT GetBoundingBox(
            [in, defaultvalue(0)] InkBoundingBoxMode BoundingBoxMode,
            [out, retval] IInkRectangle** Rectangle);
        [id(0x00000005)]             HRESULT FindIntersections(
            [in] IInkStrokes* Strokes,
            [out, retval] VARIANT* Intersections);
        [id(0x00000006)]             HRESULT GetRectangleIntersections(
            [in] IInkRectangle* Rectangle,
            [out, retval] VARIANT* Intersections);
        [id(0x00000007)]             HRESULT Clip(
            [in] IInkRectangle* Rectangle);
        [id(0x00000008)]             HRESULT HitTestCircle(
            [in] long x,
            [in] long y,
            [in] single radius,
            [out, retval] VARIANT_BOOL* Intersects);
        [id(0x00000009)]             HRESULT NearestPoint(
            [in] long x,
            [in] long y,
            [in, out, defaultvalue(0)] single* Distance,
            [out, retval] single* Point);
        [id(0x0000000a)]             HRESULT Split(
            [in] single SplitAt,
            [out, retval] IInkStrokeDisp** NewStroke);
        [id(0x00000015)]             HRESULT GetPacketDescriptionPropertyMetrics(
            [in] BSTR propertyName,
            [out] long* Minimum,
            [out] long* Maximum,
            [out] TabletPropertyMetricUnit* Units,
            [out] single* Resolution);
        [id(0x00000016)]             HRESULT GetPoints(
            [in, defaultvalue(0)] long Index,
            [in, defaultvalue(-1)] long Count,
            [out, retval] VARIANT* Points);
        [id(0x00000017)]             HRESULT SetPoints(
            [in] VARIANT Points,
            [in, defaultvalue(0)] long Index,
            [in, defaultvalue(-1)] long Count,
            [out, retval] long* NumberOfPointsSet);
        [id(0x00000018)]             HRESULT GetPacketData(
            [in, defaultvalue(0)] long Index,
            [in, defaultvalue(-1)] long Count,
            [out, retval] VARIANT* PacketData);
        [id(0x00000019)]             HRESULT GetPacketValuesByProperty(
            [in] BSTR propertyName,
            [in, defaultvalue(0)] long Index,
            [in, defaultvalue(-1)] long Count,
            [out, retval] VARIANT* PacketValues);
        [id(0x0000001a)]             HRESULT SetPacketValuesByProperty(
            [in] BSTR bstrPropertyName,
            [in] VARIANT PacketValues,
            [in, defaultvalue(0)] long Index,
            [in, defaultvalue(-1)] long Count,
            [out, retval] long* NumberOfPacketsSet);
        [id(0x0000001b)]             HRESULT GetFlattenedBezierPoints(
            [in, defaultvalue(0)] long FittingError,
            [out, retval] VARIANT* FlattenedBezierPoints);
        [id(0x0000001d)]             HRESULT Transform(
            [in] IInkTransform* Transform,
            [in, defaultvalue(0)] VARIANT_BOOL ApplyOnPenWidth);
        [id(0x0000001c)]             HRESULT ScaleToRectangle(
            [in] IInkRectangle* Rectangle);
        [id(0x0000001e)]             HRESULT Move(
            [in] single HorizontalComponent,
            [in] single VerticalComponent);
        [id(0x0000001f)]             HRESULT Rotate(
            [in] single Degrees,
            [in, defaultvalue(0)] single x,
            [in, defaultvalue(0)] single y);
        [id(0x00000020)]             HRESULT Shear(
            [in] single HorizontalMultiplier,
            [in] single VerticalMultiplier);
        [id(0x00000021)]             HRESULT ScaleTransform(
            [in] single HorizontalMultiplier,
            [in] single VerticalMultiplier);
    };

    interface IInkRecognitionResult;

    [
        odl,
        uuid(F1F4C9D8-590A-4963-B3AE-1935671BB6F3),
        dual,
        oleautomation
    ]
    interface IInkStrokes : IDispatch {
        [propget]                   HRESULT Count(
            [out, retval] long *Count);
        [propget, restricted]       HRESULT _NewEnum(
            [out, retval] IUnknown **_NewEnum);
        [propget]                   HRESULT Ink(
            [out, retval] IInkDisp **Ink);
        [propget]                   HRESULT RecognitionResult(
            [out, retval] IInkRecognitionResult **RecognitionResult);
        HRESULT ToString(
            [out, retval] BSTR *ToString);
        HRESULT Item(
            [in] long Index,
            [out, retval] IInkStrokeDisp **Stroke);
        HRESULT Add(
            [in] IInkStrokeDisp *InkStroke);
        HRESULT AddStrokes(
            [in] IInkStrokes *InkStrokes);
        HRESULT Remove(
            [in] IInkStrokeDisp *InkStroke);
        HRESULT RemoveStrokes(
            [in] IInkStrokes *InkStrokes);
        HRESULT ModifyDrawingAttributes(
            [in] IInkDrawingAttributes *DrawAttrs);
        HRESULT GetBoundingBox(
            [in] InkBoundingBoxMode BoundingBoxMode,
            [out, retval] IInkRectangle **BoundingBox);
        HRESULT Transform(
            [in] IInkTransform *Transform,
            [in] VARIANT_BOOL ApplyOnPenWidth);
        HRESULT ScaleToRectangle(
            [in] IInkRectangle *Rectangle);
        HRESULT Move(
            [in] float HorizontalComponent,
            [in] float VerticalComponent);
        HRESULT Rotate(
            [in] float Degrees,
            [in] float x,
            [in] float y);
        HRESULT Shear(
            [in] float HorizontalMultiplier,
            [in] float VerticalMultiplier);
        HRESULT ScaleTransform(
            [in] float HorizontalMultiplier,
            [in] float VerticalMultiplier);
        HRESULT Clip(
            [in] IInkRectangle *Rectangle);
        HRESULT RemoveRecognitionResult();
    };

    [
        odl,
        uuid(7E23A88F-C30E-420f-9BDB-28902543F0C1),
        dual,
        oleautomation
    ]
    interface IInkCustomStrokes : IDispatch {
        [propget]               HRESULT Count(
            [out, retval] long *Count);
        [propget]               HRESULT _NewEnum(
            [out, retval] IUnknown **_NewEnum);
        HRESULT Item(
            [in] VARIANT Identifier,
            [out, retval] IInkStrokes **Strokes);
        HRESULT Add(
            [in] BSTR Name,
            [in] IInkStrokes *Strokes);
        HRESULT Remove(
            [in] VARIANT Identifier);
        HRESULT Clear();
    };

    interface IInkRecognitionAlternate;
    interface IInkRecognitionAlternates;

    [
        odl,
        uuid(3BC129A8-86CD-45ad-BDE8-E0D32D61C16D),
        dual,
        oleautomation
    ]
    interface IInkRecognitionResult : IDispatch {
        [propget]               HRESULT TopString(
            [out, retval] BSTR *TopString);
        [propget]               HRESULT TopAlternate(
            [out, retval] IInkRecognitionAlternate **TopAlternate);
        [propget]               HRESULT TopConfidence(
            [out, retval] InkRecognitionConfidence *TopConfidence);
        [propget]               HRESULT Strokes(
            [out, retval] IInkStrokes **Strokes);
        HRESULT AlternatesFromSelection(
            [in] long selectionStart,
            [in] long selectionLength,
            [in] long maximumAlternates,
            [out, retval] IInkRecognitionAlternates **AlternatesFromSelection);
        HRESULT ModifyTopAlternate(
            [in] IInkRecognitionAlternate *Alternate);
        HRESULT SetResultOnStrokes();
    };

    [
        odl,
        uuid(B7E660AD-77E4-429b-ADDA-873780D1FC4A),
        dual,
        oleautomation
    ]
    interface IInkRecognitionAlternate : IDispatch {
        [propget]               HRESULT String(
            [out, retval] BSTR *RecoString);
        [propget]               HRESULT Confidence(
            [out, retval] InkRecognitionConfidence *Confidence);
        [propget]               HRESULT Baseline(
            [out, retval] VARIANT *Baseline);
        [propget]               HRESULT Midline(
            [out, retval] VARIANT *Midline);
        [propget]               HRESULT Ascender(
            [out, retval] VARIANT *Ascender);
        [propget]               HRESULT Descender(
            [out, retval] VARIANT *Descender);
        [propget]               HRESULT LineNumber(
            [out, retval] long *LineNumber);
        [propget]               HRESULT Strokes(
            [out, retval] IInkStrokes **Strokes);
        [propget]               HRESULT LineAlternates(
            [out, retval] IInkRecognitionAlternates **LineAlternates);
        [propget]               HRESULT ConfidenceAlternates(
            [out, retval] IInkRecognitionAlternates **ConfidenceAlternates);
        HRESULT GetStrokesFromStrokeRanges(
            [in] IInkStrokes *Stroke,
            [out, retval] IInkStrokes **GetStrokesFromTextRange);
        HRESULT GetStrokesFromTextRange(
            [in, out] long *selectionStart,
            [in, out] long *selectionLength,
            [out, retval] IInkStrokes **GetStrokesFromTextRange);
        HRESULT GetTextRangeFromStrokes(
            [in] IInkStrokes *Strokes,
            [in, out] long *selectionStart,
            [in, out] long *selectionLength);
        HRESULT AlternatesWithConstantPropertyValues(
            [in] BSTR PropertyType,
            [out, retval] IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);
        HRESULT GetPropertyValue(
            [in] BSTR PropertyType,
            [out, retval] VARIANT *PropertyValue);
    };

    [
        odl,
        uuid(286A167F-9F19-4c61-9D53-4F07BE622B84),
        dual,
        oleautomation
    ]
    interface IInkRecognitionAlternates : IDispatch {
    [propget]                   HRESULT Count(
        [out, retval] long *Count);
    [propget, restricted]       HRESULT _NewEnum(
        [out, retval] IUnknown **_NewEnum);
    [propget]                   HRESULT Strokes(
        [out, retval] IInkStrokes **Strokes);
    HRESULT Item(
        [in] long Index,
        [out, retval] IInkRecognitionAlternate **InkRecoAlternate);
    };

    [
        odl,
        uuid(9D398FA0-C4E2-4fcd-9973-975CAAF47EA6),
        dual,
        oleautomation
    ]
    interface IInkDisp : IDispatch {
        [propget]               HRESULT Strokes(
            [out, retval] IInkStrokes **Strokes);
        [propget]               HRESULT ExtendedProperties(
            [out, retval] IInkExtendedProperties **Properties);
        [propget]               HRESULT Dirty(
            [out, retval] VARIANT_BOOL *Dirty);
        [propput]               HRESULT Dirty(
            [in] VARIANT_BOOL Dirty);
        [propget]               HRESULT CustomStrokes(
            [out, retval] IInkCustomStrokes **CustomStrokes);
        HRESULT GetBoundingBox(
            [in] InkBoundingBoxMode BoundingBoxMode,
            [out] IInkRectangle **Rectangle);
        HRESULT DeleteStrokes(
            [in, unique] IInkStrokes *Strokes);
        HRESULT DeleteStroke(
            [in] IInkStrokeDisp *Stroke);
        HRESULT ExtractStrokes(
            [in] IInkStrokes *Strokes,
            [in] InkExtractFlags ExtractFlags,
            [out, retval] IInkDisp **ExtractedInk);
        HRESULT ExtractWithRectangle(
            [in] IInkRectangle *Rectangle,
            [in] InkExtractFlags ExtractFlags,
            [out, retval] IInkDisp **ExtractedInk);
        HRESULT Clip(
            [in] IInkRectangle *Rectangle);
        HRESULT Clone(
            [out, retval] IInkDisp **NewInk);
        HRESULT HitTestCircle(
            [in] long X,
            [in] long Y,
            [in] float radius,
            [out, retval] IInkStrokes **Strokes);
        HRESULT HitTestWithRectangle(
            [in] IInkRectangle *SelectionRectangle,
            [in] float IntersectPercent,
            [out, retval] IInkStrokes **Strokes);
        HRESULT HitTestWithLasso(
            [in] VARIANT Points,
            [in] float IntersectPercent,
            [in, out, unique] VARIANT *LassoPoints,
            [out, retval] IInkStrokes **Strokes);
        HRESULT NearestPoint(
            [in] long X,
            [in] long Y,
            [in, out] float *PointOnStroke,
            [in, out] float *DistanceFromPacket,
            [out, retval] IInkStrokeDisp **Stroke);
        HRESULT CreateStrokes(
            [in] VARIANT StrokeIds,
            [out, retval] IInkStrokes **Strokes);
        HRESULT AddStrokesAtRectangle(
            [in] IInkStrokes *SourceStrokes,
            [in] IInkRectangle *TargetRectangle);
        HRESULT Save(
            [in] InkPersistenceFormat PersistenceFormat,
            [in] InkPersistenceCompressionMode CompressionMode,
            [out, retval] VARIANT *Data);
        HRESULT Load(
            [in] VARIANT Data);
        HRESULT CreateStroke(
            [in] VARIANT PacketData,
            [in] VARIANT PacketDescription,
            [out, retval] IInkStrokeDisp **Stroke);
        HRESULT ClipboardCopyWithRectangle(
            [in] IInkRectangle *Rectangle,
            [in] InkClipboardFormats ClipboardFormats,
            [in] InkClipboardModes ClipboardModes,
            [out, retval] IDataObject **DataObject);
        HRESULT ClipboardCopy(
            [in] IInkStrokes *strokes,
            [in] InkClipboardFormats ClipboardFormats,
            [in] InkClipboardModes ClipboardModes,
            [out, retval] IDataObject **DataObject);
        HRESULT CanPaste(
            [in] IDataObject *DataObject,
            [out, retval] VARIANT_BOOL *CanPaste);
        HRESULT ClipboardPaste(
            [in] long x,
            [in] long y,
            [in, unique] IDataObject *DataObject,
            [out, retval] IInkStrokes **Strokes);
    };

    [
        odl,
        uuid(E6257A9C-B511-4F4C-A8B0-A7DBC9506B83),
        dual,
        oleautomation
    ]
    interface IInkRenderer : IDispatch {
        HRESULT GetViewTransform([in] IInkTransform* ViewTransform);
        HRESULT SetViewTransform([in] IInkTransform* ViewTransform);
        HRESULT GetObjectTransform([in] IInkTransform* ObjectTransform);
        HRESULT SetObjectTransform([in] IInkTransform* ObjectTransform);
        HRESULT Draw(
            [in] long hDC,
            [in] IInkStrokes* Strokes);
        HRESULT DrawStroke(
            [in] long hDC,
            [in] IInkStrokeDisp* Stroke,
            [in, defaultvalue(0)]
            IInkDrawingAttributes* DrawingAttributes);
        HRESULT PixelToInkSpace(
            [in] long hDC,
            [in, out] long* x,
            [in, out] long* y);
        HRESULT InkSpaceToPixel(
            [in] long hdcDisplay,
            [in, out] long* x,
            [in, out] long* y);
        HRESULT PixelToInkSpaceFromPoints(
            [in] long hDC,
            [in, out] VARIANT* Points);
        HRESULT InkSpaceToPixelFromPoints(
            [in] long hDC,
            [in, out] VARIANT* Points);
        HRESULT Measure(
            [in] IInkStrokes* Strokes,
            [out, retval] IInkRectangle** Rectangle);
        HRESULT MeasureStroke(
            [in] IInkStrokeDisp* Stroke,
            [in, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes,
            [out, retval] IInkRectangle** Rectangle);
        HRESULT Move(
            [in] single HorizontalComponent,
            [in] single VerticalComponent);
        HRESULT Rotate(
            [in] single Degrees,
            [in, defaultvalue(0)] single x,
            [in, defaultvalue(0)] single y);
        HRESULT ScaleTransform(
            [in] single HorizontalMultiplier,
            [in] single VerticalMultiplier,
            [in, defaultvalue(-1)] VARIANT_BOOL ApplyOnPenWidth);
    };

    typedef enum {
        ICM_InkOnly,
        ICM_GestureOnly,
        ICM_InkAndGesture
    } InkCollectionMode;

    typedef enum {
        IMP_Default,
        IMP_Arrow,
        IMP_Crosshair,
        IMP_Ibeam,
        IMP_SizeNESW,
        IMP_SizeNS,
        IMP_SizeNWSE,
        IMP_SizeWE,
        IMP_UpArrow,
        IMP_Hourglass,
        IMP_NoDrop,
        IMP_ArrowHourglass,
        IMP_ArrowQuestion,
        IMP_SizeAll,
        IMP_Hand,
        IMP_Custom = 99
    } InkMousePointer;

    typedef enum {
        THWC_Integrated = 1,
        THWC_CursorMustTouch = 2,
        THWC_HardProximity = 4,
        THWC_CursorsHavePhysicalIds = 8
    } TabletHardwareCapabilities;

    [
        odl,
        uuid(2DE25EAA-6EF8-42D5-AEE9-185BC81B912D),
        dual,
        oleautomation
    ]
    interface IInkTablet : IDispatch {
        [propget] HRESULT Name([out, retval] BSTR* Name);
        [propget] HRESULT PlugAndPlayId([out, retval] BSTR* Id);
        [propget] HRESULT MaximumInputRectangle([out, retval] IInkRectangle** Rectangle);
        [propget] HRESULT HardwareCapabilities(
            [out, retval] TabletHardwareCapabilities* Capabilities);
        HRESULT IsPacketPropertySupported(
            [in] BSTR packetPropertyName,
            [out, retval] VARIANT_BOOL* Supported);
        HRESULT GetPropertyMetrics(
            [in] BSTR propertyName,
            [out] long* Minimum,
            [out] long* Maximum,
            [out] TabletPropertyMetricUnit* Units,
            [out] single* Resolution);
    };

    typedef enum {
        ICBS_Unavailable,
        ICBS_Up,
        ICBS_Down
    } InkCursorButtonState;

    [
        odl,
        uuid(85EF9417-1D59-49B2-A13C-702C85430894),
        dual,
        oleautomation
    ]
    interface IInkCursorButton : IDispatch {
        [propget] HRESULT Name([out, retval] BSTR* Name);
        [propget] HRESULT Id([out, retval] BSTR* Id);
        [propget] HRESULT State([out, retval] InkCursorButtonState* CurrentState);
    };

    [
        odl,
        uuid(3671CC40-B624-4671-9FA0-DB119D952D54),
        dual,
        oleautomation
    ]
    interface IInkCursorButtons : IDispatch {
        [propget] HRESULT Count([out, retval] long* Count);
        [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
        HRESULT Item(
            [in] VARIANT Identifier,
            [out, retval] IInkCursorButton** Button);
    };

    [
        odl,
        uuid(AD30C630-40C5-4350-8405-9C71012FC558),
        dual,
        oleautomation
    ]
    interface IInkCursor : IDispatch {
        [id(0x00000000), propget]    HRESULT Name([out, retval] BSTR* Name);
        [id(0x00000001), propget]    HRESULT Id([out, retval] long* Id);
        [id(0x00000004), propget]    HRESULT Inverted(
            [out, retval] VARIANT_BOOL* Status);
        [id(0x00000002), propget]    HRESULT DrawingAttributes(
            [out, retval] IInkDrawingAttributes** Attributes);
        [id(0x00000002), propputref] HRESULT DrawingAttributes(
            [in] IInkDrawingAttributes* Attributes);
        [id(0x00000005), propget]    HRESULT Tablet(
            [out, retval] IInkTablet** Tablet);
        [id(0x00000003), propget]    HRESULT Buttons(
            [out, retval] IInkCursorButtons** Buttons);
    };

    [
        odl,
        uuid(A248C1AC-C698-4E06-9E5C-D57F77C7E647),
        dual,
        oleautomation
    ]
    interface IInkCursors : IDispatch {
        [propget] HRESULT Count([out, retval] long* Count);
        [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
        HRESULT Item(
            [in] long Index,
            [out, retval] IInkCursor** Cursor);
    };

    typedef enum {
        IAG_AllGestures = 0,
        IAG_NoGesture = 61440,
        IAG_Scratchout = 61441,
        IAG_Triangle = 61442,
        IAG_Square = 61443,
        IAG_Star = 61444,
        IAG_Check = 61445,
        IAG_Curlicue = 61456,
        IAG_DoubleCurlicue = 61457,
        IAG_Circle = 61472,
        IAG_DoubleCircle = 61473,
        IAG_SemiCircleLeft = 61480,
        IAG_SemiCircleRight = 61481,
        IAG_ChevronUp = 61488,
        IAG_ChevronDown = 61489,
        IAG_ChevronLeft = 61490,
        IAG_ChevronRight = 61491,
        IAG_ArrowUp = 61496,
        IAG_ArrowDown = 61497,
        IAG_ArrowLeft = 61498,
        IAG_ArrowRight = 61499,
        IAG_Up = 61528,
        IAG_Down = 61529,
        IAG_Left = 61530,
        IAG_Right = 61531,
        IAG_UpDown = 61536,
        IAG_DownUp = 61537,
        IAG_LeftRight = 61538,
        IAG_RightLeft = 61539,
        IAG_UpLeftLong = 61540,
        IAG_UpRightLong = 61541,
        IAG_DownLeftLong = 61542,
        IAG_DownRightLong = 61543,
        IAG_UpLeft = 61544,
        IAG_UpRight = 61545,
        IAG_DownLeft = 61546,
        IAG_DownRight = 61547,
        IAG_LeftUp = 61548,
        IAG_LeftDown = 61549,
        IAG_RightUp = 61550,
        IAG_RightDown = 61551,
        IAG_Exclamation = 61604,
        IAG_Tap = 61680,
        IAG_DoubleTap = 61681
    } InkApplicationGesture;

    typedef enum {
        ICEI_DefaultEvents = -1,
        ICEI_CursorDown = 0,
        ICEI_Stroke,
        ICEI_NewPackets,
        ICEI_NewInAirPackets,
        ICEI_CursorButtonDown,
        ICEI_CursorButtonUp,
        ICEI_CursorInRange,
        ICEI_CursorOutOfRange,
        ICEI_SystemGesture,
        ICEI_TabletAdded,
        ICEI_TabletRemoved,
        ICEI_MouseDown,
        ICEI_MouseMove,
        ICEI_MouseUp,
        ICEI_MouseWheel,
        ICEI_DblClick,
        ICEI_AllEvents
    } InkCollectorEventInterest;

    [
        odl,
        uuid(F0F060B5-8B1F-4A7C-89EC-880692588A4F),
        dual,
        oleautomation
    ]
    interface IInkCollector : IDispatch {
        [id(0x00000002), propget]    HRESULT hWnd(
            [out, retval] long* CurrentWindow);
        [id(0x00000002), propput]    HRESULT hWnd([in] long CurrentWindow);
        [id(0x00000001), propget]    HRESULT Enabled(
            [out, retval] VARIANT_BOOL* Collecting);
        [id(0x00000001), propput]    HRESULT Enabled(
            [in] VARIANT_BOOL Collecting);
        [id(0x00000005), propget]    HRESULT DefaultDrawingAttributes(
            [out, retval] IInkDrawingAttributes** CurrentAttributes);
        [id(0x00000005), propputref] HRESULT DefaultDrawingAttributes(
            [in] IInkDrawingAttributes* CurrentAttributes);
        [id(0x00000006), propget]    HRESULT Renderer(
            [out, retval] IInkRenderer** CurrentInkRenderer);
        [id(0x00000006), propputref] HRESULT Renderer(
            [in] IInkRenderer* CurrentInkRenderer);
        [id(0x00000007), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);
        [id(0x00000007), propputref] HRESULT Ink([in] IInkDisp* Ink);
        [id(0x00000008), propget]    HRESULT AutoRedraw(
            [out, retval] VARIANT_BOOL* AutoRedraw);
        [id(0x00000008), propput]    HRESULT AutoRedraw(
            [in] VARIANT_BOOL AutoRedraw);
        [id(0x00000009), propget]    HRESULT CollectingInk(
            [out, retval] VARIANT_BOOL* Collecting);
        [id(0x0000001c), propget]    HRESULT CollectionMode(
            [out, retval] InkCollectionMode* Mode);
        [id(0x0000001c), propput]    HRESULT CollectionMode(
            [in] InkCollectionMode Mode);
        [id(0x0000001f), propget]    HRESULT DynamicRendering(
            [out, retval] VARIANT_BOOL* Enabled);
        [id(0x0000001f), propput]    HRESULT DynamicRendering(
            [in] VARIANT_BOOL Enabled);
        [id(0x00000020), propget]    HRESULT DesiredPacketDescription(
            [out, retval] VARIANT* PacketGuids);
        [id(0x00000020), propput]    HRESULT DesiredPacketDescription(
            [in] VARIANT PacketGuids);
        [id(0x00000023), propget]    HRESULT MouseIcon(
            [out, retval] IPictureDisp** MouseIcon);
        [id(0x00000023), propput]    HRESULT MouseIcon(
            [in] IPictureDisp* MouseIcon);
        [id(0x00000023), propputref] HRESULT MouseIcon(
            [in] IPictureDisp* MouseIcon);
        [id(0x00000024), propget]    HRESULT MousePointer(
            [out, retval] InkMousePointer* MousePointer);
        [id(0x00000024), propput]    HRESULT MousePointer(
            [in] InkMousePointer MousePointer);
        [id(0x00000014), propget]    HRESULT Cursors(
            [out, retval] IInkCursors** Cursors);
        [id(0x00000015), propget]    HRESULT MarginX(
            [out, retval] long* MarginX);
        [id(0x00000015), propput]    HRESULT MarginX([in] long MarginX);
        [id(0x00000016), propget]    HRESULT MarginY(
            [out, retval] long* MarginY);
        [id(0x00000016), propput]    HRESULT MarginY([in] long MarginY);
        [id(0x00000019), propget]    HRESULT Tablet(
            [out, retval] IInkTablet** SingleTablet);
        [id(0x00000026), propget]    HRESULT SupportHighContrastInk(
            [out, retval] VARIANT_BOOL* Support);
        [id(0x00000026), propput]    HRESULT SupportHighContrastInk(
            [in] VARIANT_BOOL Support);
        [id(0x0000001d)]             HRESULT SetGestureStatus(
            [in] InkApplicationGesture Gesture,
            [in] VARIANT_BOOL Listen);
        [id(0x0000001e)]             HRESULT GetGestureStatus(
            [in] InkApplicationGesture Gesture,
            [out, retval] VARIANT_BOOL* Listening);
        [id(0x00000018)]             HRESULT GetWindowInputRectangle(
            [in, out] IInkRectangle** WindowInputRectangle);
        [id(0x00000017)]             HRESULT SetWindowInputRectangle(
            [in] IInkRectangle* WindowInputRectangle);
        [id(0x0000001a)]             HRESULT SetAllTabletsMode(
            [in, defaultvalue(-1)] VARIANT_BOOL UseMouseForInput);
        [id(0x0000001b)]             HRESULT SetSingleTabletIntegratedMode(
            [in] IInkTablet* Tablet);
        [id(0x0000000b)]             HRESULT GetEventInterest(
            [in] InkCollectorEventInterest EventId,
            [out, retval] VARIANT_BOOL* Listen);
        [id(0x0000000a)]             HRESULT SetEventInterest(
            [in] InkCollectorEventInterest EventId,
            [in] VARIANT_BOOL Listen);
    };
};
