/*
 * Copyright (C) 2023 Mohamad Al-Jaf
 *
 * 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
 */

#ifdef __WIDL__
#pragma winrt ns_prefix
#endif

import "inspectable.idl";
import "asyncinfo.idl";
import "eventtoken.idl";
import "windowscontracts.idl";
import "windows.foundation.idl";
import "windows.foundation.numerics.idl";
/* import "windows.graphics.idl"; */
import "windows.graphics.directx.idl";
import "windows.graphics.effects.idl";
import "windows.system.idl";
import "windows.ui.idl";
import "windows.ui.core.idl";

namespace Windows.UI.Composition {
    typedef enum CompositionBackfaceVisibility CompositionBackfaceVisibility;
    typedef enum CompositionBatchTypes CompositionBatchTypes;
    typedef enum CompositionBitmapInterpolationMode CompositionBitmapInterpolationMode;
    typedef enum CompositionBorderMode CompositionBorderMode;
    typedef enum CompositionColorSpace CompositionColorSpace;
    typedef enum CompositionCompositeMode CompositionCompositeMode;
    typedef enum CompositionEffectFactoryLoadStatus CompositionEffectFactoryLoadStatus;
    typedef enum CompositionGetValueStatus CompositionGetValueStatus;
    typedef enum CompositionStretch CompositionStretch;

    interface IAnimationObject;
    interface IColorKeyFrameAnimation;
    interface ICompositionAnimation;
    interface ICompositionAnimation2;
    interface ICompositionAnimation3;
    interface ICompositionAnimation4;
    interface ICompositionAnimationBase;
    interface ICompositionAnimationFactory;
    interface ICompositionBatchCompletedEventArgs;
    interface ICompositionBrush;
    interface ICompositionBrushFactory;
    interface ICompositionClip;
    interface ICompositionClip2;
    interface ICompositionClipFactory;
    interface ICompositionColorBrush;
    interface ICompositionCommitBatch;
    interface ICompositionDrawingSurface;
    interface ICompositionDrawingSurface2;
    interface ICompositionDrawingSurfaceFactory;
    interface ICompositionEasingFunction;
    interface ICompositionEasingFunctionFactory;
    interface ICompositionEasingFunctionStatics;
    interface ICompositionEffectBrush;
    interface ICompositionEffectFactory;
    interface ICompositionGraphicsDevice;
    interface ICompositionGraphicsDevice2;
    interface ICompositionGraphicsDevice3;
    interface ICompositionGraphicsDevice4;
    interface ICompositionObject;
    interface ICompositionObject2;
    interface ICompositionObject3;
    interface ICompositionObject4;
    interface ICompositionObjectFactory;
    interface ICompositionObjectStatics;
    interface ICompositionPropertySet;
    interface ICompositionPropertySet2;
    interface ICompositionScopedBatch;
    interface ICompositionSurface;
    interface ICompositionSurfaceBrush;
    interface ICompositionSurfaceBrush2;
    interface ICompositionSurfaceBrush3;
    interface ICompositionTarget;
    interface ICompositionTargetFactory;
    interface ICompositor;
    interface ICompositor2;
    interface ICompositor3;
    interface ICompositor4;
    interface ICompositor5;
    interface ICompositor6;
    interface ICompositor7;
    interface ICompositorStatics;
    interface ICompositorWithBlurredWallpaperBackdropBrush;
    interface ICompositorWithProjectedShadow;
    interface ICompositorWithRadialGradient;
    interface ICompositorWithVisualSurface;
    interface IContainerVisual;
    interface IContainerVisualFactory;
    interface ICubicBezierEasingFunction;
    interface IExpressionAnimation;
    interface IInsetClip;
    interface ILinearEasingFunction;
    interface IQuaternionKeyFrameAnimation;
    interface IRenderingDeviceReplacedEventArgs;
    interface IScalarKeyFrameAnimation;
    interface ISpriteVisual;
    interface ISpriteVisual2;
    interface IVector2KeyFrameAnimation;
    interface IVector3KeyFrameAnimation;
    interface IVector4KeyFrameAnimation;
    interface IVisual;
    interface IVisual2;
    interface IVisual3;
    interface IVisual4;
    interface IVisualCollection;
    interface IVisualFactory;

    runtimeclass ColorKeyFrameAnimation;
    runtimeclass CompositionAnimation;
    runtimeclass CompositionBatchCompletedEventArgs;
    runtimeclass CompositionBrush;
    runtimeclass CompositionClip;
    runtimeclass CompositionColorBrush;
    runtimeclass CompositionCommitBatch;
    runtimeclass CompositionDrawingSurface;
    runtimeclass CompositionEasingFunction;
    runtimeclass CompositionEffectBrush;
    runtimeclass CompositionEffectFactory;
    runtimeclass CompositionGraphicsDevice;
    runtimeclass CompositionObject;
    runtimeclass CompositionPropertySet;
    runtimeclass CompositionScopedBatch;
    runtimeclass CompositionSurfaceBrush;
    runtimeclass CompositionTarget;
    runtimeclass Compositor;
    runtimeclass ContainerVisual;
    runtimeclass CubicBezierEasingFunction;
    runtimeclass ExpressionAnimation;
    runtimeclass InsetClip;
    runtimeclass LinearEasingFunction;
    runtimeclass KeyFrameAnimation;
    runtimeclass QuaternionKeyFrameAnimation;
    runtimeclass RenderingDeviceReplacedEventArgs;
    runtimeclass ScalarKeyFrameAnimation;
    runtimeclass SpriteVisual;
    runtimeclass Vector2KeyFrameAnimation;
    runtimeclass Vector3KeyFrameAnimation;
    runtimeclass Vector4KeyFrameAnimation;
    runtimeclass Visual;
    runtimeclass VisualCollection;

