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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct Rect Rect;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Input
        {
            typedef enum PointerDeviceType PointerDeviceType;

            typedef struct MouseDelta MouseDelta;

            typedef struct PointerDeviceUsage PointerDeviceUsage;

            interface IKeyboardCapabilities;

            interface IMouseCapabilities;

            interface IMouseDevice;

            interface IMouseDeviceStatics;

            interface IMouseEventArgs;

            interface IPointerDevice;

            interface IPointerDevice2;

            interface IPointerDeviceStatics;

            interface ITouchCapabilities;

            runtimeclass KeyboardCapabilities;

            runtimeclass MouseCapabilities;

            runtimeclass MouseDevice;

            runtimeclass MouseEventArgs;

            runtimeclass PointerDevice;

            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
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum PointerDeviceType
            {
                Touch = 0,
                Pen   = 1,
                Mouse = 2
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            struct MouseDelta
            {
                INT32 X;
                INT32 Y;
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            struct PointerDeviceUsage
            {
                UINT32 UsagePage;
                UINT32 Usage;
                INT32 MinLogical;
                INT32 MaxLogical;
                INT32 MinPhysical;
                INT32 MaxPhysical;
                UINT32 Unit;
                FLOAT PhysicalMultiplier;
            };

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

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Input.MouseCapabilities)]
            [uuid(BCA5E023-7DD9-4B6B-9A92-55D43CB38F73)]
            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);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Input.MouseDevice)]
            [uuid(88EDF458-F2C8-49F4-BE1F-C256B388BC11)]
            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);
            }

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

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

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Input.PointerDevice)]
            [uuid(93C9BAFC-EBCB-467E-82C6-276FEAE36B5A)]
            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);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Input.PointerDevice)]
            [uuid(F8A6D2A0-C484-489F-AE3E-30D2EE1FFD3E)]
            interface IPointerDevice2 : IInspectable
            {
                [propget] HRESULT MaxPointersWithZDistance([out] [retval] UINT32* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Input.PointerDevice)]
            [uuid(D8B89AA1-D1C6-416E-BD8D-5790914DC563)]
            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);
            }

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

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass KeyboardCapabilities
            {
                [default] interface Windows.Devices.Input.IKeyboardCapabilities;
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass MouseCapabilities
            {
                [default] interface Windows.Devices.Input.IMouseCapabilities;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(standard)]
            [static(Windows.Devices.Input.IMouseDeviceStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass MouseDevice
            {
                [default] interface Windows.Devices.Input.IMouseDevice;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(standard)]
            runtimeclass MouseEventArgs
            {
                [default] interface Windows.Devices.Input.IMouseEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(none)]
            [static(Windows.Devices.Input.IPointerDeviceStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass PointerDevice
            {
                [default] interface Windows.Devices.Input.IPointerDevice;
                [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Devices.Input.IPointerDevice2;
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass TouchCapabilities
            {
                [default] interface Windows.Devices.Input.ITouchCapabilities;
            }
        }
    }
}
