/* 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;

    [
        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);
    };

    typedef enum {
        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 {
        IPT_Ball,
        IPT_Rectangle
    } InkPenTip;

    [
        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;

    typedef enum {
        IBBM_Default,
        IBBM_NoCurveFit,
        IBBM_CurveFit,
        IBBM_PointsOnly,
        IBBM_Union
    } InkBoundingBoxMode;

    [
        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);
    };

    [
        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);
    };
};