    declare {
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.UI.Composition.ICompositionSurface *>;
        interface Windows.Foundation.IAsyncOperation<Windows.UI.Composition.ICompositionSurface *>;
        interface Windows.Foundation.Collections.IIterable<Windows.UI.Composition.CompositionAnimation *>;
        interface Windows.Foundation.Collections.IIterable<Windows.UI.Composition.Visual *>;
        interface Windows.Foundation.Collections.IIterator<Windows.UI.Composition.CompositionAnimation *>;
        interface Windows.Foundation.Collections.IIterator<Windows.UI.Composition.Visual *>;
        interface Windows.Foundation.TypedEventHandler<IInspectable *, Windows.UI.Composition.CompositionBatchCompletedEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Composition.CompositionGraphicsDevice *, Windows.UI.Composition.RenderingDeviceReplacedEventArgs *>;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionBackfaceVisibility
    {
        Inherit = 0,
        Visible = 1,
        Hidden  = 2,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        flags
    ]
    enum CompositionBatchTypes
    {
        None              = 0x0,
        Animation         = 0x1,
        Effect            = 0x2,
        [contract(Windows.Foundation.UniversalApiContract, 7.0)]
        InfiniteAnimation = 0x4,
        [contract(Windows.Foundation.UniversalApiContract, 7.0)]
        AllAnimations     = 0x5,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionBitmapInterpolationMode
    {
        NearestNeighbor                = 0,
        Linear                         = 1,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagLinearMinLinearMipLinear    = 2,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagLinearMinLinearMipNearest   = 3,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagLinearMinNearestMipLinear   = 4,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagLinearMinNearestMipNearest  = 5,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagNearestMinLinearMipLinear   = 6,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagNearestMinLinearMipNearest  = 7,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagNearestMinNearestMipLinear  = 8,
        [contract(Windows.Foundation.UniversalApiContract, 8.0)]
        MagNearestMinNearestMipNearest = 9,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionBorderMode
    {
        Inherit = 0,
        Soft    = 1,
        Hard    = 2,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionColorSpace
    {
        Auto      = 0,
        Hsl       = 1,
        Rgb       = 2,
        [contract(Windows.Foundation.UniversalApiContract, 5.0)]
        HslLinear = 3,
        [contract(Windows.Foundation.UniversalApiContract, 5.0)]
        RgbLinear = 4,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionCompositeMode
    {
        Inherit           = 0,
        SourceOver        = 1,
        DestinationInvert = 2,
        [contract(Windows.Foundation.UniversalApiContract, 3.0)]
        MinBlend          = 3,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionEffectFactoryLoadStatus
    {
        Success          = 0,
        EffectTooComplex = 1,
        Pending          = 2,
        Other            = -1,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionGetValueStatus
    {
        Succeeded    = 0,
        TypeMismatch = 1,
        NotFound     = 2,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum CompositionStretch
    {
        None          = 0,
        Fill          = 1,
        Uniform       = 2,
        UniformToFill = 3,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.ColorKeyFrameAnimation),
        uuid(93adb5e9-8e05-4593-84a3-dca152781e56)
    ]
    interface IColorKeyFrameAnimation : IInspectable
    {
        [propget] HRESULT InterpolationColorSpace([out, retval] Windows.UI.Composition.CompositionColorSpace *value);
        [propput] HRESULT InterpolationColorSpace([in] Windows.UI.Composition.CompositionColorSpace value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrame([in] FLOAT key, [in] Windows.UI.Color value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrameWithEasingFunction(
            [in] FLOAT key, [in] Windows.UI.Color value,
            [in] Windows.UI.Composition.CompositionEasingFunction *function
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionAnimation),
        uuid(464c4c2c-1caa-4061-9b40-e13fde1503ca)
    ]
    interface ICompositionAnimation : IInspectable
    {
        HRESULT ClearAllParameters();
        HRESULT ClearParameter([in] HSTRING key);
        HRESULT SetColorParameter([in] HSTRING key, [in] Windows.UI.Color value);
        HRESULT SetMatrix3x2Parameter([in] HSTRING key, [in] Windows.Foundation.Numerics.Matrix3x2 value);
        HRESULT SetMatrix4x4Parameter([in] HSTRING key, [in] Windows.Foundation.Numerics.Matrix4x4 value);
        HRESULT SetQuaternionParameter([in] HSTRING key, [in] Windows.Foundation.Numerics.Quaternion value);
        HRESULT SetReferenceParameter([in] HSTRING key, [in] Windows.UI.Composition.CompositionObject *object);
        HRESULT SetScalarParameter([in] HSTRING key, [in] FLOAT value);
        HRESULT SetVector2Parameter([in] HSTRING key, [in] Windows.Foundation.Numerics.Vector2 value);
        HRESULT SetVector3Parameter([in] HSTRING key, [in] Windows.Foundation.Numerics.Vector3 value);
        HRESULT SetVector4Parameter([in] HSTRING key, [in] Windows.Foundation.Numerics.Vector4 value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 3.0),
        uuid(1c2c2999-e818-48d3-a6dd-d78c82f8ace9)
    ]
    interface ICompositionAnimationBase : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionAnimation),
        uuid(10f6c4fb-6e51-4c25-bbd3-586a9bec3ef4)
    ]
    interface ICompositionAnimationFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionObject),
        uuid(bcb4ad45-7609-4550-934f-16002a68fded)
    ]
    interface ICompositionObject : IInspectable
    {
        [propget] HRESULT Compositor([out, retval] Windows.UI.Composition.Compositor **value);
        [propget] HRESULT Dispatcher([out, retval] Windows.UI.Core.CoreDispatcher **value);
        [propget] HRESULT Properties([out, retval] Windows.UI.Composition.CompositionPropertySet **value);
        HRESULT StartAnimation([in] HSTRING name, [in] Windows.UI.Composition.CompositionAnimation *animation);
        HRESULT StopAnimation([in] HSTRING name);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionObject),
        uuid(51205c5e-558a-4f2a-8d39-37bfe1e20ddd)
    ]
    interface ICompositionObjectFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionBatchCompletedEventArgs),
        uuid(0d00dad0-9464-450a-a562-2e2698b0a812)
    ]
    interface ICompositionBatchCompletedEventArgs : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionBrush),
        uuid(ab0d7608-30c0-40e9-b568-b60a6bd1fb46)
    ]
    interface ICompositionBrush : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionBrush),
        uuid(da53fb4c-4650-47c4-ad76-765379607ed6)
    ]
    interface ICompositionBrushFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionClip),
        uuid(1ccd2a52-cfc7-4ace-9983-146bb8eb6a3c)
    ]
    interface ICompositionClip : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionClip),
        uuid(b9484caf-20c7-4aed-ac4a-9c78ba1302cf)
    ]
    interface ICompositionClipFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionColorBrush),
        uuid(2b264c5e-bf35-4831-8642-cf70c20fff2f)
    ]
    interface ICompositionColorBrush : IInspectable
    {
        [propget] HRESULT Color([out, retval] Windows.UI.Color *value);
        [propput] HRESULT Color([in] Windows.UI.Color value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionCommitBatch),
        uuid(0d00dad0-ca07-4400-8c8e-cb5db08559cc)
    ]
    interface ICompositionCommitBatch : IInspectable
    {
        [propget] HRESULT IsActive([out, retval] boolean *value);
        [propget] HRESULT IsEnded([out, retval] boolean *value);
        [eventadd] HRESULT Completed(
            [in] Windows.Foundation.TypedEventHandler<IInspectable *, Windows.UI.Composition.CompositionBatchCompletedEventArgs *> *handler,
            [out, retval] EventRegistrationToken *token
        );
        [eventremove] HRESULT Completed([in] EventRegistrationToken token);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionDrawingSurface),
        uuid(a166c300-fad0-4d11-9e67-e433162ff49e)
    ]
    interface ICompositionDrawingSurface : IInspectable
    {
        [propget] HRESULT AlphaMode([out, retval] Windows.Graphics.DirectX.DirectXAlphaMode *value);
        [propget] HRESULT PixelFormat([out, retval] Windows.Graphics.DirectX.DirectXPixelFormat *value);
        [propget] HRESULT Size([out, retval] Windows.Foundation.Size *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 4.0),
        exclusiveto(Windows.UI.Composition.CompositionDrawingSurface),
        uuid(9497b00a-312d-46b9-9db3-412fd79464c8)
    ]
    interface ICompositionDrawingSurfaceFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionEasingFunction),
        uuid(5145e356-bf79-4ea8-8cc2-6b5b472e6c9a)
    ]
    interface ICompositionEasingFunction : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionEasingFunction),
        uuid(60840774-3da0-4949-8200-7206c00190a0)
    ]
    interface ICompositionEasingFunctionFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionEffectBrush),
        uuid(bf7f795e-83cc-44bf-a447-3e3c071789ec)
    ]
    interface ICompositionEffectBrush : IInspectable
    {
        HRESULT GetSourceParameter([in] HSTRING name, [out, retval] Windows.UI.Composition.CompositionBrush **result);
        HRESULT SetSourceParameter([in] HSTRING name, [in] Windows.UI.Composition.CompositionBrush *source);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionEffectFactory),
        uuid(be5624af-ba7e-4510-9850-41c0b4ff74df)
    ]
    interface ICompositionEffectFactory : IInspectable
    {
        HRESULT CreateBrush([out, retval] Windows.UI.Composition.CompositionEffectBrush **result);
        [propget] HRESULT ExtendedError([out, retval] HRESULT *value);
        [propget] HRESULT LoadStatus([out, retval] Windows.UI.Composition.CompositionEffectFactoryLoadStatus *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionGraphicsDevice),
        uuid(fb22c6e1-80a2-4667-9936-dbeaf6eefe95)
    ]
    interface ICompositionGraphicsDevice : IInspectable
    {
        HRESULT CreateDrawingSurface(
            [in] Windows.Foundation.Size pixels, [in] Windows.Graphics.DirectX.DirectXPixelFormat format,
            [in] Windows.Graphics.DirectX.DirectXAlphaMode mode, [out, retval] Windows.UI.Composition.CompositionDrawingSurface **result
        );
        [eventadd] HRESULT RenderingDeviceReplaced(
            [in] Windows.Foundation.TypedEventHandler<Windows.UI.Composition.CompositionGraphicsDevice *, Windows.UI.Composition.RenderingDeviceReplacedEventArgs *> *handler,
            [out, retval] EventRegistrationToken *token
        );
        [eventremove] HRESULT RenderingDeviceReplaced([in] EventRegistrationToken token);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionPropertySet),
        uuid(c9d6d202-5f67-4453-9117-9eadd430d3c2)
    ]
    interface ICompositionPropertySet : IInspectable
    {
        HRESULT InsertColor([in] HSTRING name, [in] Windows.UI.Color value);
        HRESULT InsertMatrix3x2([in] HSTRING name, [in] Windows.Foundation.Numerics.Matrix3x2 value);
        HRESULT InsertMatrix4x4([in] HSTRING name, [in] Windows.Foundation.Numerics.Matrix4x4 value);
        HRESULT InsertQuaternion([in] HSTRING name, [in] Windows.Foundation.Numerics.Quaternion value);
        HRESULT InsertScalar([in] HSTRING name, [in] FLOAT value);
        HRESULT InsertVector2([in] HSTRING name, [in] Windows.Foundation.Numerics.Vector2 value);
        HRESULT InsertVector3([in] HSTRING name, [in] Windows.Foundation.Numerics.Vector3 value);
        HRESULT InsertVector4([in] HSTRING name, [in] Windows.Foundation.Numerics.Vector4 value);
        HRESULT TryGetColor([in] HSTRING name, [out] Windows.UI.Color *value, [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result);
        HRESULT TryGetMatrix3x2(
            [in] HSTRING name, [out] Windows.Foundation.Numerics.Matrix3x2 *value,
            [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result
        );
        HRESULT TryGetMatrix4x4(
            [in] HSTRING name, [out] Windows.Foundation.Numerics.Matrix4x4 *value,
            [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result
        );
        HRESULT TryGetQuaternion(
            [in] HSTRING name, [out] Windows.Foundation.Numerics.Quaternion *value,
            [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result
        );
        HRESULT TryGetScalar([in] HSTRING name, [out] FLOAT *value, [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result);
        HRESULT TryGetVector2(
            [in] HSTRING name, [out] Windows.Foundation.Numerics.Vector2 *value,
            [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result
        );
        HRESULT TryGetVector3(
            [in] HSTRING name, [out] Windows.Foundation.Numerics.Vector3 *value,
            [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result
        );
        HRESULT TryGetVector4(
            [in] HSTRING name, [out] Windows.Foundation.Numerics.Vector4 *value,
            [out, retval] Windows.UI.Composition.CompositionGetValueStatus *result
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionScopedBatch),
        uuid(0d00dad0-fb07-46fd-8c72-6280d1a3d1dd)
    ]
    interface ICompositionScopedBatch : IInspectable
    {
        [propget] HRESULT IsActive([out, retval] boolean *value);
        [propget] HRESULT IsEnded([out, retval] boolean *value);
        HRESULT End();
        HRESULT Resume();
        HRESULT Suspend();
        [eventadd] HRESULT Completed(
            [in] Windows.Foundation.TypedEventHandler<IInspectable *, Windows.UI.Composition.CompositionBatchCompletedEventArgs *> *handler,
            [out, retval] EventRegistrationToken *token
        );
        [eventremove] HRESULT Completed([in] EventRegistrationToken token);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        uuid(1527540d-42c7-47a6-a408-668f79a90dfb)
    ]
    interface ICompositionSurface : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionSurfaceBrush),
        uuid(ad016d79-1e4c-4c0d-9c29-83338c87c162)
    ]
    interface ICompositionSurfaceBrush : IInspectable
    {
        [propget] HRESULT BitmapInterpolationMode([out, retval] Windows.UI.Composition.CompositionBitmapInterpolationMode *value);
        [propput] HRESULT BitmapInterpolationMode([in] Windows.UI.Composition.CompositionBitmapInterpolationMode value);
        [propget] HRESULT HorizontalAlignmentRatio([out, retval] FLOAT *value);
        [propput] HRESULT HorizontalAlignmentRatio([in] FLOAT value);
        [propget] HRESULT Stretch([out, retval] Windows.UI.Composition.CompositionStretch *value);
        [propput] HRESULT Stretch([in] Windows.UI.Composition.CompositionStretch value);
        [propget] HRESULT Surface([out, retval] Windows.UI.Composition.ICompositionSurface **value);
        [propput] HRESULT Surface([in] Windows.UI.Composition.ICompositionSurface *value);
        [propget] HRESULT VerticalAlignmentRatio([out, retval] FLOAT *value);
        [propput] HRESULT VerticalAlignmentRatio([in] FLOAT value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CompositionTarget),
        uuid(a1bea8ba-d726-4663-8129-6b5e7927ffa6)
    ]
    interface ICompositionTarget : IInspectable
    {
        [propget] HRESULT Root([out, retval] Windows.UI.Composition.Visual **value);
        [propput] HRESULT Root([in] Windows.UI.Composition.Visual *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 5.0),
        exclusiveto(Windows.UI.Composition.CompositionTarget),
        uuid(93cd9d2b-8516-4b14-a8ce-f49e2119ec42)
    ]
    interface ICompositionTargetFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.Compositor),
        uuid(b403ca50-7f8c-4e83-985f-cc45060036d8)
    ]
    interface ICompositor : IInspectable
    {
        HRESULT CreateColorKeyFrameAnimation([out, retval] Windows.UI.Composition.ColorKeyFrameAnimation **result);
        [overload("CreateColorBrush")] HRESULT CreateColorBrush([out, retval] Windows.UI.Composition.CompositionColorBrush **result);
        [overload("CreateColorBrush")] HRESULT CreateColorBrushWithColor(
            [in] Windows.UI.Color color, [out, retval] Windows.UI.Composition.CompositionColorBrush **result
        );
        HRESULT CreateContainerVisual([out, retval] Windows.UI.Composition.ContainerVisual **result);
        HRESULT CreateCubicBezierEasingFunction(
            [in] Windows.Foundation.Numerics.Vector2 point1, [in] Windows.Foundation.Numerics.Vector2 point2,
            [out, retval] Windows.UI.Composition.CubicBezierEasingFunction **result
        );
        [overload("CreateEffectFactory")] HRESULT CreateEffectFactory(
            [in] Windows.Graphics.Effects.IGraphicsEffect *effect, [out, retval] Windows.UI.Composition.CompositionEffectFactory **result
        );
        [overload("CreateEffectFactory")] HRESULT CreateEffectFactoryWithProperties(
            [in] Windows.Graphics.Effects.IGraphicsEffect *effect, [in] Windows.Foundation.Collections.IIterable<HSTRING> *animatable,
            [out, retval] Windows.UI.Composition.CompositionEffectFactory **result
        );
        [overload("CreateExpressionAnimation")] HRESULT CreateExpressionAnimation([out, retval] Windows.UI.Composition.ExpressionAnimation **result);
        [overload("CreateExpressionAnimation")] HRESULT CreateExpressionAnimationWithExpression(
            [in] HSTRING expression, [out, retval] Windows.UI.Composition.ExpressionAnimation **result
        );
        [overload("CreateInsetClip")] HRESULT CreateInsetClip([out, retval] Windows.UI.Composition.InsetClip **result);
        [overload("CreateInsetClip")] HRESULT CreateInsetClipWithInsets(
            [in] FLOAT left, [in] FLOAT top, [in] FLOAT right, [in] FLOAT bottom,
            [out, retval] Windows.UI.Composition.InsetClip **result
        );
        HRESULT CreateLinearEasingFunction([out, retval] Windows.UI.Composition.LinearEasingFunction **result);
        HRESULT CreatePropertySet([out, retval] Windows.UI.Composition.CompositionPropertySet **result);
        HRESULT CreateQuaternionKeyFrameAnimation([out, retval] Windows.UI.Composition.QuaternionKeyFrameAnimation **result);
        HRESULT CreateScalarKeyFrameAnimation([out, retval] Windows.UI.Composition.ScalarKeyFrameAnimation **result);
        HRESULT CreateScopedBatch(
            [in] Windows.UI.Composition.CompositionBatchTypes type, [out, retval] Windows.UI.Composition.CompositionScopedBatch **result
        );
        HRESULT CreateSpriteVisual([out, retval] Windows.UI.Composition.SpriteVisual **result);
        [overload("CreateSurfaceBrush")] HRESULT CreateSurfaceBrush([out, retval] Windows.UI.Composition.CompositionSurfaceBrush **result);
        [overload("CreateSurfaceBrush")] HRESULT CreateSurfaceBrushWithSurface(
            [in] Windows.UI.Composition.ICompositionSurface *surface, [out, retval] Windows.UI.Composition.CompositionSurfaceBrush **result
        );
        HRESULT CreateTargetForCurrentView([out, retval] Windows.UI.Composition.CompositionTarget **result);
        HRESULT CreateVector2KeyFrameAnimation([out, retval] Windows.UI.Composition.Vector2KeyFrameAnimation **result);
        HRESULT CreateVector3KeyFrameAnimation([out, retval] Windows.UI.Composition.Vector3KeyFrameAnimation **result);
        HRESULT CreateVector4KeyFrameAnimation([out, retval] Windows.UI.Composition.Vector4KeyFrameAnimation **result);
        HRESULT GetCommitBatch(
            [in] Windows.UI.Composition.CompositionBatchTypes type, [out, retval] Windows.UI.Composition.CompositionCommitBatch **result
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.ContainerVisual),
        uuid(02f6bc74-ed20-4773-afe6-d49b4a93db32)
    ]
    interface IContainerVisual : IInspectable
    {
        [propget] HRESULT Children([out, retval] Windows.UI.Composition.VisualCollection **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.ContainerVisual),
        uuid(0363a65b-c7da-4d9a-95f4-69b5c8df670b)
    ]
    interface IContainerVisualFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.CubicBezierEasingFunction),
        uuid(32350666-c1e8-44f9-96b8-c98acf0ae698)
    ]
    interface ICubicBezierEasingFunction : IInspectable
    {
        [propget] HRESULT ControlPoint1([out, retval] Windows.Foundation.Numerics.Vector2 *value);
        [propget] HRESULT ControlPoint2([out, retval] Windows.Foundation.Numerics.Vector2 *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.ExpressionAnimation),
        uuid(6acc5431-7d3d-4bf3-abb6-f44bdc4888c1)
    ]
    interface IExpressionAnimation : IInspectable
    {
        [propget] HRESULT Expression([out, retval] HSTRING *value);
        [propput] HRESULT Expression([in] HSTRING value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.InsetClip),
        uuid(1e73e647-84c7-477a-b474-5880e0442e15)
    ]
    interface IInsetClip : IInspectable
    {
        [propget] HRESULT BottomInset([out, retval] FLOAT *value);
        [propput] HRESULT BottomInset([in] FLOAT value);
        [propget] HRESULT LeftInset([out, retval] FLOAT *value);
        [propput] HRESULT LeftInset([in] FLOAT value);
        [propget] HRESULT RightInset([out, retval] FLOAT *value);
        [propput] HRESULT RightInset([in] FLOAT value);
        [propget] HRESULT TopInset([out, retval] FLOAT *value);
        [propput] HRESULT TopInset([in] FLOAT value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.LinearEasingFunction),
        uuid(9400975a-c7a6-46b3-acf7-1a268a0a117d)
    ]
    interface ILinearEasingFunction : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.QuaternionKeyFrameAnimation),
        uuid(404e5835-ecf6-4240-8520-671279cf36bc)
    ]
    interface IQuaternionKeyFrameAnimation : IInspectable
    {
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrame([in] FLOAT key, [in] Windows.Foundation.Numerics.Quaternion value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrameWithEasingFunction(
            [in] FLOAT key, [in] Windows.Foundation.Numerics.Quaternion value,
            [in] Windows.UI.Composition.CompositionEasingFunction *function
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.RenderingDeviceReplacedEventArgs),
        uuid(3a31ac7d-28bf-4e7a-8524-71679d480f38)
    ]
    interface IRenderingDeviceReplacedEventArgs : IInspectable
    {
        [propget] HRESULT GraphicsDevice([out, retval] Windows.UI.Composition.CompositionGraphicsDevice **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.ScalarKeyFrameAnimation),
        uuid(ae288fa9-252c-4b95-a725-bf85e38000a1)
    ]
    interface IScalarKeyFrameAnimation : IInspectable
    {
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrame([in] FLOAT key, [in] FLOAT value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrameWithEasingFunction(
            [in] FLOAT key, [in] FLOAT value,
            [in] Windows.UI.Composition.CompositionEasingFunction *function
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.SpriteVisual),
        uuid(08e05581-1ad1-4f97-9757-402d76e4233b)
    ]
    interface ISpriteVisual : IInspectable
    {
        [propget] HRESULT Brush([out, retval] Windows.UI.Composition.CompositionBrush **value);
        [propput] HRESULT Brush([in] Windows.UI.Composition.CompositionBrush *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.Vector2KeyFrameAnimation),
        uuid(df414515-4e29-4f11-b55e-bf2a6eb36294)
    ]
    interface IVector2KeyFrameAnimation : IInspectable
    {
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrame([in] FLOAT key, [in] Windows.Foundation.Numerics.Vector2 value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrameWithEasingFunction(
            [in] FLOAT key, [in] Windows.Foundation.Numerics.Vector2 value,
            [in] Windows.UI.Composition.CompositionEasingFunction *function
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.Vector3KeyFrameAnimation),
        uuid(c8039daa-a281-43c2-a73d-b68e3c533c40)
    ]
    interface IVector3KeyFrameAnimation : IInspectable
    {
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrame([in] FLOAT key, [in] Windows.Foundation.Numerics.Vector3 value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrameWithEasingFunction(
            [in] FLOAT key, [in] Windows.Foundation.Numerics.Vector3 value,
            [in] Windows.UI.Composition.CompositionEasingFunction *function
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.Vector4KeyFrameAnimation),
        uuid(2457945b-addd-4385-9606-b6a3d5e4e1b9)
    ]
    interface IVector4KeyFrameAnimation : IInspectable
    {
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrame([in] FLOAT key, [in] Windows.Foundation.Numerics.Vector4 value);
        [overload("InsertKeyFrame")] HRESULT InsertKeyFrameWithEasingFunction(
            [in] FLOAT key, [in] Windows.Foundation.Numerics.Vector4 value,
            [in] Windows.UI.Composition.CompositionEasingFunction *function
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.Visual),
        uuid(117e202d-a859-4c89-873b-c2aa566788e3)
    ]
    interface IVisual : IInspectable
    {
        [propget] HRESULT AnchorPoint([out, retval] Windows.Foundation.Numerics.Vector2 *value);
        [propput] HRESULT AnchorPoint([in] Windows.Foundation.Numerics.Vector2 value);
        [propget] HRESULT BackfaceVisibility([out, retval] Windows.UI.Composition.CompositionBackfaceVisibility *value);
        [propput] HRESULT BackfaceVisibility([in] Windows.UI.Composition.CompositionBackfaceVisibility value);
        [propget] HRESULT BorderMode([out, retval] Windows.UI.Composition.CompositionBorderMode *value);
        [propput] HRESULT BorderMode([in] Windows.UI.Composition.CompositionBorderMode value);
        [propget] HRESULT CenterPoint([out, retval] Windows.Foundation.Numerics.Vector3 *value);
        [propput] HRESULT CenterPoint([in] Windows.Foundation.Numerics.Vector3 value);
        [propget] HRESULT Clip([out, retval] Windows.UI.Composition.CompositionClip **value);
        [propput] HRESULT Clip([in] Windows.UI.Composition.CompositionClip *value);
        [propget] HRESULT CompositeMode([out, retval] Windows.UI.Composition.CompositionCompositeMode *value);
        [propput] HRESULT CompositeMode([in] Windows.UI.Composition.CompositionCompositeMode value);
        [propget] HRESULT IsVisible([out, retval] boolean *value);
        [propput] HRESULT IsVisible([in] boolean value);
        [propget] HRESULT Offset([out, retval] Windows.Foundation.Numerics.Vector3 *value);
        [propput] HRESULT Offset([in] Windows.Foundation.Numerics.Vector3 value);
        [propget] HRESULT Opacity([out, retval] FLOAT *value);
        [propput] HRESULT Opacity([in] FLOAT value);
        [propget] HRESULT Orientation([out, retval] Windows.Foundation.Numerics.Quaternion *value);
        [propput] HRESULT Orientation([in] Windows.Foundation.Numerics.Quaternion value);
        [propget] HRESULT Parent([out, retval] Windows.UI.Composition.ContainerVisual **value);
        [propget] HRESULT RotationAngle([out, retval] FLOAT *value);
        [propput] HRESULT RotationAngle([in] FLOAT value);
        [propget] HRESULT RotationAngleInDegrees([out, retval] FLOAT *value);
        [propput] HRESULT RotationAngleInDegrees([in] FLOAT value);
        [propget] HRESULT RotationAxis([out, retval] Windows.Foundation.Numerics.Vector3 *value);
        [propput] HRESULT RotationAxis([in] Windows.Foundation.Numerics.Vector3 value);
        [propget] HRESULT Scale([out, retval] Windows.Foundation.Numerics.Vector3 *value);
        [propput] HRESULT Scale([in] Windows.Foundation.Numerics.Vector3 value);
        [propget] HRESULT Size([out, retval] Windows.Foundation.Numerics.Vector2 *value);
        [propput] HRESULT Size([in] Windows.Foundation.Numerics.Vector2 value);
        [propget] HRESULT TransformMatrix([out, retval] Windows.Foundation.Numerics.Matrix4x4 *value);
        [propput] HRESULT TransformMatrix([in] Windows.Foundation.Numerics.Matrix4x4 value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.Visual),
        uuid(ad0ff93e-b502-4eb5-87b4-9a38a71d0137)
    ]
    interface IVisualFactory : IInspectable
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.UI.Composition.VisualCollection),
        uuid(8b745505-fd3e-4a98-84a8-e949468c6bcb)
    ]
    interface IVisualCollection : IInspectable
    {
        [propget] HRESULT Count([out, retval] INT32 *value);
        HRESULT InsertAbove([in] Windows.UI.Composition.Visual *child, [in] Windows.UI.Composition.Visual *sibling);
        HRESULT InsertAtBottom([in] Windows.UI.Composition.Visual *child);
        HRESULT InsertAtTop([in] Windows.UI.Composition.Visual *child);
        HRESULT InsertBelow([in] Windows.UI.Composition.Visual *child, [in] Windows.UI.Composition.Visual *sibling);
        HRESULT Remove([in] Windows.UI.Composition.Visual *child);
        HRESULT RemoveAll();
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass ColorKeyFrameAnimation : Windows.UI.Composition.KeyFrameAnimation
    {
        [default] interface Windows.UI.Composition.IColorKeyFrameAnimation;
    }

    [
        composable(Windows.UI.Composition.ICompositionAnimationFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionAnimation : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionAnimation;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositionAnimation2;
        [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.UI.Composition.ICompositionAnimation3;
        [contract(Windows.Foundation.UniversalApiContract, 7.0)] interface Windows.UI.Composition.ICompositionAnimation4;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositionAnimationBase;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionBatchCompletedEventArgs : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionBatchCompletedEventArgs;
    }

    [
        composable(Windows.UI.Composition.ICompositionBrushFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionBrush : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionBrush;
    }

    [
        composable(Windows.UI.Composition.ICompositionClipFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionClip : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionClip;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositionClip2;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionColorBrush : Windows.UI.Composition.CompositionBrush
    {
        [default] interface Windows.UI.Composition.ICompositionColorBrush;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionCommitBatch : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionCommitBatch;
    }

    [
        composable(Windows.UI.Composition.ICompositionDrawingSurfaceFactory, public, Windows.Foundation.UniversalApiContract, 4.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionDrawingSurface : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionDrawingSurface;
        [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.UI.Composition.ICompositionDrawingSurface2;
        interface Windows.UI.Composition.ICompositionSurface;
    }

    [
        composable(Windows.UI.Composition.ICompositionEasingFunctionFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        static(Windows.UI.Composition.ICompositionEasingFunctionStatics, Windows.Foundation.UniversalApiContract, 12.0),
        threading(both)
    ]
    runtimeclass CompositionEasingFunction : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionEasingFunction;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionEffectBrush : Windows.UI.Composition.CompositionBrush
    {
        [default] interface Windows.UI.Composition.ICompositionEffectBrush;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionEffectFactory : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionEffectFactory;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionGraphicsDevice : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionGraphicsDevice;
        [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.UI.Composition.ICompositionGraphicsDevice2;
        [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.UI.Composition.ICompositionGraphicsDevice3;
        [contract(Windows.Foundation.UniversalApiContract, 12.0)] interface Windows.UI.Composition.ICompositionGraphicsDevice4;
    }

    [
        composable(Windows.UI.Composition.ICompositionObjectFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        static(Windows.UI.Composition.ICompositionObjectStatics, Windows.Foundation.UniversalApiContract, 7.0),
        threading(both)
    ]
    runtimeclass CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionObject;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositionObject2;
        [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.UI.Composition.ICompositionObject3;
        [contract(Windows.Foundation.UniversalApiContract, 6.0)] interface Windows.UI.Composition.ICompositionObject4;
        interface Windows.Foundation.IClosable;
        [contract(Windows.Foundation.UniversalApiContract, 7.0)] interface Windows.UI.Composition.IAnimationObject;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionPropertySet : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionPropertySet;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositionPropertySet2;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionScopedBatch : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionScopedBatch;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionSurfaceBrush : Windows.UI.Composition.CompositionBrush
    {
        [default] interface Windows.UI.Composition.ICompositionSurfaceBrush;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositionSurfaceBrush2;
        [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.UI.Composition.ICompositionSurfaceBrush3;
    }

    [
        composable(Windows.UI.Composition.ICompositionTargetFactory, public, Windows.Foundation.UniversalApiContract, 5.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CompositionTarget : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.ICompositionTarget;
    }

    [
        activatable(Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        static(Windows.UI.Composition.ICompositorStatics, Windows.Foundation.UniversalApiContract, 6.0),
        threading(both)
    ]
    runtimeclass Compositor
    {
        [default] interface Windows.UI.Composition.ICompositor;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ICompositor2;
        [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.UI.Composition.ICompositor3;
        [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.UI.Composition.ICompositor4;
        [contract(Windows.Foundation.UniversalApiContract, 6.0)] interface Windows.UI.Composition.ICompositor5;
        [contract(Windows.Foundation.UniversalApiContract, 7.0)] interface Windows.UI.Composition.ICompositor6;
        [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.UI.Composition.ICompositorWithProjectedShadow;
        [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.UI.Composition.ICompositorWithRadialGradient;
        [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.UI.Composition.ICompositorWithVisualSurface;
        [contract(Windows.Foundation.UniversalApiContract, 12.0)] interface Windows.UI.Composition.ICompositor7;
        [contract(Windows.Foundation.UniversalApiContract, 13.0)] interface Windows.UI.Composition.ICompositorWithBlurredWallpaperBackdropBrush;
        interface Windows.Foundation.IClosable;
    }

    [
        composable(Windows.UI.Composition.IContainerVisualFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass ContainerVisual : Windows.UI.Composition.Visual
    {
        [default] interface Windows.UI.Composition.IContainerVisual;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass CubicBezierEasingFunction : Windows.UI.Composition.CompositionEasingFunction
    {
        [default] interface Windows.UI.Composition.ICubicBezierEasingFunction;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass ExpressionAnimation : Windows.UI.Composition.CompositionAnimation
    {
        [default] interface Windows.UI.Composition.IExpressionAnimation;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass InsetClip : Windows.UI.Composition.CompositionClip
    {
        [default] interface Windows.UI.Composition.IInsetClip;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass LinearEasingFunction : Windows.UI.Composition.CompositionEasingFunction
    {
        [default] interface Windows.UI.Composition.ILinearEasingFunction;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass QuaternionKeyFrameAnimation : Windows.UI.Composition.KeyFrameAnimation
    {
        [default] interface Windows.UI.Composition.IQuaternionKeyFrameAnimation;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass RenderingDeviceReplacedEventArgs : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.IRenderingDeviceReplacedEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass ScalarKeyFrameAnimation : Windows.UI.Composition.KeyFrameAnimation
    {
        [default] interface Windows.UI.Composition.IScalarKeyFrameAnimation;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass SpriteVisual : Windows.UI.Composition.ContainerVisual
    {
        [default] interface Windows.UI.Composition.ISpriteVisual;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Composition.ISpriteVisual2;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass Vector2KeyFrameAnimation : Windows.UI.Composition.KeyFrameAnimation
    {
        [default] interface Windows.UI.Composition.IVector2KeyFrameAnimation;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass Vector3KeyFrameAnimation : Windows.UI.Composition.KeyFrameAnimation
    {
        [default] interface Windows.UI.Composition.IVector3KeyFrameAnimation;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass Vector4KeyFrameAnimation : Windows.UI.Composition.KeyFrameAnimation
    {
        [default] interface Windows.UI.Composition.IVector4KeyFrameAnimation;
    }

    [
        composable(Windows.UI.Composition.IVisualFactory, public, Windows.Foundation.UniversalApiContract, 2.0),
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass Visual : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.IVisual;
        [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.UI.Composition.IVisual2;
        [contract(Windows.Foundation.UniversalApiContract, 11.0)] interface Windows.UI.Composition.IVisual3;
        [contract(Windows.Foundation.UniversalApiContract, 12.0)] interface Windows.UI.Composition.IVisual4;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        marshaling_behavior(agile),
        threading(both)
    ]
    runtimeclass VisualCollection : Windows.UI.Composition.CompositionObject
    {
        [default] interface Windows.UI.Composition.IVisualCollection;
        interface Windows.Foundation.Collections.IIterable<Windows.UI.Composition.Visual *>;
    }
}
