//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0008
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct Rect Rect;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Input
        {
            typedef enum PointerDeviceType PointerDeviceType;

            typedef struct PointerDeviceUsage PointerDeviceUsage;

            typedef struct MouseDelta MouseDelta;

            interface IMouseCapabilities;

            interface IKeyboardCapabilities;

            interface ITouchCapabilities;

            interface IPointerDeviceStatics;

            interface IPointerDevice;

            interface IMouseEventArgs;

            interface IMouseDevice;

            interface IMouseDeviceStatics;

            runtimeclass PointerDevice;

            runtimeclass MouseDevice;

            runtimeclass MouseEventArgs;

            runtimeclass MouseCapabilities;

            runtimeclass KeyboardCapabilities;

            runtimeclass TouchCapabilities;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Input
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Input.PointerDevice*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Input.PointerDeviceUsage>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Input.PointerDevice*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Input.PointerDeviceUsage>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Input.PointerDevice*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Input.PointerDeviceUsage>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Input.MouseDevice*, Windows.Devices.Input.MouseEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Input
        {
            [version(0x06020000)]
            enum PointerDeviceType
            {
                Touch = 0,
                Pen   = 1,
                Mouse = 2
            };

            [version(0x06020000)]
            struct PointerDeviceUsage
            {
                UINT32 UsagePage;
                UINT32 Usage;
                INT32 MinLogical;
                INT32 MaxLogical;
                INT32 MinPhysical;
                INT32 MaxPhysical;
                UINT32 Unit;
                FLOAT PhysicalMultiplier;
            };

            [version(0x06020000)]
            struct MouseDelta
            {
                INT32 X;
                INT32 Y;
            };

            [uuid(BCA5E023-7DD9-4B6B-9A92-55D43CB38F73)]
            [exclusiveto(Windows.Devices.Input.MouseCapabilities)]
            [version(0x06020000)]
            interface IMouseCapabilities : IInspectable
            {
                [propget] HRESULT MousePresent([out] [retval] INT32* value);
                [propget] HRESULT VerticalWheelPresent([out] [retval] INT32* value);
                [propget] HRESULT HorizontalWheelPresent([out] [retval] INT32* value);
                [propget] HRESULT SwapButtons([out] [retval] INT32* value);
                [propget] HRESULT NumberOfButtons([out] [retval] UINT32* value);
            }

            [uuid(3A3F9B56-6798-4BBC-833E-0F34B17C65FF)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Input.KeyboardCapabilities)]
            interface IKeyboardCapabilities : IInspectable
            {
                [propget] HRESULT KeyboardPresent([out] [retval] INT32* value);
            }

            [uuid(20DD55F9-13F1-46C8-9285-2C05FA3EDA6F)]
            [exclusiveto(Windows.Devices.Input.TouchCapabilities)]
            [version(0x06020000)]
            interface ITouchCapabilities : IInspectable
            {
                [propget] HRESULT TouchPresent([out] [retval] INT32* value);
                [propget] HRESULT Contacts([out] [retval] UINT32* value);
            }

            [uuid(D8B89AA1-D1C6-416E-BD8D-5790914DC563)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Input.PointerDevice)]
            interface IPointerDeviceStatics : IInspectable
            {
                HRESULT GetPointerDevice([in] UINT32 pointerId, [out] [retval] Windows.Devices.Input.PointerDevice** pointerDevice);
                HRESULT GetPointerDevices([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Input.PointerDevice*>** pointerDevices);
            }

            [uuid(93C9BAFC-EBCB-467E-82C6-276FEAE36B5A)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Input.PointerDevice)]
            interface IPointerDevice : IInspectable
            {
                [propget] HRESULT PointerDeviceType([out] [retval] Windows.Devices.Input.PointerDeviceType* value);
                [propget] HRESULT IsIntegrated([out] [retval] boolean* value);
                [propget] HRESULT MaxContacts([out] [retval] UINT32* value);
                [propget] HRESULT PhysicalDeviceRect([out] [retval] Windows.Foundation.Rect* value);
                [propget] HRESULT ScreenRect([out] [retval] Windows.Foundation.Rect* value);
                [propget] HRESULT SupportedUsages([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Input.PointerDeviceUsage>** value);
            }

            [uuid(F625AA5D-2354-4CC7-9230-96941C969FDE)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Input.MouseEventArgs)]
            interface IMouseEventArgs : IInspectable
            {
                [propget] HRESULT MouseDelta([out] [retval] Windows.Devices.Input.MouseDelta* value);
            }

            [uuid(88EDF458-F2C8-49F4-BE1F-C256B388BC11)]
            [version(0x06020000)]
            [exclusiveto(Windows.Devices.Input.MouseDevice)]
            interface IMouseDevice : IInspectable
            {
                [eventadd] HRESULT MouseMoved([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Input.MouseDevice*, Windows.Devices.Input.MouseEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT MouseMoved([in] EventRegistrationToken cookie);
            }

            [uuid(484A9045-6D70-49DB-8E68-46FFBD17D38D)]
            [exclusiveto(Windows.Devices.Input.MouseDevice)]
            [version(0x06020000)]
            interface IMouseDeviceStatics : IInspectable
            {
                HRESULT GetForCurrentView([out] [retval] Windows.Devices.Input.MouseDevice** mouseDevice);
            }

            [version(0x06020000)]
            [marshaling_behavior(none)]
            [static(Windows.Devices.Input.IPointerDeviceStatics, 0x06020000)]
            runtimeclass PointerDevice
            {
                [default] interface Windows.Devices.Input.IPointerDevice;
            }

            [static(Windows.Devices.Input.IMouseDeviceStatics, 0x06020000)]
            [marshaling_behavior(standard)]
            [version(0x06020000)]
            runtimeclass MouseDevice
            {
                [default] interface Windows.Devices.Input.IMouseDevice;
            }

            [marshaling_behavior(standard)]
            [version(0x06020000)]
            runtimeclass MouseEventArgs
            {
                [default] interface Windows.Devices.Input.IMouseEventArgs;
            }

            [activatable(0x06020000)]
            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass MouseCapabilities
            {
                [default] interface Windows.Devices.Input.IMouseCapabilities;
            }

            [version(0x06020000)]
            [activatable(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass KeyboardCapabilities
            {
                [default] interface Windows.Devices.Input.IKeyboardCapabilities;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            [activatable(0x06020000)]
            runtimeclass TouchCapabilities
            {
                [default] interface Windows.Devices.Input.ITouchCapabilities;
            }
        }
    }
}
