/* 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, optional, defaultvalue(0)] single x,
            [in, optional, 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, optional, 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, optional, 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, optional, defaultvalue(0)] long Index,
            [in, optional, defaultvalue(-1)] long Count,
            [out, retval] VARIANT* Points);
        [id(0x00000017)]             HRESULT SetPoints(
            [in] VARIANT Points,
            [in, optional, defaultvalue(0)] long Index,
            [in, optional, defaultvalue(-1)] long Count,
            [out, retval] long* NumberOfPointsSet);
        [id(0x00000018)]             HRESULT GetPacketData(
            [in, optional, defaultvalue(0)] long Index,
            [in, optional, defaultvalue(-1)] long Count,
            [out, retval] VARIANT* PacketData);
        [id(0x00000019)]             HRESULT GetPacketValuesByProperty(
            [in] BSTR propertyName,
            [in, optional, defaultvalue(0)] long Index,
            [in, optional, defaultvalue(-1)] long Count,
            [out, retval] VARIANT* PacketValues);
        [id(0x0000001a)]             HRESULT SetPacketValuesByProperty(
            [in] BSTR bstrPropertyName,
            [in] VARIANT PacketValues,
            [in, optional, defaultvalue(0)] long Index,
            [in, optional, defaultvalue(-1)] long Count,
            [out, retval] long* NumberOfPacketsSet);
        [id(0x0000001b)]             HRESULT GetFlattenedBezierPoints(
            [in, optional, defaultvalue(0)] long FittingError,
            [out, retval] VARIANT* FlattenedBezierPoints);
        [id(0x0000001d)]             HRESULT Transform(
            [in] IInkTransform* Transform,
            [in, optional, 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, optional, defaultvalue(0)] single x,
            [in, optional, 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, optional, 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, optional, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes,
            [out, retval] IInkRectangle** Rectangle);
        HRESULT Move(
            [in] single HorizontalComponent,
            [in] single VerticalComponent);
        HRESULT Rotate(
            [in] single Degrees,
            [in, optional, defaultvalue(0)] single x,
            [in, optional, defaultvalue(0)] single y);
        HRESULT ScaleTransform(
            [in] single HorizontalMultiplier,
            [in] single VerticalMultiplier,
            [in, optional, 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, optional, 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);
    };
};
