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