Vanara/PInvoke/Printing/XpsObjectModel.cs

5167 lines
275 KiB
C#
Raw Normal View History

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using Vanara.InteropServices;
using static Vanara.PInvoke.Opc;
using static Vanara.PInvoke.UrlMon;
namespace Vanara.PInvoke
{
/// <summary>Interfaces and supporting enums and structures for XPS programming.</summary>
// https://docs.microsoft.com/en-us/windows/win32/printdocs/xps-programming-reference
public static partial class XpsObjectModel
{
/// <summary>
/// Defines objects that are used to paint graphical objects. Classes that derive from <c>IXpsOMBrush</c> describe how the area is painted.
/// </summary>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsombrush
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "43cb56db-e09e-47cb-b50b-7827131659fd")]
[ComImport, Guid("56A3F80C-EA4C-4187-A57B-A2A473B2B42B"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMBrush : IXpsOMShareable
{
/// <summary>Gets the <c>IUnknown</c> interface of the parent.</summary>
/// <returns>A pointer to the <c>IUnknown</c> interface of the parent.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
new object GetOwner();
/// <summary>Gets the object type of the interface.</summary>
/// <returns>The XPS_OBJECT_TYPE value that describes the interface that is derived from IXpsOMShareable.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-gettype HRESULT GetType(
// XPS_OBJECT_TYPE *type );
new XPS_OBJECT_TYPE GetType();
/// <summary>Gets the opacity of the brush.</summary>
/// <returns>The opacity value of the brush.</returns>
/// <remarks>
/// opacity is expressed as a value between 0.0 and 1.0; 0.0 indicates that the brush is completely transparent, 0.5 that it is
/// 50 percent opaque, and 1.0 that it is completely opaque.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsombrush-getopacity HRESULT
// GetOpacity( FLOAT *opacity );
float GetOpacity();
/// <summary>Sets the opacity of the brush.</summary>
/// <param name="opacity">The opacity value of the brush.</param>
/// <remarks>
/// <para>
/// opacity is expressed as a value between 0.0 and 1.0; 0.0 indicates that the brush is completely transparent, 0.5 that it is
/// 50 percent opaque, and 1.0 that it is completely opaque.
/// </para>
/// <para>If opacity is less than 0.0 or greater than 1.0, the method returns an error.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsombrush-setopacity HRESULT
// SetOpacity( FLOAT opacity );
void SetOpacity([In] float opacity);
}
/// <summary>A group of visual elements and related properties.</summary>
/// <remarks>The code example that follows illustrates how to create an instance of this interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "3cb0e1b3-88a8-4724-a3c5-0df416294e62")]
[ComImport, Guid("221D1452-331E-47C6-87E9-6CCEFB9B5BA3"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMCanvas : IXpsOMVisual
{
/// <summary>Gets the <c>IUnknown</c> interface of the parent.</summary>
/// <returns>A pointer to the <c>IUnknown</c> interface of the parent.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
new object GetOwner();
/// <summary>Gets the object type of the interface.</summary>
/// <returns>The XPS_OBJECT_TYPE value that describes the interface that is derived from IXpsOMShareable.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-gettype HRESULT GetType(
// XPS_OBJECT_TYPE *type );
new XPS_OBJECT_TYPE GetType();
/// <summary>Gets a pointer to the IXpsOMMatrixTransform interface that contains the visual's resolved matrix transform.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the visual's resolved matrix transform. If a matrix transform
/// has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in matrixTransform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform that gets retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the
/// resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gettransform HRESULT
// GetTransform( IXpsOMMatrixTransform **matrixTransform );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMMatrixTransform GetTransform();
/// <summary>
/// Gets a pointer to the IXpsOMMatrixTransform interface that contains the local, unshared, resolved matrix transform for the visual.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the local, unshared, resolved matrix transform for the
/// visual. If a matrix transform lookup key has not been set, or if a local matrix transform has been set, a <c>NULL</c>
/// pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in matrixTransform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gettransformlocal HRESULT
// GetTransformLocal( IXpsOMMatrixTransform **matrixTransform );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMMatrixTransform GetTransformLocal();
/// <summary>Sets the local, unshared matrix transform.</summary>
/// <param name="matrixTransform">
/// A pointer to the IXpsOMMatrixTransform interface to be set as the local, unshared matrix transform. A <c>NULL</c> pointer
/// releases the previously assigned transform.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLocal</c>, the transform lookup key is released and GetTransformLookup returns a <c>NULL</c>
/// pointer in the key parameter. The table that follows explains the relationship between the local and lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in matrixTransform by GetTransformLocal</term>
/// <term>Object that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal (this method)</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform that gets retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-settransformlocal HRESULT
// SetTransformLocal( IXpsOMMatrixTransform *matrixTransform );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetTransformLocal([In] IXpsOMMatrixTransform matrixTransform);
/// <summary>
/// Gets the lookup key name of the IXpsOMMatrixTransform interface in a resource dictionary that contains the resolved matrix
/// transform for the visual.
/// </summary>
/// <returns>
/// <para>
/// The lookup key name for the IXpsOMMatrixTransform interface in a resource dictionary that contains the resolved matrix
/// transform for the visual. If a matrix transform lookup key has not been set, or if a local matrix transform has been set, a
/// <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gettransformlookup HRESULT
// GetTransformLookup( LPWSTR *key );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetTransformLookup();
/// <summary>Sets the lookup key name of a shared matrix transform in a resource dictionary.</summary>
/// <param name="key">The lookup key name of the matrix transform in the dictionary.</param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLookup</c>, the local transform is released and GetTransformLocal returns a <c>NULL</c>
/// pointer in the matrixTransform parameter. The table that follows explains the relationship between the local and lookup
/// values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in matrixTransform by GetTransformLocal</term>
/// <term>Object that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup (this method)</term>
/// <term>
/// The shared transform that gets retrieved—with a lookup key that matches the key that is set by SetTransformLookup—from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-settransformlookup HRESULT
// SetTransformLookup( LPCWSTR key );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetTransformLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>
/// Gets a pointer to the IXpsOMGeometry interface that contains the resolved geometry of the visual's clipping region.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMGeometry interface that contains the resolved geometry of the visual's clipping region. If the clip
/// geometry has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the geometry.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>
/// The shared clip geometry that gets retrieved, with a lookup key that matches the key that is set by SetClipGeometryLookup,
/// from the resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLocal nor SetClipGeometryLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getclipgeometry HRESULT
// GetClipGeometry( IXpsOMGeometry **clipGeometry );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMGeometry GetClipGeometry();
/// <summary>
/// Gets a pointer to the IXpsOMGeometry interface that contains the local, unshared geometry of the visual's clipping region.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMGeometry interface that contains the local, unshared geometry of the visual's clipping region. If a
/// clip geometry lookup key has been set, or if a local clip geometry has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLocal nor SetClipGeometryLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getclipgeometrylocal HRESULT
// GetClipGeometryLocal( IXpsOMGeometry **clipGeometry );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMGeometry GetClipGeometryLocal();
/// <summary>Sets the local, unshared clipping region for the visual.</summary>
/// <param name="clipGeometry">
/// A pointer to the IXpsOMGeometry interface to be set as the local, unshared clipping region for the visual. A <c>NULL</c>
/// pointer releases the previously assigned geometry interface.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetClipGeometryLocal</c>, the clip geometry lookup key is released and GetClipGeometryLookup returns a
/// <c>NULL</c> pointer in the key parameter. The table that follows explains the relationship between the local and lookup
/// values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometry</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometryLocal</term>
/// <term>String that is returned in key by GetClipGeometryLookup</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal (this method)</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>
/// The shared clip geometry that gets retrieved, with a lookup key that matches the key that is set by SetClipGeometryLookup,
/// from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetClipGeometryLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLookup nor SetClipGeometryLocal has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setclipgeometrylocal HRESULT
// SetClipGeometryLocal( IXpsOMGeometry *clipGeometry );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetClipGeometryLocal([In] IXpsOMGeometry clipGeometry);
/// <summary>
/// Gets the lookup key for the IXpsOMGeometry interface in a resource dictionary that contains the visual's clipping region.
/// </summary>
/// <returns>
/// <para>
/// The lookup key for the IXpsOMGeometry interface in a resource dictionary that contains the visual's clipping region. If a
/// lookup key for the clip geometry has not been set, or if a local clip geometry has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Lookup key string that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>The lookup key that is set by SetClipGeometryLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLocal nor SetClipGeometryLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getclipgeometrylookup
// HRESULT GetClipGeometryLookup( LPWSTR *key );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetClipGeometryLookup();
/// <summary>Sets the lookup key name of a shared clip geometry in a resource dictionary.</summary>
/// <param name="key">
/// The lookup key name of the clip geometry in the dictionary. A <c>NULL</c> pointer clears the previously assigned key name.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetClipGeometryLookup</c>, the local clip geometry is released and GetClipGeometryLocal returns a
/// <c>NULL</c> pointer in the clipGeometry parameter. The table that follows explains the relationship between the local and
/// lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometry</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometryLocal</term>
/// <term>String that is returned in key by GetClipGeometryLookup</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup (this method)</term>
/// <term>
/// The shared clip geometry that gets retrieved, with a lookup key that matches the key that is set by SetClipGeometryLookup,
/// from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetClipGeometryLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLookup nor SetClipGeometryLocal has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setclipgeometrylookup
// HRESULT SetClipGeometryLookup( LPCWSTR key );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetClipGeometryLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets the opacity value of this visual.</summary>
/// <returns>The opacity value.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacity HRESULT
// GetOpacity( FLOAT *opacity );
[MethodImpl(MethodImplOptions.InternalCall)]
new float GetOpacity();
/// <summary>Sets the opacity value of the visual.</summary>
/// <param name="opacity">
/// <para>The opacity value to be set for the visual.</para>
/// <para>
/// The range of allowed values for this parameter is 0.0 to 1.0; with 0.0 the visual is completely transparent, and with 1.0 it
/// is completely opaque.
/// </para>
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setopacity HRESULT
// SetOpacity( FLOAT opacity );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetOpacity([In] float opacity);
/// <summary>Gets a pointer to the IXpsOMBrush interface of the visual's opacity mask brush.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMBrush interface of the visual's opacity mask brush. If an opacity mask brush has not been set for
/// this visual, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the brush.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>
/// The shared opacity mask brush that gets retrieved, with a lookup key that matches the key that is set by
/// SetOpacityMaskBrushLookup, from the resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacitymaskbrush HRESULT
// GetOpacityMaskBrush( IXpsOMBrush **opacityMaskBrush );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMBrush GetOpacityMaskBrush();
/// <summary>Gets the local, unshared opacity mask brush for the visual.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMBrush interface of the visual's opacity mask brush. If an opacity mask brush lookup key has been set,
/// or if a local opacity mask brush has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacitymaskbrushlocal
// HRESULT GetOpacityMaskBrushLocal( IXpsOMBrush **opacityMaskBrush );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMBrush GetOpacityMaskBrushLocal();
/// <summary>Sets the IXpsOMBrush interface pointer as the local, unshared opacity mask brush.</summary>
/// <param name="opacityMaskBrush">
/// A pointer to the IXpsOMBrush interface to be set as the local, unshared opacity mask brush. A <c>NULL</c> pointer clears the
/// previously assigned opacity mask brush.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetOpacityMaskBrushLocal</c>, the opacity mask brush lookup key is released and GetOpacityMaskBrushLookup
/// returns a <c>NULL</c> pointer in the key parameter. The table that follows explains the relationship between the local and
/// lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrush</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrushLocal</term>
/// <term>String that is returned in key by GetOpacityMaskBrushLookup</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal (this method)</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>
/// The shared opacity mask brush that gets retrieved, with a lookup key that matches the key that is set by
/// SetOpacityMaskBrushLookup, from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetOpacityMaskBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setopacitymaskbrushlocal
// HRESULT SetOpacityMaskBrushLocal( IXpsOMBrush *opacityMaskBrush );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetOpacityMaskBrushLocal([In] IXpsOMBrush opacityMaskBrush);
/// <summary>Gets the name of the lookup key of the shared opacity mask brush in a resource dictionary.</summary>
/// <returns>
/// <para>
/// The name of the lookup key of the shared opacity mask brush in a resource dictionary. If the lookup key of an opacity mask
/// brush has not been set, or if a local opacity mask brush has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>The lookup key that is set by SetOpacityMaskBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacitymaskbrushlookup
// HRESULT GetOpacityMaskBrushLookup( LPWSTR *key );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetOpacityMaskBrushLookup();
/// <summary>Sets the lookup key name of a shared opacity mask brush in a resource dictionary.</summary>
/// <param name="key">
/// The lookup key name of the opacity mask brush in the dictionary. A <c>NULL</c> pointer clears the previously assigned key name.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetOpacityMaskBrushLookup</c>, the local opacity mask brush is released and GetOpacityMaskBrushLocal
/// returns a <c>NULL</c> pointer in the opacityMaskBrush parameter. The table that follows explains the relationship between
/// the local and lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrush</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrushLocal</term>
/// <term>String that is returned in key by GetOpacityMaskBrushLookup</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup (this method)</term>
/// <term>
/// The shared opacity mask brush that gets retrieved—with a lookup key that matches the key that is set by
/// SetOpacityMaskBrushLookup—from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetOpacityMaskBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setopacitymaskbrushlookup
// HRESULT SetOpacityMaskBrushLookup( LPCWSTR key );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetOpacityMaskBrushLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets the <c>Name</c> property of the visual.</summary>
/// <returns>The <c>Name</c> property string. If the <c>Name</c> property has not been set, a <c>NULL</c> pointer is returned.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getname HRESULT GetName(
// LPWSTR *name );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetName();
/// <summary>Sets the <c>Name</c> property of the visual.</summary>
/// <param name="name">The name of the visual. A <c>NULL</c> pointer clears the <c>Name</c> property.</param>
/// <remarks>
/// <para>Names must be unique.</para>
/// <para>
/// Clearing the <c>Name</c> property by passing a <c>NULL</c> pointer in name sets the <c>IsHyperlinkTarget</c> property to <c>FALSE</c>.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setname HRESULT SetName(
// LPCWSTR name );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetName([In, MarshalAs(UnmanagedType.LPWStr)] string name);
/// <summary>Gets a value that indicates whether the visual is the target of a hyperlink.</summary>
/// <returns>
/// <para>The Boolean value that indicates whether the visual is the target of a hyperlink.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The visual is the target of a hyperlink.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The visual is not the target of a hyperlink.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getishyperlinktarget HRESULT
// GetIsHyperlinkTarget( BOOL *isHyperlink );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.Bool)]
new bool GetIsHyperlinkTarget();
/// <summary>Specifies whether the visual is the target of a hyperlink.</summary>
/// <param name="isHyperlink">
/// <para>The Boolean value that specifies whether the visual is the target of a hyperlink.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The visual is the target of a hyperlink.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The visual is not the target of a hyperlink.</term>
/// </item>
/// </list>
/// </param>
/// <remarks>The visual must be named before it can be set as the target of a hyperlink.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setishyperlinktarget HRESULT
// SetIsHyperlinkTarget( BOOL isHyperlink );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetIsHyperlinkTarget([In, MarshalAs(UnmanagedType.Bool)] bool isHyperlink);
/// <summary>Gets a pointer to the IUri interface to which this visual object links.</summary>
/// <returns>
/// A pointer to the IUri interface that contains the destination URI for the link. If a URI has not been set for this object, a
/// <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gethyperlinknavigateuri
// HRESULT GetHyperlinkNavigateUri( IUri **hyperlinkUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new IUri GetHyperlinkNavigateUri();
/// <summary>Sets the destination URI of the visual's hyperlink.</summary>
/// <param name="hyperlinkUri">The IUri interface that contains the destination URI of the visual's hyperlink.</param>
/// <remarks>
/// Setting an object's URI makes the object a hyperlink. When activated or clicked, the object will navigate to the destination
/// that is specified by the URI in hyperlinkUri.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-sethyperlinknavigateuri
// HRESULT SetHyperlinkNavigateUri( IUri *hyperlinkUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetHyperlinkNavigateUri([In] IUri hyperlinkUri);
/// <summary>Gets the <c>Language</c> property of the visual and of its contents.</summary>
/// <returns>
/// The language string that specifies the language of the page. If a language has not been set, a <c>NULL</c> pointer is returned.
/// </returns>
/// <remarks>
/// <para>The <c>Language</c> property that is set by this method specifies the language of the resource content.</para>
/// <para>Internet Engineering Task Force (IETF) RFC 3066 specifies the recommended encoding for the <c>Language</c> property.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getlanguage HRESULT
// GetLanguage( LPWSTR *language );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetLanguage();
/// <summary>Sets the <c>Language</c> property of the visual.</summary>
/// <param name="language">
/// The language string that specifies the language of the visual and of its contents. A <c>NULL</c> pointer clears the
/// <c>Language</c> property.
/// </param>
/// <remarks>
/// The recommended encoding for the <c>Language</c> property is specified in Internet Engineering Task Force (IETF) RFC 3066r.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setlanguage HRESULT
// SetLanguage( LPCWSTR language );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetLanguage([In, MarshalAs(UnmanagedType.LPWStr)] string language);
/// <summary>
/// Gets a pointer to an IXpsOMVisualCollection interface that contains a collection of the visual objects in the canvas.
/// </summary>
/// <returns>
/// The collection of the visual objects in the canvas. If no visual objects are attached to the canvas, an empty collection is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getvisuals HRESULT
// GetVisuals( IXpsOMVisualCollection **visuals );
IXpsOMVisualCollection GetVisuals();
/// <summary>
/// Gets a Boolean value that determines whether the edges of the objects in the canvas are to be rendered using the aliased
/// edge mode.
/// </summary>
/// <returns>
/// <para>The Boolean value that determines whether the objects in the canvas are to be rendered using the aliased edge mode.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>
/// The edges of objects in the canvas are to be rendered without anti-aliasing using the aliased edge mode. This includes any
/// objects in the canvas that have useAliasedEdgeMode set to FALSE. In the document markup, this corresponds to the
/// RenderOptions.EdgeMode attribute having a value of Aliased.
/// </term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>
/// The edges of objects in the canvas are to be rendered in the default manner. In the document markup, this corresponds to the
/// RenderOptions.EdgeMode attribute being absent.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// The property that is returned by this method corresponds to the <c>RenderOptions.EdgeMode</c> attribute of the <c>Canvas</c>
/// element in the document markup.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getusealiasededgemode
// HRESULT GetUseAliasedEdgeMode( BOOL *useAliasedEdgeMode );
[return: MarshalAs(UnmanagedType.Bool)]
bool GetUseAliasedEdgeMode();
/// <summary>
/// Sets the value that determines whether the edges of objects in this canvas will be rendered using the aliased edge mode.
/// </summary>
/// <param name="useAliasedEdgeMode">
/// <para>
/// The Boolean value that determines whether the edges of child objects in this canvas will be rendered using the aliased edge mode.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>
/// The edges of objects in the canvas are to be rendered without anti-aliasing using the aliased edge mode. This includes any
/// objects that have this value set to FALSE. In the document markup, this corresponds to the RenderOptions.EdgeMode attribute
/// having the value of Aliased.
/// </term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>
/// The edges of objects in the canvas are to be rendered in the default manner. In the document markup, this corresponds to the
/// RenderOptions.EdgeMode attribute being absent.
/// </term>
/// </item>
/// </list>
/// </param>
/// <remarks>
/// This property corresponds to the <c>RenderOptions.EdgeMode</c> attribute of the <c>Canvas</c> element in the document markup.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-setusealiasededgemode
// HRESULT SetUseAliasedEdgeMode( BOOL useAliasedEdgeMode );
void SetUseAliasedEdgeMode([MarshalAs(UnmanagedType.Bool)] bool useAliasedEdgeMode);
/// <summary>
/// Gets a short textual description of the object's contents. This text is used by accessibility clients to describe the object.
/// </summary>
/// <returns>
/// The short textual description of the object's contents. If this description is not set, a <c>NULL</c> pointer is returned.
/// </returns>
/// <remarks>
/// <para>
/// The property returned by this method corresponds to the <c>AutomationProperties.Name</c> attribute of the <c>Canvas</c>
/// element in the document markup.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getaccessibilityshortdescription
// HRESULT GetAccessibilityShortDescription( LPWSTR *shortDescription );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetAccessibilityShortDescription();
/// <summary>
/// Sets the short textual description of the object's contents. This text is used by accessibility clients to describe the object.
/// </summary>
/// <param name="shortDescription">
/// The short textual description of the object's contents. A <c>NULL</c> pointer clears the previously assigned text.
/// </param>
/// <remarks>
/// The property that is set by this method corresponds to the <c>AutomationProperties.HelpText</c> attribute of the
/// <c>Canvas</c> element in the document markup.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-setaccessibilityshortdescription
// HRESULT SetAccessibilityShortDescription( LPCWSTR shortDescription );
void SetAccessibilityShortDescription([In, MarshalAs(UnmanagedType.LPWStr)] string shortDescription);
/// <summary>
/// Gets the long (detailed) textual description of the object's contents. This text is used by accessibility clients to
/// describe the object.
/// </summary>
/// <returns>
/// The long (detailed) textual description of the object's contents. A <c>NULL</c> pointer is returned if this text has not
/// been set.
/// </returns>
/// <remarks>
/// <para>
/// The property returned by this method corresponds to the <c>AutomationProperties.HelpText</c> attribute of the <c>Canvas</c>
/// element in the document markup.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getaccessibilitylongdescription
// HRESULT GetAccessibilityLongDescription( LPWSTR *longDescription );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetAccessibilityLongDescription();
/// <summary>
/// Sets the long (detailed) textual description of the object's contents. This text is used by accessibility clients to
/// describe the object.
/// </summary>
/// <param name="longDescription">
/// The long (detailed) textual description of the object's contents. A <c>NULL</c> pointer clears the previously assigned value.
/// </param>
/// <remarks>
/// The property that is set by this method corresponds to the <c>AutomationProperties.HelpText</c> attribute of the
/// <c>Canvas</c> element in the document markup.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-setaccessibilitylongdescription
// HRESULT SetAccessibilityLongDescription( LPCWSTR longDescription );
void SetAccessibilityLongDescription([In, MarshalAs(UnmanagedType.LPWStr)] string longDescription);
/// <summary>Gets a pointer to the resolved IXpsOMDictionary interface of the dictionary associated with the canvas.</summary>
/// <returns>
/// <para>A pointer to the resolved IXpsOMDictionary interface of the dictionary.</para>
/// <para>The value that is returned in this parameter depends on which method has been most recently called to set the dictionary.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object returned in resourceDictionary</term>
/// </listheader>
/// <item>
/// <term>SetDictionaryLocal</term>
/// <term>The local dictionary that is set by SetDictionaryLocal.</term>
/// </item>
/// <item>
/// <term>SetDictionaryResource</term>
/// <term>The shared dictionary in the dictionary resource that is set by SetDictionaryResource.</term>
/// </item>
/// <item>
/// <term>Neither SetDictionaryLocal nor SetDictionaryResource has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// <c>GetDictionary</c> can return the interface pointer of a local or remote dictionary. GetOwner can be called to determine
/// whether the dictionary is local or remote.
/// </para>
/// <para>
/// After loading and parsing the resource into the XPS OM, this method might return an error that applies to another resource.
/// This occurs because all of the relationships are parsed when a resource is loaded.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getdictionary HRESULT
// GetDictionary( IXpsOMDictionary **resourceDictionary );
IXpsOMDictionary GetDictionary();
/// <summary>Gets a pointer to the IXpsOMDictionary interface of the local, unshared dictionary.</summary>
/// <returns>
/// <para>
/// The IXpsOMDictionary interface pointer to the local, unshared dictionary, if one has been set. If a local dictionary has not
/// been set or if a remote dictionary resource has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object returned in resourceDictionary</term>
/// </listheader>
/// <item>
/// <term>SetDictionaryLocal</term>
/// <term>The local dictionary that is set by SetDictionaryLocal.</term>
/// </item>
/// <item>
/// <term>SetDictionaryResource</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetDictionaryLocal nor SetDictionaryResource has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// When this method loads and parses the resource into the XPS OM, it might return an error that applies to another resource.
/// This can occur because all of the relationships are parsed when the resource is loaded.
/// </para>
/// <para>For more information about other return values that might be returned by this method, see XPS Document Errors.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getdictionarylocal HRESULT
// GetDictionaryLocal( IXpsOMDictionary **resourceDictionary );
IXpsOMDictionary GetDictionaryLocal();
/// <summary>Sets the IXpsOMDictionary interface pointer of the local, unshared dictionary.</summary>
/// <param name="resourceDictionary">
/// The IXpsOMDictionary interface of the local, unshared dictionary. A <c>NULL</c> pointer releases any previously assigned
/// local dictionary.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetDictionaryLocal</c>, the remote dictionary resource is released and GetDictionaryResource returns a
/// <c>NULL</c> pointer in the remoteDictionaryResource parameter. The table that follows explains the relationship between the
/// local and remote values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in resourceDictionary by GetDictionary</term>
/// <term>Object that is returned in resourceDictionary by GetDictionaryLocal</term>
/// <term>Object that is returned in remoteDictionaryResource by GetDictionaryResource</term>
/// </listheader>
/// <item>
/// <term>SetDictionaryLocal (this method)</term>
/// <term>The local dictionary that is set by SetDictionaryLocal.</term>
/// <term>The local dictionary that is set by SetDictionaryLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetDictionaryResource</term>
/// <term>The shared dictionary in the dictionary resource that is set by SetDictionaryResource.</term>
/// <term>NULL pointer.</term>
/// <term>The remote dictionary resource that is set by SetDictionaryResource.</term>
/// </item>
/// <item>
/// <term>Neither SetDictionaryLocal nor SetDictionaryResource has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-setdictionarylocal HRESULT
// SetDictionaryLocal( IXpsOMDictionary *resourceDictionary );
void SetDictionaryLocal([In] IXpsOMDictionary resourceDictionary);
/// <summary>Gets a pointer to the IXpsOMRemoteDictionaryResource interface of the remote dictionary resource.</summary>
/// <returns>
/// <para>
/// The IXpsOMRemoteDictionaryResource interface pointer to the remote dictionary resource, if one has been set. If a remote
/// dictionary resource has not been set or if a local dictionary resource has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object returned in remoteDictionaryResource</term>
/// </listheader>
/// <item>
/// <term>SetDictionaryLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetDictionaryResource</term>
/// <term>The remote dictionary resource that is set by SetDictionaryResource.</term>
/// </item>
/// <item>
/// <term>Neither SetDictionaryLocal nor SetDictionaryResource has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// After loading and parsing the resource into the XPS OM, this method might return an error that applies to another resource.
/// This occurs because all of the relationships are parsed when a resource is loaded.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-getdictionaryresource
// HRESULT GetDictionaryResource( IXpsOMRemoteDictionaryResource **remoteDictionaryResource );
IXpsOMRemoteDictionaryResource GetDictionaryResource();
/// <summary>Sets the IXpsOMRemoteDictionaryResource interface pointer of the remote dictionary resource.</summary>
/// <param name="remoteDictionaryResource">
/// The IXpsOMRemoteDictionaryResource interface of the remote dictionary resource. A <c>NULL</c> pointer releases any
/// previously assigned dictionary resource.
/// </param>
/// <remarks>
/// <para>After calling this method, GetDictionaryLocal returns a <c>NULL</c> pointer in the resourceDictionary parameter.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in resourceDictionary by GetDictionary</term>
/// <term>Object that is returned in resourceDictionary by GetDictionaryLocal</term>
/// <term>Object that is returned in remoteDictionaryResource by GetDictionaryResource</term>
/// </listheader>
/// <item>
/// <term>SetDictionaryLocal</term>
/// <term>The local dictionary that is set by SetDictionaryLocal.</term>
/// <term>The local dictionary that is set by SetDictionaryLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetDictionaryResource (this method)</term>
/// <term>The shared dictionary in the dictionary resource that is set by SetDictionaryResource.</term>
/// <term>NULL pointer.</term>
/// <term>The remote dictionary resource that is set by SetDictionaryResource.</term>
/// </item>
/// <item>
/// <term>Neither SetDictionaryLocal nor SetDictionaryResource has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-setdictionaryresource
// HRESULT SetDictionaryResource( IXpsOMRemoteDictionaryResource *remoteDictionaryResource );
void SetDictionaryResource([In] IXpsOMRemoteDictionaryResource remoteDictionaryResource);
/// <summary>Makes a deep copy of the interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
/// <remarks>The owner of the new interface is <c>NULL</c>.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcanvas-clone HRESULT Clone(
// IXpsOMCanvas **canvas );
IXpsOMCanvas Clone();
}
/// <summary>Provides an IStream interface to a color profile resource.</summary>
/// <remarks>The code example that follows illustrates how to create an instance of this interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcolorprofileresource
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "8a344300-c3fc-4225-bfa5-d5d33798a094")]
[ComImport, Guid("67BD7D69-1EEF-4BB1-B5E7-6F4F87BE8ABE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMColorProfileResource : IXpsOMResource
{
/// <summary>Gets the name that will be used when the part is serialized.</summary>
/// <returns>
/// A pointer to the IOpcPartUri interface that contains the part name. If the part name has not been set (by the SetPartName
/// method), a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-getpartname HRESULT
// GetPartName( IOpcPartUri **partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new IOpcPartUri GetPartName();
/// <summary>Sets the name that will be used when the part is serialized.</summary>
/// <param name="partUri">
/// A pointer to the IOpcPartUri interface that contains the name of this part. This parameter cannot be <c>NULL</c>.
/// </param>
/// <remarks>
/// IXpsOMPackageWriter will generate an error if it encounters an XPS document part whose name is the same as that of a part it
/// has previously serialized.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-setpartname HRESULT
// SetPartName( IOpcPartUri *partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetPartName([In] IOpcPartUri partUri);
/// <summary>Gets a new, read-only copy of the stream that is associated with this resource.</summary>
/// <returns>A new, read-only copy of the stream that is associated with this resource.</returns>
/// <remarks>
/// <para>
/// The IStream object returned by this method might return an error of E_PENDING, which indicates that the stream length has
/// not been determined yet. This behavior is different from that of a standard <c>IStream</c> object.
/// </para>
/// <para>
/// This method calls the stream's <c>Clone</c> method to create the stream returned in stream. As a result, the performance of
/// this method will depend on that of the stream's <c>Clone</c> method.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresource-getstream
// HRESULT GetStream( IStream **stream );
[MethodImpl(MethodImplOptions.InternalCall)]
IStream GetStream();
/// <summary>Sets the read-only stream to be associated with this resource.</summary>
/// <param name="sourceStream">The read-only stream to be associated with this resource.</param>
/// <param name="partName">The part name to be assigned to this resource.</param>
/// <remarks>
/// <para>
/// The calling method should treat this stream as a single-threaded apartment (STA) model object and not re-enter any of the
/// stream interface's methods.
/// </para>
/// <para>
/// Because GetStream gets a clone of the stream that is set by this method, the provided stream should have an efficient
/// cloning method. A stream with an inefficient cloning method will reduce the performance of <c>GetStream</c>.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresource-setcontent
// HRESULT SetContent( IStream *sourceStream, IOpcPartUri *partName );
[MethodImpl(MethodImplOptions.InternalCall)]
void SetContent([In] IStream sourceStream, [In] IOpcPartUri partName);
}
/// <summary>A collection of IXpsOMColorProfileResource interface pointers.</summary>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcolorprofileresourcecollection
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "cb9253f3-461e-47a3-820b-bb6bf5e30210")]
[ComImport, Guid("12759630-5FBA-4283-8F7D-CCA849809EDB"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMColorProfileResourceCollection
{
/// <summary>Gets the number of IXpsOMColorProfileResource interface pointers in the collection.</summary>
/// <returns>The number of IXpsOMColorProfileResource interface pointers in the collection.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-getcount
// HRESULT GetCount( UINT32 *count );
[MethodImpl(MethodImplOptions.InternalCall)]
uint GetCount();
/// <summary>Gets an IXpsOMColorProfileResource interface pointer from a specified location in the collection.</summary>
/// <param name="index">The zero-based index of the IXpsOMColorProfileResource interface pointer to be obtained.</param>
/// <returns>The IXpsOMColorProfileResource interface pointer at the location specified by index.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-getat
// HRESULT GetAt( UINT32 index, IXpsOMColorProfileResource **object );
[MethodImpl(MethodImplOptions.InternalCall)]
IXpsOMColorProfileResource GetAt([In] uint index);
/// <summary>Inserts an IXpsOMColorProfileResource interface pointer at a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection where the interface pointer that is passed in object is to be inserted.
/// </param>
/// <param name="object">
/// The IXpsOMColorProfileResource interface pointer that is to be inserted in the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method inserts the IXpsOMColorProfileResource interface pointer that is passed in
/// object. Prior to the insertion, the pointer in this and all subsequent locations is moved up by one index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-insertat
// HRESULT InsertAt( UINT32 index, IXpsOMColorProfileResource *object );
[MethodImpl(MethodImplOptions.InternalCall)]
void InsertAt([In] uint index, [In] IXpsOMColorProfileResource @object);
/// <summary>Removes and releases an IXpsOMColorProfileResource interface pointer from a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection from which an IXpsOMColorProfileResource interface pointer is to be removed and released.
/// </param>
/// <remarks>
/// <para>
/// This method releases the interface referenced by the pointer at the location specified by index. After releasing the
/// interface, this method compacts the collection by reducing by 1 the index of each pointer subsequent to index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-removeat
// HRESULT RemoveAt( UINT32 index );
[MethodImpl(MethodImplOptions.InternalCall)]
void RemoveAt([In] uint index);
/// <summary>Replaces an IXpsOMColorProfileResource interface pointer at a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection where an IXpsOMColorProfileResource interface pointer is to be replaced.
/// </param>
/// <param name="object">
/// The IXpsOMColorProfileResource interface pointer that will replace current contents at the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method releases the IXpsOMColorProfileResource interface referenced by the existing
/// pointer, then writes the pointer that is passed in object.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-setat
// HRESULT SetAt( UINT32 index, IXpsOMColorProfileResource *object );
[MethodImpl(MethodImplOptions.InternalCall)]
void SetAt([In] uint index, [In] IXpsOMColorProfileResource @object);
/// <summary>Appends an IXpsOMColorProfileResource interface pointer to the end of the collection.</summary>
/// <param name="object">A pointer to the IXpsOMColorProfileResource interface that is to be appended to the collection.</param>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-append
// HRESULT Append( IXpsOMColorProfileResource *object );
[MethodImpl(MethodImplOptions.InternalCall)]
void Append([In] IXpsOMColorProfileResource @object);
/// <summary>Gets an IXpsOMColorProfileResource interface pointer from the collection by matching the interface's part name.</summary>
/// <param name="partName">The part name of the IXpsOMColorProfileResource interface to be found in the collection.</param>
/// <returns>
/// A pointer to the IXpsOMColorProfileResource interface whose part name matches partName. If a matching interface is not found
/// in the collection, a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomcolorprofileresourcecollection-getbypartname
// HRESULT GetByPartName( IOpcPartUri *partName, IXpsOMColorProfileResource **part );
[MethodImpl(MethodImplOptions.InternalCall)]
IXpsOMColorProfileResource GetByPartName([In] IOpcPartUri partName);
}
/// <summary>A collection of XPS_DASH structures.</summary>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomdashcollection
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "02a152a1-e117-42fb-8428-a2b28e6540a9")]
[ComImport, Guid("081613F4-74EB-48F2-83B3-37A9CE2D7DC6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMDashCollection
{
/// <summary>Gets the number of XPS_DASH structures in the collection.</summary>
/// <returns>The number of XPS_DASH structures in the collection.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdashcollection-getcount HRESULT
// GetCount( UINT32 *count );
uint GetCount();
/// <summary>Gets an XPS_DASH structure from a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection where an XPS_DASH structure is to be obtained.</param>
/// <returns>The XPS_DASH structure that is found at the location specified by index.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdashcollection-getat HRESULT GetAt(
// UINT32 index, XPS_DASH *dash );
XPS_DASH GetAt([In] uint index);
/// <summary>Inserts an XPS_DASH structure at a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection where the structure that is referenced by dash is to be inserted.</param>
/// <param name="dash">A pointer to the XPS_DASH structure that is to be inserted at the location specified by index.</param>
/// <remarks>
/// <para>
/// At the location specified by index, this method inserts the XPS_DASH structure that is passed in dash. Prior to insertion,
/// the structure in this and all subsequent locations is moved up by one index.
/// </para>
/// <para>The figure that follows illustrates how the collection is changed by the <c>InsertAt</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdashcollection-insertat HRESULT
// InsertAt( UINT32 index, const XPS_DASH *dash );
void InsertAt([In] uint index, in XPS_DASH dash);
/// <summary>Removes and frees an XPS_DASH structure from a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection from which an XPS_DASH structure is to be removed and freed.</param>
/// <remarks>
/// <para>
/// This method removes and frees the XPS_DASH structure referenced by the pointer at the location specified by index. After
/// freeing the structure, this method compacts the collection by reducing by 1 the index of each pointer subsequent to index.
/// </para>
/// <para>The figure that follows illustrates how the collection is changed by the <c>RemoveAt</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdashcollection-removeat HRESULT
// RemoveAt( UINT32 index );
void RemoveAt([In] uint index);
/// <summary>Replaces an XPS_DASH structure at a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection where an XPS_DASH structure is to be replaced.</param>
/// <param name="dash">
/// A pointer to the XPS_DASH structure that will replace the current contents at the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method frees the existing XPS_DASH structure then replaces it with the structure
/// that is passed in dash.
/// </para>
/// <para>The figure that follows illustrates how the collection is changed by the <c>SetAt</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdashcollection-setat HRESULT SetAt(
// UINT32 index, const XPS_DASH *dash );
void SetAt([In] uint index, in XPS_DASH dash);
/// <summary>Appends an XPS_DASH structure to the end of the collection.</summary>
/// <param name="dash">A pointer to the XPS_DASH structure that is to be appended to the collection.</param>
/// <remarks>The figure that follows illustrates how the collection is changed by the <c>Append</c> method.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdashcollection-append HRESULT
// Append( const XPS_DASH *dash );
void Append(in XPS_DASH dash);
}
/// <summary>The dictionary is used by an XPS package to share resources.</summary>
/// <remarks>
/// <para>
/// The interface pointers stored in a dictionary will usually point to interfaces, such as IXpsOMBrush and IXpsOMVisual, that are
/// derived from the IXpsOMShareable interface. To determine the interface type, call the IXpsOMShareable::GetType method.
/// </para>
/// <para>A dictionary cannot contain duplicate interface pointers.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomdictionary
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "f887e3d3-973c-4267-a785-6bc190c13082")]
[ComImport, Guid("897C86B8-8EAF-4AE3-BDDE-56419FCF4236"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMDictionary
{
/// <summary>Gets a pointer to the interface that contains the dictionary.</summary>
/// <returns>The <c>IUnknown</c> interface of the interface that contains the dictionary.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
object GetOwner();
/// <summary>Gets the number of entries in the dictionary.</summary>
/// <returns>The number of entries in the dictionary.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-getcount HRESULT
// GetCount( UINT32 *count );
uint GetCount();
/// <summary>
/// Gets the IXpsOMShareable interface pointer and the key name string of the entry at a specified index in the dictionary.
/// </summary>
/// <param name="index">The zero-based index of the dictionary entry that is to be obtained.</param>
/// <param name="key">The key string that is found at the location specified by index.</param>
/// <returns>The IXpsOMShareable interface pointer that is found at the location specified by index.</returns>
/// <remarks>
/// <para>
/// The interface pointers that are stored in a dictionary will usually point to interfaces, such as IXpsOMBrush and
/// IXpsOMVisual, that are derived from the IXpsOMShareable interface. To determine the interface type, call the
/// IXpsOMShareable::GetType method.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-getat HRESULT GetAt(
// UINT32 index, LPWSTR *key, IXpsOMShareable **entry );
IXpsOMShareable GetAt([In] uint index, [MarshalAs(UnmanagedType.LPWStr)] out string key);
/// <summary>Gets the IXpsOMShareable interface pointer of the entry that contains the specified key.</summary>
/// <param name="key">The entry's key to be found in the dictionary.</param>
/// <param name="beforeEntry">
/// The IXpsOMShareable interface pointer to the last entry in the dictionary which is to be searched for key. If beforeEntry is
/// <c>NULL</c> or is an interface pointer to an entry that is not in the dictionary, the entire dictionary will be searched.
/// </param>
/// <returns>The interface pointer to the dictionary entry whose key matches key.</returns>
/// <remarks>
/// The interface pointers stored in a dictionary will usually point to interfaces, such as IXpsOMBrush and IXpsOMVisual, that
/// are derived from the IXpsOMShareable interface. To determine the interface type, call the IXpsOMShareable::GetType method.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-getbykey HRESULT
// GetByKey( LPCWSTR key, IXpsOMShareable *beforeEntry, IXpsOMShareable **entry );
IXpsOMShareable GetByKey([In, MarshalAs(UnmanagedType.LPWStr)] string key, [In] IXpsOMShareable beforeEntry);
/// <summary>Gets the index of an IXpsOMShareable interface from the dictionary.</summary>
/// <param name="entry">The IXpsOMShareable interface pointer to be found in the dictionary.</param>
/// <returns>The zero-based index of entry in the dictionary.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-getindex HRESULT
// GetIndex( IXpsOMShareable *entry, UINT32 *index );
uint GetIndex([In] IXpsOMShareable entry);
/// <summary>Appends an IXpsOMShareable interface along with its key to the end of the dictionary.</summary>
/// <param name="key">
/// <para>The key to be used for this entry.</para>
/// <para>The string referenced by key must be unique in the dictionary.</para>
/// </param>
/// <param name="entry">
/// <para>A pointer to the IXpsOMShareable interface that is to be appended to the dictionary.</para>
/// <para>
/// A dictionary cannot contain duplicate interface pointers. This parameter must contain an interface pointer that is not
/// already in the dictionary.
/// </para>
/// </param>
/// <remarks>
/// <para>
/// The interface pointers stored in a dictionary will usually point to interfaces, such as IXpsOMBrush and IXpsOMVisual, that
/// are derived from the IXpsOMShareable interface. To determine the interface type, call the IXpsOMShareable::GetType method.
/// </para>
/// <para>The figure that follows illustrates how the dictionary is changed by the <c>Append</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-append HRESULT Append(
// LPCWSTR key, IXpsOMShareable *entry );
void Append([In, MarshalAs(UnmanagedType.LPWStr)] string key, [In] IXpsOMShareable entry);
/// <summary>
/// Inserts an IXpsOMShareable interface at a specified location in the dictionary and sets the key to identify the interface.
/// </summary>
/// <param name="index">The zero-based index in the dictionary where the IXpsOMShareable interface is to be inserted.</param>
/// <param name="key">
/// <para>The key to be used to identify the IXpsOMShareable interface in the dictionary.</para>
/// <para>The string referenced by key must be unique in the dictionary.</para>
/// </param>
/// <param name="entry">
/// <para>The IXpsOMShareable interface pointer to be inserted at the location specified by index.</para>
/// <para>
/// A dictionary cannot contain duplicate interface pointers. This parameter must contain an interface pointer that is not
/// already in the dictionary.
/// </para>
/// </param>
/// <remarks>
/// <para>
/// The interface pointers stored in the dictionary will usually be pointers to interfaces, such as IXpsOMBrush and
/// IXpsOMVisual, that are derived from the IXpsOMShareable interface. To determine the interface type, call the
/// IXpsOMShareable::GetType method.
/// </para>
/// <para>
/// At the location specified by index, this method inserts the IXpsOMShareable interface pointer and sets the key; the
/// interface pointer and key are passed in value and key, respectively. Before value and key are inserted, the interface
/// pointer and the key at this and all subsequent locations are moved up by one index.
/// </para>
/// <para>The figure that follows illustrates how the dictionary is changed by the <c>InsertAt</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-insertat HRESULT
// InsertAt( UINT32 index, LPCWSTR key, IXpsOMShareable *entry );
void InsertAt([In] uint index, [In, MarshalAs(UnmanagedType.LPWStr)] string key, [In] IXpsOMShareable entry);
/// <summary>Removes and releases the entry from a specified location in the dictionary.</summary>
/// <param name="index">The zero-based index in the dictionary from which an entry is to be removed and released.</param>
/// <remarks>
/// <para>
/// At the location specified by index, this method releases the interface referenced by the pointer. After releasing the
/// interface, this method compacts the dictionary by reducing by 1 the index of each pointer subsequent to index.
/// </para>
/// <para>The figure that follows illustrates how the dictionary is changed by the <c>RemoveAt</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-removeat HRESULT
// RemoveAt( UINT32 index );
void RemoveAt([In] uint index);
/// <summary>Replaces the entry at a specified location in the dictionary.</summary>
/// <param name="index">The zero-based index in the dictionary in which an entry is to be replaced.</param>
/// <param name="key">
/// <para>The key to be used for the new entry.</para>
/// <para>The string referenced by key must be unique in the dictionary.</para>
/// </param>
/// <param name="entry">
/// <para>The IXpsOMShareable interface pointer that will replace current contents at the location specified by index.</para>
/// <para>
/// A dictionary cannot contain duplicate interface pointers. This parameter must contain an interface pointer that is not
/// already in the dictionary.
/// </para>
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method releases the IXpsOMShareable interface referenced by the existing pointer,
/// then replaces it with the interface pointer that is passed in entry and assigns it the key passed in key.
/// </para>
/// <para>
/// The interface pointers stored in a dictionary will usually point to interfaces, such as IXpsOMBrush and IXpsOMVisual, that
/// are derived from the IXpsOMShareable interface. To determine the interface type, call the GetType method.
/// </para>
/// <para>The figure that follows illustrates how the dictionary is changed by the <c>SetAt</c> method.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-setat HRESULT SetAt(
// UINT32 index, LPCWSTR key, IXpsOMShareable *entry );
void SetAt([In] uint index, [In, MarshalAs(UnmanagedType.LPWStr)] string key, [In] IXpsOMShareable entry);
/// <summary>Makes a deep copy of the interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdictionary-clone HRESULT Clone(
// IXpsOMDictionary **dictionary );
IXpsOMDictionary Clone();
}
2020-03-01 20:59:39 -05:00
/// <summary>
/// Provides access to the XML content of the resource stream of the DocumentStructure part.The
/// <c>IXpsOMDocumentStructureResource</c> interface enables a program to read and replace the XML content of the DocumentStructure part.
/// </summary>
/// <remarks>
/// <para>
/// The DocumentStructure part of an XPS document contains the document outline, which, along with the StoryFragments parts, defines
/// the reading order of every element that appears in the fixed pages of the document.
/// </para>
/// <para>
/// The reading order of an XPS document is organized into semantic blocks called stories. Stories are logical units of the
/// document, in the same way that articles are units in a magazine. Stories are made up of one or more StoryFragments parts;
/// StoryFragments parts contain the XML markup that defines the story's semantic blocks, which describe the structure of the
/// document's content. Examples of a story's semantic blocks include paragraphs and tables.
/// </para>
/// <para>The XML markup in the DocumentStructure and StoryFragments parts is described in the XML Paper Specification.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomdocumentstructureresource
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "a0cc8748-08b2-4471-9961-603786e983a4")]
[ComImport, Guid("85FEBC8A-6B63-48A9-AF07-7064E4ECFF30"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMDocumentStructureResource : IXpsOMResource
{
/// <summary>Gets the name that will be used when the part is serialized.</summary>
/// <returns>
/// A pointer to the IOpcPartUri interface that contains the part name. If the part name has not been set (by the SetPartName
/// method), a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-getpartname HRESULT
// GetPartName( IOpcPartUri **partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new IOpcPartUri GetPartName();
/// <summary>Sets the name that will be used when the part is serialized.</summary>
/// <param name="partUri">
/// A pointer to the IOpcPartUri interface that contains the name of this part. This parameter cannot be <c>NULL</c>.
/// </param>
/// <remarks>
/// IXpsOMPackageWriter will generate an error if it encounters an XPS document part whose name is the same as that of a part it
/// has previously serialized.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-setpartname HRESULT
// SetPartName( IOpcPartUri *partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetPartName([In] IOpcPartUri partUri);
/// <summary>Gets a pointer to the IXpsOMDocument interface that contains the resource.</summary>
/// <returns>
/// A pointer to the IXpsOMDocument interface that contains the resource. If the resource is not part of a document, a NULL
/// pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdocumentstructureresource-getowner
[MethodImpl(MethodImplOptions.InternalCall)]
IXpsOMDocument GetOwner();
/// <summary>Gets a new, read-only copy of the stream that is associated with this resource.</summary>
/// <returns>A new, read-only copy of the stream that is associated with this resource.</returns>
/// <remarks>
/// <para>
/// The IStream object returned by this method might return an error of E_PENDING, which indicates that the stream length has
/// not been determined yet. This behavior is different from that of a standard <c>IStream</c> object.
/// </para>
/// <para>For more information about the content of DocumentStructure part, see the XML Paper Specification.</para>
/// <para>
/// This method calls the stream's <c>Clone</c> method to create the stream returned in stream. As a result, the performance of
/// this method will depend on that of the stream's <c>Clone</c> method.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdocumentstructureresource-getstream
// HRESULT GetStream( IStream **stream );
[MethodImpl(MethodImplOptions.InternalCall)]
IStream GetStream();
/// <summary>Sets the read-only stream to be associated with this resource.</summary>
/// <param name="sourceStream">The read-only stream to be associated with this resource.</param>
/// <param name="partName">The part name to be assigned to this resource.</param>
/// <remarks>
/// <para>
/// The calling method should treat this stream as a single-threaded apartment (STA) model object and not re-enter any of the
/// stream interface's methods.
/// </para>
/// <para>For more information about the content of DocumentStructure part, see the XML Paper Specification.</para>
/// <para>
/// Because GetStream gets a clone of the stream that is set by this method, the provided stream should have an efficient
/// cloning method. A stream with an inefficient cloning method will reduce the performance of <c>GetStream</c>.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomdocumentstructureresource-setcontent
// HRESULT SetContent( IStream *sourceStream, IOpcPartUri *partName );
[MethodImpl(MethodImplOptions.InternalCall)]
void SetContent([In] IStream sourceStream, [In] IOpcPartUri partName);
}
/// <summary>Provides an IStream interface to a font resource.</summary>
/// <remarks>The code example that follows illustrates how to create an instance of this interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomfontresource
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "dd0ce1c0-1c04-46a8-9075-93de9b3e3062")]
[ComImport, Guid("A8C45708-47D9-4AF4-8D20-33B48C9B8485"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMFontResource : IXpsOMResource
{
/// <summary>Gets the name that will be used when the part is serialized.</summary>
/// <returns>
/// A pointer to the IOpcPartUri interface that contains the part name. If the part name has not been set (by the SetPartName
/// method), a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-getpartname HRESULT
// GetPartName( IOpcPartUri **partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new IOpcPartUri GetPartName();
/// <summary>Sets the name that will be used when the part is serialized.</summary>
/// <param name="partUri">
/// A pointer to the IOpcPartUri interface that contains the name of this part. This parameter cannot be <c>NULL</c>.
/// </param>
/// <remarks>
/// IXpsOMPackageWriter will generate an error if it encounters an XPS document part whose name is the same as that of a part it
/// has previously serialized.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-setpartname HRESULT
// SetPartName( IOpcPartUri *partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetPartName([In] IOpcPartUri partUri);
/// <summary>Gets a new, read-only copy of the stream that is associated with this resource.</summary>
/// <returns>A new, read-only copy of the stream that is associated with this resource.</returns>
/// <remarks>
/// <para>
/// The IStream object returned by this method might return an error of E_PENDING, which indicates that the stream length has
/// not been determined yet. This behavior is different from that of a standard <c>IStream</c> object.
/// </para>
/// <para>
/// This method calls the stream's <c>Clone</c> method to create the stream returned in stream. As a result, the performance of
/// this method will depend on that of the stream's <c>Clone</c> method.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresource-getstream HRESULT
// GetStream( IStream **readerStream );
[MethodImpl(MethodImplOptions.InternalCall)]
IStream GetStream();
/// <summary>Sets the read-only stream to be associated with this resource.</summary>
/// <param name="sourceStream">The read-only stream to be associated with this resource.</param>
/// <param name="embeddingOption">
/// <para>The XPS_FONT_EMBEDDING value that describes how the resource is to be obfuscated.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>XPS_FONT_EMBEDDING_NORMAL</term>
/// <term>Font resource is neither obfuscated nor restricted.</term>
/// </item>
/// <item>
/// <term>XPS_FONT_EMBEDDING_OBFUSCATED</term>
/// <term>Font resource is obfuscated but not restricted.</term>
/// </item>
/// <item>
/// <term>XPS_FONT_EMBEDDING_RESTRICTED</term>
/// <term>Font resource is both obfuscated and restricted.</term>
/// </item>
/// </list>
/// </param>
/// <param name="partName">The part name to be assigned to this resource.</param>
/// <remarks>
/// <para>
/// The calling method should treat this stream as a single-threaded apartment (STA) model object and not re-enter any of the
/// stream interface's methods.
/// </para>
/// <para>
/// The stream assigned to this resource should not be obfuscated. Obfuscation of the font resource takes place during serialization.
/// </para>
/// <para>
/// Providing an obfuscated font stream while setting the embeddingOption to XPS_FONT_EMBEDDING_OBFUSCATED will result in a font
/// that is not obfuscated in the serialized XPS document.
/// </para>
/// <para>
/// partName resets the part name for this object and is checked against the value of embeddingOption for the proper obfuscation syntax.
/// </para>
/// <para>
/// Because GetStream gets a clone of the stream that is set by this method, the provided stream should have an efficient
/// cloning method. A stream with an inefficient cloning method will reduce the performance of <c>GetStream</c>.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresource-setcontent HRESULT
// SetContent( IStream *sourceStream, XPS_FONT_EMBEDDING embeddingOption, IOpcPartUri *partName );
[MethodImpl(MethodImplOptions.InternalCall)]
void SetContent([In] IStream sourceStream, [In] XPS_FONT_EMBEDDING embeddingOption, [In] IOpcPartUri partName);
/// <summary>Gets the embedding option that will be applied when the resource is serialized.</summary>
/// <returns>
/// <para>The stream's embedding option.</para>
/// <para>
/// The XPS_FONT_EMBEDDING value describes how the resource is obfuscated. The following possible values are returned in this parameter:
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>XPS_FONT_EMBEDDING_NORMAL</term>
/// <term>Font resource is neither obfuscated nor restricted.</term>
/// </item>
/// <item>
/// <term>XPS_FONT_EMBEDDING_OBFUSCATED</term>
/// <term>Font resource is obfuscated but not restricted.</term>
/// </item>
/// <item>
/// <term>XPS_FONT_EMBEDDING_RESTRICTED</term>
/// <term>Font resource is both obfuscated and restricted.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresource-getembeddingoption
// HRESULT GetEmbeddingOption( XPS_FONT_EMBEDDING *embeddingOption );
[MethodImpl(MethodImplOptions.InternalCall)]
XPS_FONT_EMBEDDING GetEmbeddingOption();
}
/// <summary>A collection of IXpsOMFontResource interface pointers.</summary>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomfontresourcecollection
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "71153c4c-631b-4f7a-9dd5-8537dcaca150")]
[ComImport, Guid("70B4A6BB-88D4-4FA8-AAF9-6D9C596FDBAD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMFontResourceCollection
{
/// <summary>Gets the number of IXpsOMFontResource interface pointers in the collection.</summary>
/// <returns>The number of IXpsOMFontResource interface pointers in the collection.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-getcount
// HRESULT GetCount( UINT32 *count );
[MethodImpl(MethodImplOptions.InternalCall)]
uint GetCount();
/// <summary>Gets an IXpsOMFontResource interface pointer from a specified location in the collection.</summary>
/// <param name="index">The zero-based index of the IXpsOMFontResource interface pointer to be obtained.</param>
/// <returns>The IXpsOMFontResource interface pointer at the location specified by index.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-getat
// HRESULT GetAt( UINT32 index, IXpsOMFontResource **value );
[MethodImpl(MethodImplOptions.InternalCall)]
IXpsOMFontResource GetAt([In] uint index);
/// <summary>Replaces an IXpsOMFontResource interface pointer at a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection where an IXpsOMFontResource interface pointer is to be replaced.</param>
/// <param name="value">
/// The IXpsOMFontResource interface pointer that will replace current contents at the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method releases the IXpsOMFontResource interface referenced by the existing
/// pointer, then writes the pointer that is passed in value.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-setat
// HRESULT SetAt( UINT32 index, IXpsOMFontResource *value );
[MethodImpl(MethodImplOptions.InternalCall)]
void SetAt([In] uint index, [In] IXpsOMFontResource value);
/// <summary>Inserts an IXpsOMFontResource interface pointer at a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection where the interface pointer that is passed in value is to be inserted.
/// </param>
/// <param name="value">The IXpsOMFontResource interface pointer that is to be inserted at the location specified by index.</param>
/// <remarks>
/// <para>
/// At the location specified by index, this method inserts the IXpsOMFontResource interface pointer that is passed in value.
/// Prior to the insertion, the pointer in this and all subsequent locations is moved up by one index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-insertat
// HRESULT InsertAt( UINT32 index, IXpsOMFontResource *value );
[MethodImpl(MethodImplOptions.InternalCall)]
void InsertAt([In] uint index, [In] IXpsOMFontResource value);
/// <summary>Appends an IXpsOMFontResource interface to the end of the collection.</summary>
/// <param name="value">A pointer to the IXpsOMFontResource interface that is to be appended to the collection.</param>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-append
// HRESULT Append( IXpsOMFontResource *value );
[MethodImpl(MethodImplOptions.InternalCall)]
void Append([In] IXpsOMFontResource value);
/// <summary>Removes and releases an IXpsOMFontResource interface pointer from a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection from which an IXpsOMFontResource interface pointer is to be removed and released.
/// </param>
/// <remarks>
/// <para>
/// This method releases the interface referenced by the pointer at the location specified by index. After releasing the
/// interface, this method compacts the collection by reducing by 1 the index of each pointer subsequent to index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-removeat
// HRESULT RemoveAt( UINT32 index );
[MethodImpl(MethodImplOptions.InternalCall)]
void RemoveAt([In] uint index);
/// <summary>Gets an IXpsOMFontResource interface pointer from the collection by matching the interface's part name.</summary>
/// <param name="partName">The part name of the IXpsOMFontResource interface to be found in the collection.</param>
/// <returns>
/// A pointer to the IXpsOMFontResource interface that has the matching part name. If a matching interface is not found in the
/// collection, a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomfontresourcecollection-getbypartname
// HRESULT GetByPartName( IOpcPartUri *partName, IXpsOMFontResource **part );
[MethodImpl(MethodImplOptions.InternalCall)]
IXpsOMFontResource GetByPartName([In] IOpcPartUri partName);
}
/// <summary>Describes the shape of a path or of a clipping region.</summary>
/// <remarks>The code example that follows illustrates how to create an instance of this interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomgeometry
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "d3f74c1e-49ef-40ee-a2f4-b6d198b57624")]
[ComImport, Guid("64FCF3D7-4D58-44BA-AD73-A13AF6492072"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGeometry : IXpsOMShareable
{
/// <summary>Gets the <c>IUnknown</c> interface of the parent.</summary>
/// <returns>A pointer to the <c>IUnknown</c> interface of the parent.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
new object GetOwner();
/// <summary>Gets the object type of the interface.</summary>
/// <returns>The XPS_OBJECT_TYPE value that describes the interface that is derived from IXpsOMShareable.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-gettype HRESULT GetType(
// XPS_OBJECT_TYPE *type );
new XPS_OBJECT_TYPE GetType();
/// <summary>
/// Gets a pointer to the geometry's IXpsOMGeometryFigureCollection interface, which contains the collection of figures that
/// make up this geometry.
/// </summary>
/// <returns>A pointer to the IXpsOMGeometryFigureCollection interface.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-getfigures HRESULT
// GetFigures( IXpsOMGeometryFigureCollection **figures );
IXpsOMGeometryFigureCollection GetFigures();
/// <summary>Gets the XPS_FILL_RULE value that describes the fill rule to be used.</summary>
/// <returns>The XPS_FILL_RULE value that describes the fill rule to be used.</returns>
/// <remarks>
/// <para>For more information about how the file rule determines whether a point is inside the fill region, see XPS_FILL_RULE.</para>
/// <para>
/// The value that is returned in fillRule corresponds to the <c>FillRule</c> attribute of the <c>PathGeometry</c> element in
/// the document markup.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-getfillrule HRESULT
// GetFillRule( XPS_FILL_RULE *fillRule );
XPS_FILL_RULE GetFillRule();
/// <summary>Sets the XPS_FILL_RULE value that describes the fill rule to be used.</summary>
/// <param name="fillRule">The XPS_FILL_RULE value that describes the fill rule to be used.</param>
/// <remarks>
/// <para>For more information about how the file rule determines whether a point is inside the fill region, see XPS_FILL_RULE.</para>
/// <para>In the document markup, this value corresponds to the <c>FillRule</c> attribute of the <c>PathGeometry</c> element.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-setfillrule HRESULT
// SetFillRule( XPS_FILL_RULE fillRule );
void SetFillRule([In] XPS_FILL_RULE fillRule);
/// <summary>
/// Gets a pointer to the geometry's IXpsOMMatrixTransform interface, which contains the resolved matrix transform for the geometry.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the geometry's IXpsOMMatrixTransform interface, which contains the resolved matrix transform for the geometry.
/// If a matrix transform has not been set, a <c>NULL</c> pointer will be returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-gettransform HRESULT
// GetTransform( IXpsOMMatrixTransform **transform );
IXpsOMMatrixTransform GetTransform();
/// <summary>
/// Gets a pointer to the IXpsOMMatrixTransform interface that contains the local, unshared matrix transform for the geometry.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the local, unshared matrix transform for the geometry. A
/// <c>NULL</c> pointer is returned if a local matrix transform has not been set or a matrix transform lookup key has been set.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-gettransformlocal HRESULT
// GetTransformLocal( IXpsOMMatrixTransform **transform );
IXpsOMMatrixTransform GetTransformLocal();
/// <summary>Sets the local, unshared matrix transform.</summary>
/// <param name="transform">
/// A pointer to the IXpsOMMatrixTransform interface to be set as the local, unshared matrix transform for the geometry.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLocal</c>, the transform lookup key is released and GetTransformLookup returns a <c>NULL</c>
/// pointer in the lookup parameter. The table that follows explains the relationship between the local and lookup values of
/// this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in transform by GetTransformLocal</term>
/// <term>Object that is returned in lookup by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal (this method)</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-settransformlocal HRESULT
// SetTransformLocal( IXpsOMMatrixTransform *transform );
void SetTransformLocal([In] IXpsOMMatrixTransform transform);
/// <summary>
/// Gets the lookup key for the IXpsOMMatrixTransform interface that contains the resolved matrix transform for the geometry.
/// The matrix transform is stored in a resource dictionary.
/// </summary>
/// <returns>
/// <para>
/// The lookup key for the IXpsOMMatrixTransform interface in a resource dictionary. A <c>NULL</c> pointer is returned if a
/// matrix transform lookup key has not been set or if a local matrix transform has been set.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in lookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>The lookup key set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-gettransformlookup HRESULT
// GetTransformLookup( LPWSTR *lookup );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetTransformLookup();
/// <summary>Sets the lookup key name of a shared matrix transform in a resource dictionary.</summary>
/// <param name="lookup">The key name of the shared matrix transform in the resource dictionary.</param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLookup</c>, the local transform is released and GetTransformLocal returns a <c>NULL</c>
/// pointer in the transform parameter. The table that follows explains the relationship between the local and lookup values of
/// this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in transform by GetTransformLocal</term>
/// <term>Object that is returned in lookup by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup (this method)</term>
/// <term>
/// The shared transform retrieved, with a lookup key that matches the key set by SetTransformLookup, from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-settransformlookup HRESULT
// SetTransformLookup( LPCWSTR lookup );
void SetTransformLookup([In, MarshalAs(UnmanagedType.LPWStr)] string lookup);
/// <summary>Makes a deep copy of the interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometry-clone HRESULT Clone(
// IXpsOMGeometry **geometry );
IXpsOMGeometry Clone();
}
/// <summary>Describes one portion of the path or clipping region that is specified by an IXpsOMGeometry interface.</summary>
/// <remarks>
/// <para>The <c>IXpsOMGeometryFigure</c> corresponds to the <c>PathFigure</c> element in XPS markup.</para>
/// <para>The code example that follows illustrates how to create an instance of this interface.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomgeometryfigure
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "e76a14ce-cfc3-4a50-855e-f5779b9fc261")]
[ComImport, Guid("D410DC83-908C-443E-8947-B1795D3C165A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGeometryFigure
{
/// <summary>Gets a pointer to the IXpsOMGeometry interface that contains the geometry figure.</summary>
/// <returns>
/// A pointer to the IXpsOMGeometry interface that contains the geometry figure. If the interface is not assigned to a geometry,
/// a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getowner HRESULT
// GetOwner( IXpsOMGeometry **owner );
IXpsOMGeometry GetOwner();
/// <summary>Gets the segment data points for the geometry figure.</summary>
/// <param name="dataCount">
/// <para>The size of the array referenced by the segmentData parameter.</para>
/// <para>
/// If the method returns successfully, dataCount will contain the number of elements returned in the array that is referenced
/// by segmentData.
/// </para>
/// <para>If segmentData is set to <c>NULL</c> when the method is called, dataCount must be set to zero.</para>
/// <para>
/// If a <c>NULL</c> pointer is returned in segmentData, dataCount will contain the required buffer size as the number of elements.
/// </para>
/// </param>
/// <param name="segmentData">
/// <para>
/// The address of an array that has the same number of elements as specified in dataCount. This value can be set to <c>NULL</c>
/// if the caller requires that the method return only the required buffer size in dataCount.
/// </para>
/// <para>
/// If the array is large enough, this method copies the segment data points into the array and returns, in dataCount, the
/// number of data points that are copied. If segmentData is set to <c>NULL</c> or references a buffer that is not large enough,
/// a <c>NULL</c> pointer will be returned, no data will be copied, and dataCount will contain the required buffer size
/// specified as the number of elements.
/// </para>
/// </param>
/// <remarks>
/// <para>To determine the required size of the segment data array before calling this method, call GetSegmentDataCount.</para>
/// <para>
/// A geometry segment is described by the start point, the segment type, and additional parameters whose values are determined
/// by the segment type. The coordinates for the start point of the first segment are a property of the geometry figure and are
/// set by calling SetStartPoint. The start point of each subsequent segment is the end point of the preceding segment.
/// </para>
/// <para>
/// The values in the array returned in the segmentData parameter will correspond with the XPS_SEGMENT_TYPE values in the array
/// returned by the GetSegmentTypes method in the segmentTypes parameter. To read the segment data values correctly, you will
/// need to know the type of each segment in the geometry figure. For example, if the first line segment has a segment type
/// value of <c>XPS_SEGMENT_TYPE_LINE</c>, the first two data values in the segmentData array will be the x and y coordinates of
/// the end point of that segment; if the next segment has a segment type value of <c>XPS_SEGMENT_TYPE_BEZIER</c>, the next six
/// values in the segmentData array will describe the characteristics of that segment; and so on for each line segment in the
/// geometry figure.
/// </para>
/// <para>
/// The table that follows describes the specific set of data values that are returned for each segment type. For an example of
/// how to access this data in a program, see the code example that follows.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Segment type</term>
/// <term>Required data values</term>
/// </listheader>
/// <item>
/// <term>XPS_SEGMENT_TYPE_LINE</term>
/// <term>Two data values: x-coordinate of the segment line's end point. y-coordinate of the segment line's end point.</term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_LARGE_CLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_SMALL_CLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_LARGE_COUNTERCLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_SMALL_COUNTERCLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_BEZIER</term>
/// <term>
/// Six data values: x-coordinate of the Bezier curve's first control point. y-coordinate of the Bezier curve's first control
/// point. x-coordinate of the Bezier curve's second control point. y-coordinate of the Bezier curve's second control point.
/// x-coordinate of the Bezier curve's end point. y-coordinate of the Bezier curve's end point.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_QUADRATIC_BEZIER</term>
/// <term>
/// Four data values: x-coordinate of the Quad Bezier curve's control point. y-coordinate of the Quad Bezier curve's control
/// point. x-coordinate of the Quad Bezier curve's end point. y-coordinate of the Quad Bezier curve's end point.
/// </term>
/// </item>
/// </list>
/// <para>The following code example accesses the different data points of each segment type in a geometry figure.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getsegmentdata
// HRESULT GetSegmentData( UINT32 *dataCount, FLOAT *segmentData );
void GetSegmentData([In, Out] ref uint dataCount, [In, Out] float[] segmentData);
/// <summary>Gets the types of segments in the figure.</summary>
/// <param name="segmentCount">
/// <para>The size of the array that is referenced by segmentTypes (see below). This parameter must not be <c>NULL</c>.</para>
/// <para>
/// If the method returns successfully, segmentCount will contain the number of elements that are returned in the array
/// referenced by segmentTypes.
/// </para>
/// <para>If segmentTypes is <c>NULL</c> when the method is called, segmentCount must be set to zero.</para>
/// <para>
/// If a <c>NULL</c> pointer is returned in segmentTypes, the value of segmentCount will contain the required buffer size,
/// specified as the number of elements.
/// </para>
/// </param>
/// <param name="segmentTypes">
/// <para>
/// An array of XPS_SEGMENT_TYPE values that has the same number of elements as specified in segmentCount. If the caller
/// requires that only the specified buffer size be returned, set this value to <c>NULL</c>.
/// </para>
/// <para>
/// If the array is large enough, this method will copy the XPS_SEGMENT_TYPE values into the array and return, in segmentCount,
/// the number of the copied values. If segmentTypes is <c>NULL</c> or references a buffer that is not large enough, a
/// <c>NULL</c> pointer will be returned, no data will be copied, and segmentCount will contain the required buffer size, which
/// is specified as the number of elements.
/// </para>
/// </param>
/// <remarks>For an example of how to use this method in a program, see the code example in GetSegmentData.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getsegmenttypes
// HRESULT GetSegmentTypes( UINT32 *segmentCount, XPS_SEGMENT_TYPE *segmentTypes );
void GetSegmentTypes([In, Out] ref uint segmentCount, [In, Out] XPS_SEGMENT_TYPE[] segmentTypes);
/// <summary>Gets stroke definitions for the figure's segments.</summary>
/// <param name="segmentCount">
/// <para>The size of the array that is referenced by segmentStrokes. This parameter must not be <c>NULL</c>.</para>
/// <para>
/// If the method returns successfully, segmentCount will contain the number of elements that are returned in the array
/// referenced by segmentStrokes.
/// </para>
/// <para>If segmentStrokes is <c>NULL</c> when the method is called, segmentCount must be set to zero.</para>
/// <para>
/// If a <c>NULL</c> pointer is returned in segmentStrokes, the value of segmentCount will contain the required buffer size,
/// specified as the number of elements.
/// </para>
/// </param>
/// <param name="segmentStrokes">
/// <para>
/// An array that has the same number of elements as specified in segmentCount. If the caller requires that this method return
/// only the required buffer size, set this value to <c>NULL</c>.
/// </para>
/// <para>
/// If the array is large enough, this method copies the segment stroke values into the array and returns, in segmentCount, the
/// number of copied segment stroke values. If segmentData is <c>NULL</c> or references a buffer that is not large enough, a
/// <c>NULL</c> pointer will be returned, no data will be copied, and segmentCount will contain the required buffer size that is
/// specified as the number of elements.
/// </para>
/// <para>The following table shows the possible values of an element in the array that is referenced by segmentStrokes.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The segment is stroked.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The segment is not stroked.</term>
/// </item>
/// </list>
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getsegmentstrokes
// HRESULT GetSegmentStrokes( UINT32 *segmentCount, BOOL *segmentStrokes );
void GetSegmentStrokes([In, Out] ref uint segmentCount, [In, Out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Bool)] bool[] segmentStrokes);
/// <summary>Sets the segment information and data points for segments in the figure.</summary>
/// <param name="segmentCount">
/// <para>The number of segments.</para>
/// <para>This value is also the number of elements in the arrays that are referenced by segmentTypes and segmentStrokes.</para>
/// </param>
/// <param name="segmentDataCount">
/// <para>The number of segment data points.</para>
/// <para>This value is also the number of elements in the array that is referenced by segmentData.</para>
/// </param>
/// <param name="segmentTypes">
/// An array of XPS_SEGMENT_TYPE variables. The value of segmentCount specifies the number of elements in this array.
/// </param>
/// <param name="segmentData">
/// An array of segment data values. The value of segmentDataCount specifies the number of elements in this array.
/// </param>
/// <param name="segmentStrokes">
/// An array of segment stroke values. The value of segmentCount specifies the number of elements in this array.
/// </param>
/// <remarks>
/// <para>
/// A geometry segment is described by the start point, the segment type, and additional parameters whose values are determined
/// by the segment type. The coordinates for the start point of the first segment are a property of the geometry figure and are
/// set by calling SetStartPoint. The start point of each subsequent segment is the end point of the preceding segment.
/// </para>
/// <para>
/// The number of data values that define a line segment depends on the segment type. The table that follows describes the
/// specific set of required data values that must be used for each segment type. The values in the segment data array that is
/// passed in the segmentData parameter must correspond with the XPS_SEGMENT_TYPE values in the array that is passed in the
/// segmentTypes parameter. For example, if the first line segment has a segment type value of <c>XPS_SEGMENT_TYPE_LINE</c>, the
/// first two data values in the segmentData array will be the x and y coordinates of the end point of that segment; if the next
/// segment has a segment type value of <c>XPS_SEGMENT_TYPE_BEZIER</c>, the next six values in the segmentData array will
/// describe the characteristics of that segment; and so on for each line segment in the geometry figure.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Segment type</term>
/// <term>Required data values</term>
/// </listheader>
/// <item>
/// <term>XPS_SEGMENT_TYPE_LINE</term>
/// <term>Two data values: x-coordinate of the segment line's end point. y-coordinate of the segment line's end point.</term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_LARGE_CLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_SMALL_CLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_LARGE_COUNTERCLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_ARC_SMALL_COUNTERCLOCKWISE</term>
/// <term>
/// Five data values: x-coordinate of the arc's end point. y-coordinate of the arc's end point. Length of the ellipse's radius
/// along the x-axis. Length of the ellipse's radius along the y-axis. Rotation angle.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_BEZIER</term>
/// <term>
/// Six data values: x-coordinate of the Bezier curve's first control point. y-coordinate of the Bezier curve's first control
/// point. x-coordinate of the Bezier curve's second control point. y-coordinate of the Bezier curve's second control point.
/// x-coordinate of the Bezier curve's end point. y-coordinate of the Bezier curve's end point.
/// </term>
/// </item>
/// <item>
/// <term>XPS_SEGMENT_TYPE_QUADRATIC_BEZIER</term>
/// <term>
/// Four data values: x-coordinate of the Quad Bezier curve's control point. y-coordinate of the Quad Bezier curve's control
/// point. x-coordinate of the Quad Bezier curve's end point. y-coordinate of the Quad Bezier curve's end point.
/// </term>
/// </item>
/// </list>
/// <para>To get the segment types in the figure, call GetSegmentTypes.</para>
/// <para>The following code examples demonstrate one way to create and populate the buffers required by <c>SetSegments</c>.</para>
/// <para>
/// In the first code example, the <c>AddSegmentDataToArrays</c> method takes the data points that describe a single segment and
/// stores them in the three different data buffers required by the <c>SetSegments</c> method. The data buffers that are passed
/// as arguments to <c>AddSegmentDataToArrays</c> are managed by the calling method as shown in the code example that follows <c>AddSegmentDataToArrays</c>.
/// </para>
/// <para>
/// In this code example, <c>UpdateSegmentData</c> creates the data buffers required by the <c>SetSegments</c> method and calls
/// the <c>AddSegmentDataToArrays</c> method from the preceding code example to populate them with the segment data. After the
/// buffers have been populated, <c>SetSegments</c> is called to add this data to the geometry figure.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-setsegments HRESULT
// SetSegments( UINT32 segmentCount, UINT32 segmentDataCount, const XPS_SEGMENT_TYPE *segmentTypes, const FLOAT *segmentData,
// const BOOL *segmentStrokes );
void SetSegments([In] uint segmentCount, [In] uint segmentDataCount, [In] XPS_SEGMENT_TYPE[] segmentTypes, [In] float[] segmentData, [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Bool)] bool[] segmentStrokes);
/// <summary>Gets the starting point of the figure.</summary>
/// <returns>The coordinates of the starting point of the figure.</returns>
/// <remarks>
/// In the document markup, the value returned in startPoint corresponds to that of the <c>StartPoint</c> attribute of the
/// <c>PathFigure</c> element.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getstartpoint
// HRESULT GetStartPoint( XPS_POINT *startPoint );
XPS_POINT GetStartPoint();
/// <summary>Sets the starting point of the figure.</summary>
/// <param name="startPoint">The coordinates of the starting point of the figure.</param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-setstartpoint
// HRESULT SetStartPoint( const XPS_POINT *startPoint );
void SetStartPoint(in XPS_POINT startPoint);
/// <summary>Gets a value that indicates whether the figure is closed.</summary>
/// <returns>
/// <para>The Boolean value that indicates whether the figure is closed.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>
/// The figure is closed. The line segment between the start and end points of the figure will be stroked to close the shape.
/// </term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The figure is open. No line segment will be stroked between the start and end points of the figure.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>This value only applies if the <c>PathFigure</c> attribute is used in the <c>Path</c> element that specifies a stroke.</para>
/// <para>A closed figure adds a line segment between the start point and the end point of the figure to close the shape.</para>
/// <para>This value corresponds to that of the <c>IsClosed</c> element of the <c>PathFigure</c> element in the document markup.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getisclosed HRESULT
// GetIsClosed( BOOL *isClosed );
[return: MarshalAs(UnmanagedType.Bool)]
bool GetIsClosed();
/// <summary>Sets a value that indicates whether the figure is closed.</summary>
/// <param name="isClosed">
/// <para>The value to be set.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The figure is closed. A line segment between the start point and the last point defined in the figure will be stroked.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The figure is open. There is no line segment between the start point and the last point defined in the figure.</term>
/// </item>
/// </list>
/// </param>
/// <remarks>
/// <para>This value only applies if the <c>PathFigure</c> attribute is used in the <c>Path</c> element that specifies a stroke.</para>
/// <para>A closed figure adds a line segment between the start point and the end point of the figure to close the shape.</para>
/// <para>This value corresponds to that of the <c>IsClosed</c> element of the <c>PathFigure</c> element in the document markup.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-setisclosed HRESULT
// SetIsClosed( BOOL isClosed );
void SetIsClosed([In, MarshalAs(UnmanagedType.Bool)] bool isClosed);
/// <summary>Gets a value that indicates whether the figure is filled.</summary>
/// <returns>
/// <para>The Boolean value that indicates whether the figure is filled.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The figure is filled by a brush.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The figure is not filled.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// This value corresponds to that of the <c>IsFilled</c> attribute of the <c>PathFigure</c> element in the document markup.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getisfilled HRESULT
// GetIsFilled( BOOL *isFilled );
[return: MarshalAs(UnmanagedType.Bool)]
bool GetIsFilled();
/// <summary>Sets a value that indicates whether the figure is filled.</summary>
/// <param name="isFilled">
/// <para>The value to be set.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The figure is filled by a brush.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The figure is not filled.</term>
/// </item>
/// </list>
/// </param>
/// <remarks>
/// In the document markup, the value returned in isFilled corresponds to that of the <c>IsFilled</c> attribute of the
/// <c>PathFigure</c> element.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-setisfilled HRESULT
// SetIsFilled( BOOL isFilled );
void SetIsFilled([In, MarshalAs(UnmanagedType.Bool)] bool isFilled);
/// <summary>Gets the number of segments in the figure.</summary>
/// <returns>The number of segments in the figure.</returns>
/// <remarks>For an example of how to use this method in a program, see the code example in GetSegmentData.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getsegmentcount
// HRESULT GetSegmentCount( UINT32 *segmentCount );
uint GetSegmentCount();
/// <summary>Gets the number of segment data points in the figure.</summary>
/// <returns>The number of segment data points. segmentDataCount must not be <c>NULL</c> when the method is called.</returns>
/// <remarks>
/// <para>To get the segment data points, call GetSegmentData.</para>
/// <para>For an example of how to use this method in a program, see the code example in GetSegmentData.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getsegmentdatacount
// HRESULT GetSegmentDataCount( UINT32 *segmentDataCount );
uint GetSegmentDataCount();
/// <summary>Gets the XPS_SEGMENT_STROKE_PATTERN value that indicates whether the segments in the figure are stroked.</summary>
/// <returns>The XPS_SEGMENT_STROKE_PATTERN value that indicates whether the segments in the figure are stroked.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-getsegmentstrokepattern
// HRESULT GetSegmentStrokePattern( XPS_SEGMENT_STROKE_PATTERN *segmentStrokePattern );
XPS_SEGMENT_STROKE_PATTERN GetSegmentStrokePattern();
/// <summary>Makes a deep copy of the interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
/// <remarks>The owner of the copy is <c>NULL</c>.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigure-clone HRESULT Clone(
// IXpsOMGeometryFigure **geometryFigure );
IXpsOMGeometryFigure Clone();
}
/// <summary>A collection of IXpsOMGeometryFigure interface pointers.</summary>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomgeometryfigurecollection
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "24ed79ff-9160-4e9b-b322-c538b30f113b")]
[ComImport, Guid("FD48C3F3-A58E-4B5A-8826-1DE54ABE72B2"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGeometryFigureCollection
{
/// <summary>Gets the number of IXpsOMGeometryFigure interface pointers in the collection.</summary>
/// <returns>The number of IXpsOMGeometryFigure interface pointers in the collection.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigurecollection-getcount
// HRESULT GetCount( UINT32 *count );
uint GetCount();
/// <summary>Gets an IXpsOMGeometryFigure interface pointer from a specified location in the collection.</summary>
/// <param name="index">The zero-based index of the IXpsOMGeometryFigure interface pointer to be obtained.</param>
/// <returns>The IXpsOMGeometryFigure interface pointer at the location specified by index.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigurecollection-getat
// HRESULT GetAt( UINT32 index, IXpsOMGeometryFigure **geometryFigure );
IXpsOMGeometryFigure GetAt([In] uint index);
/// <summary>Inserts an IXpsOMGeometryFigure interface pointer at a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection where the interface pointer that is passed in geometryFigure is to be inserted.
/// </param>
/// <param name="geometryFigure">
/// The IXpsOMGeometryFigure interface pointer that is to be inserted at the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method inserts the IXpsOMGeometryFigure interface pointer that is passed in
/// geometryFigure. Prior to the insertion, the pointer in this and all subsequent locations is moved up by one index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigurecollection-insertat
// HRESULT InsertAt( UINT32 index, IXpsOMGeometryFigure *geometryFigure );
void InsertAt([In] uint index, [In] IXpsOMGeometryFigure geometryFigure);
/// <summary>Removes and releases an IXpsOMGeometryFigure interface pointer from a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection from which an IXpsOMGeometryFigure interface pointer is to be removed and released.
/// </param>
/// <remarks>
/// <para>
/// This method releases the interface referenced by the pointer at the location specified by index. After releasing the
/// interface, this method compacts the collection by reducing by 1 the index of each pointer subsequent to index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigurecollection-removeat
// HRESULT RemoveAt( UINT32 index );
void RemoveAt([In] uint index);
/// <summary>Replaces an IXpsOMGeometryFigure interface pointer at a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection where an IXpsOMGeometryFigure interface pointer is to be replaced.</param>
/// <param name="geometryFigure">
/// The IXpsOMGeometryFigure interface pointer that will replace current contents at the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method releases the IXpsOMGeometryFigure interface referenced by the existing
/// pointer, then writes the pointer that is passed in geometryFigure.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigurecollection-setat
// HRESULT SetAt( UINT32 index, IXpsOMGeometryFigure *geometryFigure );
void SetAt([In] uint index, [In] IXpsOMGeometryFigure geometryFigure);
/// <summary>Appends an IXpsOMGeometryFigure interface to the end of the collection.</summary>
/// <param name="geometryFigure">A pointer to the IXpsOMGeometryFigure interface that is to be appended to the collection.</param>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgeometryfigurecollection-append
// HRESULT Append( IXpsOMGeometryFigure *geometryFigure );
void Append([In] IXpsOMGeometryFigure geometryFigure);
}
/// <summary>
/// <para>Describes the text that appears on a page.</para>
/// <para>The IXpsOMGlyphsEditor interface is used to modify the text that is described by this interface.</para>
/// </summary>
/// <remarks>The code example that follows illustrates how to create an instance of this interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomglyphs
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "6d2cda65-c719-46f2-97c9-8aee7b5f84b9")]
[ComImport, Guid("819B3199-0A5A-4B64-BEC7-A9E17E780DE2"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGlyphs : IXpsOMVisual
{
/// <summary>Gets the <c>IUnknown</c> interface of the parent.</summary>
/// <returns>A pointer to the <c>IUnknown</c> interface of the parent.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
new object GetOwner();
/// <summary>Gets the object type of the interface.</summary>
/// <returns>The XPS_OBJECT_TYPE value that describes the interface that is derived from IXpsOMShareable.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-gettype HRESULT GetType(
// XPS_OBJECT_TYPE *type );
new XPS_OBJECT_TYPE GetType();
/// <summary>Gets a pointer to the IXpsOMMatrixTransform interface that contains the visual's resolved matrix transform.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the visual's resolved matrix transform. If a matrix transform
/// has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in matrixTransform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform that gets retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the
/// resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gettransform HRESULT
// GetTransform( IXpsOMMatrixTransform **matrixTransform );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMMatrixTransform GetTransform();
/// <summary>
/// Gets a pointer to the IXpsOMMatrixTransform interface that contains the local, unshared, resolved matrix transform for the visual.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the local, unshared, resolved matrix transform for the
/// visual. If a matrix transform lookup key has not been set, or if a local matrix transform has been set, a <c>NULL</c>
/// pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in matrixTransform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gettransformlocal HRESULT
// GetTransformLocal( IXpsOMMatrixTransform **matrixTransform );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMMatrixTransform GetTransformLocal();
/// <summary>Sets the local, unshared matrix transform.</summary>
/// <param name="matrixTransform">
/// A pointer to the IXpsOMMatrixTransform interface to be set as the local, unshared matrix transform. A <c>NULL</c> pointer
/// releases the previously assigned transform.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLocal</c>, the transform lookup key is released and GetTransformLookup returns a <c>NULL</c>
/// pointer in the key parameter. The table that follows explains the relationship between the local and lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in matrixTransform by GetTransformLocal</term>
/// <term>Object that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal (this method)</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform that gets retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-settransformlocal HRESULT
// SetTransformLocal( IXpsOMMatrixTransform *matrixTransform );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetTransformLocal([In] IXpsOMMatrixTransform matrixTransform);
/// <summary>
/// Gets the lookup key name of the IXpsOMMatrixTransform interface in a resource dictionary that contains the resolved matrix
/// transform for the visual.
/// </summary>
/// <returns>
/// <para>
/// The lookup key name for the IXpsOMMatrixTransform interface in a resource dictionary that contains the resolved matrix
/// transform for the visual. If a matrix transform lookup key has not been set, or if a local matrix transform has been set, a
/// <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gettransformlookup HRESULT
// GetTransformLookup( LPWSTR *key );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetTransformLookup();
/// <summary>Sets the lookup key name of a shared matrix transform in a resource dictionary.</summary>
/// <param name="key">The lookup key name of the matrix transform in the dictionary.</param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLookup</c>, the local transform is released and GetTransformLocal returns a <c>NULL</c>
/// pointer in the matrixTransform parameter. The table that follows explains the relationship between the local and lookup
/// values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in matrixTransform by GetTransformLocal</term>
/// <term>Object that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup (this method)</term>
/// <term>
/// The shared transform that gets retrieved—with a lookup key that matches the key that is set by SetTransformLookup—from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-settransformlookup HRESULT
// SetTransformLookup( LPCWSTR key );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetTransformLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>
/// Gets a pointer to the IXpsOMGeometry interface that contains the resolved geometry of the visual's clipping region.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMGeometry interface that contains the resolved geometry of the visual's clipping region. If the clip
/// geometry has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the geometry.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>
/// The shared clip geometry that gets retrieved, with a lookup key that matches the key that is set by SetClipGeometryLookup,
/// from the resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLocal nor SetClipGeometryLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getclipgeometry HRESULT
// GetClipGeometry( IXpsOMGeometry **clipGeometry );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMGeometry GetClipGeometry();
/// <summary>
/// Gets a pointer to the IXpsOMGeometry interface that contains the local, unshared geometry of the visual's clipping region.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMGeometry interface that contains the local, unshared geometry of the visual's clipping region. If a
/// clip geometry lookup key has been set, or if a local clip geometry has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLocal nor SetClipGeometryLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getclipgeometrylocal HRESULT
// GetClipGeometryLocal( IXpsOMGeometry **clipGeometry );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMGeometry GetClipGeometryLocal();
/// <summary>Sets the local, unshared clipping region for the visual.</summary>
/// <param name="clipGeometry">
/// A pointer to the IXpsOMGeometry interface to be set as the local, unshared clipping region for the visual. A <c>NULL</c>
/// pointer releases the previously assigned geometry interface.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetClipGeometryLocal</c>, the clip geometry lookup key is released and GetClipGeometryLookup returns a
/// <c>NULL</c> pointer in the key parameter. The table that follows explains the relationship between the local and lookup
/// values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometry</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometryLocal</term>
/// <term>String that is returned in key by GetClipGeometryLookup</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal (this method)</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>
/// The shared clip geometry that gets retrieved, with a lookup key that matches the key that is set by SetClipGeometryLookup,
/// from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetClipGeometryLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLookup nor SetClipGeometryLocal has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setclipgeometrylocal HRESULT
// SetClipGeometryLocal( IXpsOMGeometry *clipGeometry );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetClipGeometryLocal([In] IXpsOMGeometry clipGeometry);
/// <summary>
/// Gets the lookup key for the IXpsOMGeometry interface in a resource dictionary that contains the visual's clipping region.
/// </summary>
/// <returns>
/// <para>
/// The lookup key for the IXpsOMGeometry interface in a resource dictionary that contains the visual's clipping region. If a
/// lookup key for the clip geometry has not been set, or if a local clip geometry has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Lookup key string that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup</term>
/// <term>The lookup key that is set by SetClipGeometryLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLocal nor SetClipGeometryLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getclipgeometrylookup
// HRESULT GetClipGeometryLookup( LPWSTR *key );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetClipGeometryLookup();
/// <summary>Sets the lookup key name of a shared clip geometry in a resource dictionary.</summary>
/// <param name="key">
/// The lookup key name of the clip geometry in the dictionary. A <c>NULL</c> pointer clears the previously assigned key name.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetClipGeometryLookup</c>, the local clip geometry is released and GetClipGeometryLocal returns a
/// <c>NULL</c> pointer in the clipGeometry parameter. The table that follows explains the relationship between the local and
/// lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometry</term>
/// <term>Object that is returned in clipGeometry by GetClipGeometryLocal</term>
/// <term>String that is returned in key by GetClipGeometryLookup</term>
/// </listheader>
/// <item>
/// <term>SetClipGeometryLocal</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>The local clip geometry that is set by SetClipGeometryLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetClipGeometryLookup (this method)</term>
/// <term>
/// The shared clip geometry that gets retrieved, with a lookup key that matches the key that is set by SetClipGeometryLookup,
/// from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetClipGeometryLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetClipGeometryLookup nor SetClipGeometryLocal has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setclipgeometrylookup
// HRESULT SetClipGeometryLookup( LPCWSTR key );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetClipGeometryLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets the opacity value of this visual.</summary>
/// <returns>The opacity value.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacity HRESULT
// GetOpacity( FLOAT *opacity );
[MethodImpl(MethodImplOptions.InternalCall)]
new float GetOpacity();
/// <summary>Sets the opacity value of the visual.</summary>
/// <param name="opacity">
/// <para>The opacity value to be set for the visual.</para>
/// <para>
/// The range of allowed values for this parameter is 0.0 to 1.0; with 0.0 the visual is completely transparent, and with 1.0 it
/// is completely opaque.
/// </para>
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setopacity HRESULT
// SetOpacity( FLOAT opacity );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetOpacity([In] float opacity);
/// <summary>Gets a pointer to the IXpsOMBrush interface of the visual's opacity mask brush.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMBrush interface of the visual's opacity mask brush. If an opacity mask brush has not been set for
/// this visual, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the brush.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>
/// The shared opacity mask brush that gets retrieved, with a lookup key that matches the key that is set by
/// SetOpacityMaskBrushLookup, from the resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacitymaskbrush HRESULT
// GetOpacityMaskBrush( IXpsOMBrush **opacityMaskBrush );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMBrush GetOpacityMaskBrush();
/// <summary>Gets the local, unshared opacity mask brush for the visual.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMBrush interface of the visual's opacity mask brush. If an opacity mask brush lookup key has been set,
/// or if a local opacity mask brush has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacitymaskbrushlocal
// HRESULT GetOpacityMaskBrushLocal( IXpsOMBrush **opacityMaskBrush );
[MethodImpl(MethodImplOptions.InternalCall)]
new IXpsOMBrush GetOpacityMaskBrushLocal();
/// <summary>Sets the IXpsOMBrush interface pointer as the local, unshared opacity mask brush.</summary>
/// <param name="opacityMaskBrush">
/// A pointer to the IXpsOMBrush interface to be set as the local, unshared opacity mask brush. A <c>NULL</c> pointer clears the
/// previously assigned opacity mask brush.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetOpacityMaskBrushLocal</c>, the opacity mask brush lookup key is released and GetOpacityMaskBrushLookup
/// returns a <c>NULL</c> pointer in the key parameter. The table that follows explains the relationship between the local and
/// lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrush</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrushLocal</term>
/// <term>String that is returned in key by GetOpacityMaskBrushLookup</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal (this method)</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>
/// The shared opacity mask brush that gets retrieved, with a lookup key that matches the key that is set by
/// SetOpacityMaskBrushLookup, from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetOpacityMaskBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setopacitymaskbrushlocal
// HRESULT SetOpacityMaskBrushLocal( IXpsOMBrush *opacityMaskBrush );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetOpacityMaskBrushLocal([In] IXpsOMBrush opacityMaskBrush);
/// <summary>Gets the name of the lookup key of the shared opacity mask brush in a resource dictionary.</summary>
/// <returns>
/// <para>
/// The name of the lookup key of the shared opacity mask brush in a resource dictionary. If the lookup key of an opacity mask
/// brush has not been set, or if a local opacity mask brush has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup</term>
/// <term>The lookup key that is set by SetOpacityMaskBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getopacitymaskbrushlookup
// HRESULT GetOpacityMaskBrushLookup( LPWSTR *key );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetOpacityMaskBrushLookup();
/// <summary>Sets the lookup key name of a shared opacity mask brush in a resource dictionary.</summary>
/// <param name="key">
/// The lookup key name of the opacity mask brush in the dictionary. A <c>NULL</c> pointer clears the previously assigned key name.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetOpacityMaskBrushLookup</c>, the local opacity mask brush is released and GetOpacityMaskBrushLocal
/// returns a <c>NULL</c> pointer in the opacityMaskBrush parameter. The table that follows explains the relationship between
/// the local and lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrush</term>
/// <term>Object that is returned in opacityMaskBrush by GetOpacityMaskBrushLocal</term>
/// <term>String that is returned in key by GetOpacityMaskBrushLookup</term>
/// </listheader>
/// <item>
/// <term>SetOpacityMaskBrushLocal</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>The local opacity mask brush that is set by SetOpacityMaskBrushLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetOpacityMaskBrushLookup (this method)</term>
/// <term>
/// The shared opacity mask brush that gets retrieved—with a lookup key that matches the key that is set by
/// SetOpacityMaskBrushLookup—from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetOpacityMaskBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetOpacityMaskBrushLocal nor SetOpacityMaskBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setopacitymaskbrushlookup
// HRESULT SetOpacityMaskBrushLookup( LPCWSTR key );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetOpacityMaskBrushLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets the <c>Name</c> property of the visual.</summary>
/// <returns>The <c>Name</c> property string. If the <c>Name</c> property has not been set, a <c>NULL</c> pointer is returned.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getname HRESULT GetName(
// LPWSTR *name );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetName();
/// <summary>Sets the <c>Name</c> property of the visual.</summary>
/// <param name="name">The name of the visual. A <c>NULL</c> pointer clears the <c>Name</c> property.</param>
/// <remarks>
/// <para>Names must be unique.</para>
/// <para>
/// Clearing the <c>Name</c> property by passing a <c>NULL</c> pointer in name sets the <c>IsHyperlinkTarget</c> property to <c>FALSE</c>.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setname HRESULT SetName(
// LPCWSTR name );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetName([In, MarshalAs(UnmanagedType.LPWStr)] string name);
/// <summary>Gets a value that indicates whether the visual is the target of a hyperlink.</summary>
/// <returns>
/// <para>The Boolean value that indicates whether the visual is the target of a hyperlink.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The visual is the target of a hyperlink.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The visual is not the target of a hyperlink.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getishyperlinktarget HRESULT
// GetIsHyperlinkTarget( BOOL *isHyperlink );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.Bool)]
new bool GetIsHyperlinkTarget();
/// <summary>Specifies whether the visual is the target of a hyperlink.</summary>
/// <param name="isHyperlink">
/// <para>The Boolean value that specifies whether the visual is the target of a hyperlink.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>The visual is the target of a hyperlink.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>The visual is not the target of a hyperlink.</term>
/// </item>
/// </list>
/// </param>
/// <remarks>The visual must be named before it can be set as the target of a hyperlink.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setishyperlinktarget HRESULT
// SetIsHyperlinkTarget( BOOL isHyperlink );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetIsHyperlinkTarget([In, MarshalAs(UnmanagedType.Bool)] bool isHyperlink);
/// <summary>Gets a pointer to the IUri interface to which this visual object links.</summary>
/// <returns>
/// A pointer to the IUri interface that contains the destination URI for the link. If a URI has not been set for this object, a
/// <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-gethyperlinknavigateuri
// HRESULT GetHyperlinkNavigateUri( IUri **hyperlinkUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new IUri GetHyperlinkNavigateUri();
/// <summary>Sets the destination URI of the visual's hyperlink.</summary>
/// <param name="hyperlinkUri">The IUri interface that contains the destination URI of the visual's hyperlink.</param>
/// <remarks>
/// Setting an object's URI makes the object a hyperlink. When activated or clicked, the object will navigate to the destination
/// that is specified by the URI in hyperlinkUri.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-sethyperlinknavigateuri
// HRESULT SetHyperlinkNavigateUri( IUri *hyperlinkUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetHyperlinkNavigateUri([In] IUri hyperlinkUri);
/// <summary>Gets the <c>Language</c> property of the visual and of its contents.</summary>
/// <returns>
/// The language string that specifies the language of the page. If a language has not been set, a <c>NULL</c> pointer is returned.
/// </returns>
/// <remarks>
/// <para>The <c>Language</c> property that is set by this method specifies the language of the resource content.</para>
/// <para>Internet Engineering Task Force (IETF) RFC 3066 specifies the recommended encoding for the <c>Language</c> property.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-getlanguage HRESULT
// GetLanguage( LPWSTR *language );
[MethodImpl(MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetLanguage();
/// <summary>Sets the <c>Language</c> property of the visual.</summary>
/// <param name="language">
/// The language string that specifies the language of the visual and of its contents. A <c>NULL</c> pointer clears the
/// <c>Language</c> property.
/// </param>
/// <remarks>
/// The recommended encoding for the <c>Language</c> property is specified in Internet Engineering Task Force (IETF) RFC 3066r.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomvisual-setlanguage HRESULT
// SetLanguage( LPCWSTR language );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetLanguage([In, MarshalAs(UnmanagedType.LPWStr)] string language);
/// <summary>Gets the text in unescaped UTF-16 scalar values.</summary>
/// <returns>The UTF-16 Unicode string of the text to be displayed. If the string is empty, a <c>NULL</c> pointer is returned.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getunicodestring HRESULT
// GetUnicodeString( LPWSTR *unicodeString );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetUnicodeString();
/// <summary>Gets the number of Glyph indices.</summary>
/// <returns>The number of glyph indices.</returns>
/// <remarks>GetGlyphIndices gets the glyph indices.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getglyphindexcount HRESULT
// GetGlyphIndexCount( UINT32 *indexCount );
uint GetGlyphIndexCount();
/// <summary>Gets an array of XPS_GLYPH_INDEX structures that describe the specific glyph indices in the font.</summary>
/// <param name="indexCount">
/// The number of XPS_GLYPH_INDEX structures that will fit in the array that is referenced by glyphIndices. When the method
/// returns, indexCount will contain the number of <c>XPS_GLYPH_INDEX</c> structures that are returned in the array referenced
/// by glyphIndices.
/// </param>
/// <param name="glyphIndices">The address of an array of XPS_GLYPH_INDEX structures that receive the glyph indices.</param>
/// <remarks>
/// <para>GetGlyphIndexCount gets the number of elements in the glyph index array.</para>
/// <para>
/// The glyph indices override the default <c>cmap</c> mapping from the <c>UnicodeString</c> to the glyph index. The
/// XPS_GLYPH_INDEX structure also contains advance width as well as vertical and horizontal offset information.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getglyphindices HRESULT
// GetGlyphIndices( UINT32 *indexCount, XPS_GLYPH_INDEX *glyphIndices );
void GetGlyphIndices(ref uint indexCount, [In, Out] XPS_GLYPH_INDEX[] glyphIndices);
/// <summary>Gets the number of glyph mappings.</summary>
/// <returns>The number of glyph mappings.</returns>
/// <remarks>GetGlyphMappings gets the glyph mappings.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getglyphmappingcount HRESULT
// GetGlyphMappingCount( UINT32 *glyphMappingCount );
uint GetGlyphMappingCount();
/// <summary>
/// Gets an array of XPS_GLYPH_MAPPING structures that describe how to map UTF-16 scalar values to entries in the array of
/// XPS_GLYPH_INDEX structures, which is returned by GetGlyphIndices.
/// </summary>
/// <param name="glyphMappingCount">
/// The number of XPS_GLYPH_MAPPING structures that will fit in the array referenced by glyphMappings. When the method returns,
/// glyphMappingCount contains the number of values returned in the array referenced by glyphMappings.
/// </param>
/// <param name="glyphMappings">An array of XPS_GLYPH_MAPPING structures that contain the glyph mapping values.</param>
/// <remarks>GetGlyphMappingCount gets the number of glyph mappings.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getglyphmappings HRESULT
// GetGlyphMappings( UINT32 *glyphMappingCount, XPS_GLYPH_MAPPING *glyphMappings );
void GetGlyphMappings(ref uint glyphMappingCount, [In, Out] XPS_GLYPH_MAPPING[] glyphMappings);
/// <summary>Gets the number of prohibited caret stops.</summary>
/// <returns>The number of prohibited caret stops.</returns>
/// <remarks>
/// <para>GetProhibitedCaretStops gets the prohibited caret stops.</para>
/// <para>
/// Each caret stop index corresponds to the scalar values of a UTF-16 <c>UnicodeString</c> property. Index 0 represents the
/// location just before the first UTF-16 scalar value of <c>UnicodeString</c>; index 1 represents the location between the
/// first and second UTF-16 scalar values, and so on. There is an additional index at the end of <c>UnicodeString</c>. Any
/// unspecified index is a valid caret stop location.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getprohibitedcaretstopcount
// HRESULT GetProhibitedCaretStopCount( UINT32 *prohibitedCaretStopCount );
uint GetProhibitedCaretStopCount();
/// <summary>Gets an array of prohibited caret stop locations.</summary>
/// <param name="prohibitedCaretStopCount">
/// The number of prohibited caret stop locations that will fit in the array referenced by prohibitedCaretStops. When the method
/// returns, prohibitedCaretStopCount will contain the number of values returned in the array referenced by prohibitedCaretStops.
/// </param>
/// <param name="prohibitedCaretStops">
/// An array of prohibited caret stop locations; if such are not defined, a <c>NULL</c> pointer is returned.
/// </param>
/// <remarks>
/// <para>
/// Each caret stop index corresponds to the scalar values of a UTF-16 <c>UnicodeString</c> property. Index 0 represents the
/// location just before the first UTF-16 scalar value of <c>UnicodeString</c>; index 1 represents the location between the
/// first and second UTF-16 scalar values, and so on. There is an additional index at the end of <c>UnicodeString</c>. Any
/// unspecified index is a valid caret stop location.
/// </para>
/// <para>GetProhibitedCaretStopCount gets the number of prohibited caret stops.</para>
/// <para>A caret stop is the index of the UTF-16 code point in the <c>UnicodeString</c> property of the glyph.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getprohibitedcaretstops
// HRESULT GetProhibitedCaretStops( UINT32 *prohibitedCaretStopCount, UINT32 *prohibitedCaretStops );
void GetProhibitedCaretStops(ref uint prohibitedCaretStopCount, [In, Out] uint[] prohibitedCaretStops);
/// <summary>Gets the level of bidirectional text.</summary>
/// <returns>
/// <para>The level of bidirectional text.</para>
/// <para>Range: 061</para>
/// </returns>
/// <remarks>
/// <para>
/// The bidirectional text level, or <c>BidiLevel</c>, specifies the nesting level of the Unicode bidirectional algorithm. Even
/// values imply the left-to-right layout and odd values the right-to-left layout, which places the run origin on the right side
/// of the first glyph. Advance widths that are positive will move to the left, allowing subsequent glyphs to be placed to the
/// left of the previous glyph.
/// </para>
/// <para>The range of allowed values for this property is between 0 and 61, inclusive, and the default value is 0.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getbidilevel HRESULT
// GetBidiLevel( UINT32 *bidiLevel );
uint GetBidiLevel();
/// <summary>Gets a Boolean value that indicates whether the text is to be rendered with the glyphs rotated sideways.</summary>
/// <returns>
/// <para>The Boolean value that indicates whether the text is to be rendered with the glyphs rotated sideways.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>Render the glyphs sideways to produce sideways text.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>Do not render the glyphs sideways to produce normal text.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>The default value for this property is <c>FALSE</c>.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getissideways HRESULT
// GetIsSideways( BOOL *isSideways );
[return: MarshalAs(UnmanagedType.Bool)]
bool GetIsSideways();
/// <summary>Gets the name of the device font.</summary>
/// <returns>
/// The string that contains the unescaped name of the device font. If the name has not been set, a <c>NULL</c> pointer will be returned.
/// </returns>
/// <remarks>
/// <para>
/// The device font name uniquely identifies a specific device font and is typically defined by a hardware vendor or font vendor.
/// </para>
/// <para>The escaped version of the device font name is created when the object is serialized.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getdevicefontname HRESULT
// GetDeviceFontName( LPWSTR *deviceFontName );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetDeviceFontName();
/// <summary>Gets the style simulations that will be applied when rendering the glyphs.</summary>
/// <returns>The XPS_STYLE_SIMULATION value that describes the style simulations to be applied.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getstylesimulations HRESULT
// GetStyleSimulations( XPS_STYLE_SIMULATION *styleSimulations );
XPS_STYLE_SIMULATION GetStyleSimulations();
/// <summary>Sets the style simulations that will be applied when the glyphs are rendered.</summary>
/// <param name="styleSimulations">The XPS_STYLE_SIMULATION value that specifies the style simulation to be applied.</param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setstylesimulations HRESULT
// SetStyleSimulations( XPS_STYLE_SIMULATION styleSimulations );
void SetStyleSimulations([In] XPS_STYLE_SIMULATION styleSimulations);
/// <summary>Gets the starting position of the text.</summary>
/// <returns>The XPS_POINT structure that receives the starting position of the text.</returns>
/// <remarks>
/// In the units of the effective coordinate space, the origin specifies the x and y coordinates of the first glyph in the run.
/// The glyph is placed such that its baseline and the leading edge of its advance vector intersect with the point defined by
/// origin.x and origin.y.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getorigin HRESULT GetOrigin(
// XPS_POINT *origin );
XPS_POINT GetOrigin();
/// <summary>Sets the starting position of the text.</summary>
/// <param name="origin">The XPS_POINT structure that contains the coordinates to be set as the text's starting position.</param>
/// <remarks>
/// In the units of the effective coordinate space, the origin specifies the x and y coordinates of the first glyph in the run.
/// The glyph is placed such that its baseline and the leading edge of its advance vector intersect with the point defined by
/// origin.x and origin.y.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setorigin HRESULT SetOrigin(
// const XPS_POINT *origin );
void SetOrigin(in XPS_POINT origin);
/// <summary>Gets the font size.</summary>
/// <returns>The font size.</returns>
/// <remarks>
/// <para>
/// The em size that is returned in fontRenderingEmSize specifies the font size in the drawing surface units. The drawing
/// surface units are expressed as floating-point values in the effective coordinate space.
/// </para>
/// <para>In new glyph objects, the default value of fontRenderingEmSize is 10.0.</para>
/// <para>If the value of fontRenderingEmSize is 0.0, no text is displayed.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getfontrenderingemsize
// HRESULT GetFontRenderingEmSize( FLOAT *fontRenderingEmSize );
float GetFontRenderingEmSize();
/// <summary>Sets the font size of the text.</summary>
/// <param name="fontRenderingEmSize">The font size.</param>
/// <remarks>
/// <para>
/// The em size returned in fontRenderingEmSize specifies the font size in drawing surface units. Drawing surface units are
/// expressed as floating-point values in the units of the effective coordinate space.
/// </para>
/// <para>In new glyph objects, the default value of fontRenderingEmSize is 10.0.</para>
/// <para>If the value of fontRenderingEmSize is 0.0, no text is displayed.</para>
/// <para>A value of 0.0 results in no visible text being displayed.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setfontrenderingemsize
// HRESULT SetFontRenderingEmSize( FLOAT fontRenderingEmSize );
void SetFontRenderingEmSize([In] float fontRenderingEmSize);
/// <summary>Gets a pointer to the IXpsOMFontResource interface of the font resource object required for this text.</summary>
/// <returns>A pointer to the IXpsOMFontResource interface of the font resource.</returns>
/// <remarks>
/// After loading and parsing the resource into the XPS OM, this method might return an error that applies to another resource.
/// This occurs because all of the relationships are parsed when a resource is loaded.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getfontresource HRESULT
// GetFontResource( IXpsOMFontResource **fontResource );
IXpsOMFontResource GetFontResource();
/// <summary>Sets the pointer to the IXpsOMFontResource interface of the font resource object that is required for this text.</summary>
/// <param name="fontResource">The pointer to the IXpsOMFontResource interface to be used.</param>
/// <remarks>fontResource must not be a <c>NULL</c> pointer; a glyph object must have a font resource.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setfontresource HRESULT
// SetFontResource( IXpsOMFontResource *fontResource );
void SetFontResource([In] IXpsOMFontResource fontResource);
/// <summary>
/// <para>Gets the index of the font face to be used.</para>
/// <para>
/// This value is only used when GetFontResource returns an IXpsOMFontResource interface that represents a <c>TrueType</c> font collection.
/// </para>
/// </summary>
/// <returns>The index value of the font face. If the font face has not been set, 1 is returned.</returns>
/// <remarks>
/// <para>The font resource is obtained by calling the GetFontResource method.</para>
/// <para>
/// If a font face has not been set or is not supported by the font, a value of 1 is returned in fontFaceIndex. When the glyph
/// is loaded from an existing XPS document file, a fontFaceIndex value of 1 indicates that the <c>FontUri</c> attribute did
/// not include a <c>#index</c> fragment.
/// </para>
/// <para>
/// In the following markup of a FixedPage, the <c>FontUri</c> attribute of the <c>Glyphs</c> element has a value of . In this
/// case, <c>GetFontFaceIndex</c> would return a value of 1 in fontFaceIndex.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getfontfaceindex HRESULT
// GetFontFaceIndex( SHORT *fontFaceIndex );
short GetFontFaceIndex();
/// <summary>
/// <para>Sets the index of the font face to be used.</para>
/// <para>
/// This value is only used when GetFontResource returns an IXpsOMFontResource interface that represents a <c>TrueType</c> font collection.
/// </para>
/// </summary>
/// <param name="fontFaceIndex">The index value of the font face to be used.</param>
/// <remarks>
/// <para>
/// The default value of the font face index property is 1, which means that a font index has not been set or the font resource
/// is not a <c>TrueType</c> font collection.
/// </para>
/// <para>
/// If this value is specified and is not 1, "#&lt;Index&gt;" is appended to the Font URI during serialization. Here,
/// &lt;Index&gt; is the value that is set by <c>SetFontFaceIndex</c>.
/// </para>
/// <para>
/// The following markup of a FixedPage shows the result of setting the fontFaceIndex to 1. Notice that the <c>FontUri</c>
/// attribute of the <c>Glyphs</c> element has a value of , which includes the index of the font face.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setfontfaceindex HRESULT
// SetFontFaceIndex( SHORT fontFaceIndex );
void SetFontFaceIndex([In] short fontFaceIndex);
/// <summary>Gets a pointer to the resolved IXpsOMBrush interface of the fill brush to be used for the text.</summary>
/// <returns>
/// <para>
/// A pointer to the resolved IXpsOMBrush interface of the fill brush to be used for the text. If a fill brush has not been set,
/// a <c>NULL</c> pointer will be returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the brush.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in fillBrush</term>
/// </listheader>
/// <item>
/// <term>SetFillBrushLocal</term>
/// <term>The local brush that is set by SetFillBrushLocal.</term>
/// </item>
/// <item>
/// <term>SetFillBrushLookup</term>
/// <term>
/// The shared brush retrieved, with a lookup key that matches the key that is set by SetFillBrushLookup, from the local or
/// resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetFillBrushLocal nor SetFillBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>The fill brush is used to fill the shape of the rendered glyphs.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getfillbrush HRESULT
// GetFillBrush( IXpsOMBrush **fillBrush );
IXpsOMBrush GetFillBrush();
/// <summary>Gets a pointer to the local, unshared IXpsOMBrush interface of the fill brush to be used for the text.</summary>
/// <returns>
/// <para>
/// A pointer to the local, unshared IXpsOMBrush interface of the fill brush to be used for the text. If a fill brush lookup key
/// has been set or if a local fill brush has not been set, a <c>NULL</c> pointer will be returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in fillBrush</term>
/// </listheader>
/// <item>
/// <term>SetFillBrushLocal</term>
/// <term>The local brush that is set by SetFillBrushLocal.</term>
/// </item>
/// <item>
/// <term>SetFillBrushLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetFillBrushLocal nor SetFillBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getfillbrushlocal HRESULT
// GetFillBrushLocal( IXpsOMBrush **fillBrush );
IXpsOMBrush GetFillBrushLocal();
/// <summary>Sets the IXpsOMBrush interface pointer to a local, unshared fill brush.</summary>
/// <param name="fillBrush">
/// The IXpsOMBrush interface pointer to be set as the local, unshared fill brush. A <c>NULL</c> pointer releases any previously
/// assigned brushes.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetFillBrushLocal</c>, the fill brush lookup key is released and GetFillBrushLookup returns a <c>NULL</c>
/// pointer in the key parameter. The table that follows explains the relationship between the local and lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in fillBrush by GetFillBrush</term>
/// <term>Object that is returned in fillBrush by GetFillBrushLocal</term>
/// <term>String that is returned in key by GetFillBrushLookup</term>
/// </listheader>
/// <item>
/// <term>SetFillBrushLocal (this method)</term>
/// <term>The local brush that is set by SetFillBrushLocal.</term>
/// <term>The local brush that is set by SetFillBrushLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetFillBrushLookup</term>
/// <term>
/// The shared brush that gets retrieved, with a lookup key matching the key that is set by SetFillBrushLookup, from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetFillBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetFillBrushLocal nor SetFillBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setfillbrushlocal HRESULT
// SetFillBrushLocal( IXpsOMBrush *fillBrush );
void SetFillBrushLocal([In] IXpsOMBrush fillBrush);
/// <summary>
/// Gets the lookup key of the IXpsOMBrush interface that is stored in a resource dictionary and will be used as the fill brush.
/// </summary>
/// <returns>
/// <para>
/// The lookup key for the brush that is stored in a resource dictionary and will be used as the fill brush. If a fill brush
/// lookup key has not been set or if a local fill brush has been set, a <c>NULL</c> pointer will be returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>String that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetFillBrushLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetFillBrushLookup</term>
/// <term>The lookup key that is set by SetFillBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetFillBrushLocal nor SetFillBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getfillbrushlookup HRESULT
// GetFillBrushLookup( LPWSTR *key );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetFillBrushLookup();
/// <summary>Sets the lookup key name of a shared fill brush.</summary>
/// <param name="key">
/// A string variable that contains the key name of the fill brush that is stored in the resource dictionary and will be used as
/// the shared fill brush. A <c>NULL</c> pointer clears any previously assigned key string.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetFillBrushLookup</c>, the local fill brush is released and GetFillBrushLocal returns a <c>NULL</c>
/// pointer in the fillBrush parameter. The table that follows explains the relationship between the local and lookup values of
/// this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in fillBrush by GetFillBrush</term>
/// <term>Object that is returned in fillBrush by GetFillBrushLocal</term>
/// <term>String that is returned in key by GetFillBrushLookup</term>
/// </listheader>
/// <item>
/// <term>SetFillBrushLocal</term>
/// <term>The local brush that is set by SetFillBrushLocal.</term>
/// <term>The local brush that is set by SetFillBrushLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetFillBrushLookup (this method)</term>
/// <term>
/// The shared brush that gets retrieved, with a lookup key matching the key that is set by SetFillBrushLookup, from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetFillBrushLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetFillBrushLocal nor SetFillBrushLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-setfillbrushlookup HRESULT
// SetFillBrushLookup( LPCWSTR key );
void SetFillBrushLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets a pointer to the IXpsOMGlyphsEditor interface that will be used to edit the glyphs in the object.</summary>
/// <returns>A pointer to the IXpsOMGlyphsEditor interface.</returns>
/// <remarks>An IXpsOMGlyphsEditor interface is required to edit the read-only properties of the IXpsOMGlyphs interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-getglyphseditor HRESULT
// GetGlyphsEditor( IXpsOMGlyphsEditor **editor );
IXpsOMGlyphsEditor GetGlyphsEditor();
/// <summary>Makes a deep copy of the interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
/// <remarks>This method does not update any of the resource pointers in the copy of the interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphs-clone HRESULT Clone(
// IXpsOMGlyphs **glyphs );
IXpsOMGlyphs Clone();
}
/// <summary>Allows batch modification of properties that affect the text content in an IXpsOMGlyphs interface.</summary>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomglyphseditor
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "5bdf2892-ce6f-4560-b638-e441166fc309")]
[ComImport, Guid("A5AB8616-5B16-4B9F-9629-89B323ED7909"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGlyphsEditor
{
/// <summary>Performs cross-property validation and then copies the changes to the parent IXpsOMGlyphs interface.</summary>
/// <remarks>
/// The IXpsOMGlyphsEditor interface remains valid after this method is called, allowing for additional modifications to be made.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-applyedits HRESULT ApplyEdits();
void ApplyEdits();
/// <summary>Gets the text in unescaped UTF-16 scalar values.</summary>
/// <returns>The UTF-16 Unicode string. If the string is empty, a <c>NULL</c> pointer is returned.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getunicodestring
// HRESULT GetUnicodeString( LPWSTR *unicodeString );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetUnicodeString();
/// <summary>Sets the text in unescaped UTF-16 scalar values.</summary>
/// <param name="unicodeString">The address of a UTF-16 Unicode string. A <c>NULL</c> pointer clears the property.</param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setunicodestring
// HRESULT SetUnicodeString( LPCWSTR unicodeString );
void SetUnicodeString([In, MarshalAs(UnmanagedType.LPWStr)] string unicodeString);
/// <summary>Gets the number of glyph indices.</summary>
/// <returns>The glyph index count.</returns>
/// <remarks>To get the glyph indices, call GetGlyphIndices.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getglyphindexcount
// HRESULT GetGlyphIndexCount( UINT32 *indexCount );
uint GetGlyphIndexCount();
/// <summary>Gets an array of XPS_GLYPH_INDEX structures that describe the specific glyph indices in the font.</summary>
/// <param name="indexCount">
/// The number of elements that will fit in the array referenced by the glyphIndices parameter. When the method returns,
/// indexCount will contain the number of XPS_GLYPH_INDEX structures that are returned in the array referenced by glyphIndices.
/// </param>
/// <param name="glyphIndices">The XPS_GLYPH_INDEX structure array that receives the glyph indices.</param>
/// <remarks>
/// <para>
/// The glyph indices that are returned in glyphIndices override the default cmap mapping from the <c>UnicodeString</c> property
/// to the glyph index. Each XPS_GLYPH_INDEX structure also contains advance width and vertical and horizontal offset information.
/// </para>
/// <para>GetGlyphIndexCount gets the number of elements in the glyph index array.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getglyphindices
// HRESULT GetGlyphIndices( UINT32 *indexCount, XPS_GLYPH_INDEX *glyphIndices );
void GetGlyphIndices(ref uint indexCount, [In, Out] XPS_GLYPH_INDEX[] glyphIndices);
/// <summary>Sets an XPS_GLYPH_INDEX structure array that describes which glyph indices are to be used in the font.</summary>
/// <param name="indexCount">
/// The number of XPS_GLYPH_INDEX structures in the array that is referenced by glyphIndices. The value of 0 clears the property.
/// </param>
/// <param name="glyphIndices">
/// An array of XPS_GLYPH_INDEX structures that contain the glyph indices. If indexCount is 0, this parameter is ignored.
/// </param>
/// <remarks>
/// The glyph indices that are passed in glyphIndices override the default cmap mapping from the <c>UnicodeString</c> property
/// to the glyph index. Each XPS_GLYPH_INDEX structure also has advance width and vertical and horizontal offset information.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setglyphindices
// HRESULT SetGlyphIndices( UINT32 indexCount, const XPS_GLYPH_INDEX *glyphIndices );
void SetGlyphIndices([In] uint indexCount, [In] XPS_GLYPH_INDEX[] glyphIndices);
/// <summary>Gets the number of glyph mappings.</summary>
/// <returns>The number of glyph mappings.</returns>
/// <remarks>To get the glyph mappings, call GetGlyphMappings.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getglyphmappingcount
// HRESULT GetGlyphMappingCount( UINT32 *glyphMappingCount );
uint GetGlyphMappingCount();
/// <summary>
/// Gets an array of XPS_GLYPH_MAPPING structures that describe how to map UTF-16 scalar values to entries in the array of
/// XPS_GLYPH_INDEX structures, which is returned by GetGlyphIndices.
/// </summary>
/// <param name="glyphMappingCount">
/// The number of XPS_GLYPH_MAPPING structures that will fit in the array referenced by glyphMappings. When the method returns,
/// glyphMappingCount will contain the number of values in that array.
/// </param>
/// <param name="glyphMappings">An array of XPS_GLYPH_MAPPING structures that receives the glyph mapping values.</param>
/// <remarks>GetGlyphMappingCount gets the number of glyph mappings.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getglyphmappings
// HRESULT GetGlyphMappings( UINT32 *glyphMappingCount, XPS_GLYPH_MAPPING *glyphMappings );
void GetGlyphMappings(ref uint glyphMappingCount, [In, Out] XPS_GLYPH_MAPPING[] glyphMappings);
/// <summary>
/// Sets an array of XPS_GLYPH_MAPPING structures that describe how to map the UTF-16 scalar values in the <c>UnicodeString</c>
/// property to entries in the array of XPS_GLYPH_INDEX structures.
/// </summary>
/// <param name="glyphMappingCount">
/// The number of XPS_GLYPH_MAPPING structures in the array that is referenced by glyphMappings. A value of 0 clears the property.
/// </param>
/// <param name="glyphMappings">
/// An XPS_GLYPH_MAPPING structure array that contains the glyph mapping values. If glyphMappingCount is 0, this parameter is
/// ignored and can be set to <c>NULL</c>.
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setglyphmappings
// HRESULT SetGlyphMappings( UINT32 glyphMappingCount, const XPS_GLYPH_MAPPING *glyphMappings );
void SetGlyphMappings([In] uint glyphMappingCount, [In] XPS_GLYPH_MAPPING[] glyphMappings);
/// <summary>Gets the number of prohibited caret stops.</summary>
/// <returns>The number of prohibited caret stops.</returns>
/// <remarks>
/// <para>To get the prohibited caret stops, call GetProhibitedCaretStops.</para>
/// <para>
/// Each caret stop index corresponds to the scalar values of a UTF-16 <c>UnicodeString</c> property. Index 0 represents the
/// location just before the first UTF-16 scalar value of <c>UnicodeString</c>; index 1 represents the location between the
/// first and second UTF-16 scalar values, and so on. There is an additional index at the end of <c>UnicodeString</c>. Any
/// unspecified index is a valid caret stop location.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getprohibitedcaretstopcount
// HRESULT GetProhibitedCaretStopCount( UINT32 *prohibitedCaretStopCount );
uint GetProhibitedCaretStopCount();
/// <summary>Gets an array of prohibited caret stop locations.</summary>
/// <param name="count">
/// The number of prohibited caret stop values that will fit in the array that is referenced by the prohibitedCaretStops
/// parameter. When the method returns, prohibitedCaretStopCount will contain the number of values in that array.
/// </param>
/// <param name="prohibitedCaretStops">
/// An array of glyph mapping values. If no prohibited caret stops have been defined, a <c>NULL</c> pointer is returned.
/// </param>
/// <remarks>
/// <para>
/// Each caret stop index corresponds to the scalar values of a UTF-16 <c>UnicodeString</c> property. Index 0 represents the
/// location just before the first UTF-16 scalar value of <c>UnicodeString</c>; index 1 represents the location between the
/// first and second UTF-16 scalar values, and so on. There is an additional index at the end of <c>UnicodeString</c>. Any
/// unspecified index is a valid caret stop location.
/// </para>
/// <para>GetProhibitedCaretStopCount gets the number of prohibited caret stops.</para>
/// <para>A caret stop is the index of the UTF-16 code point in the <c>UnicodeString</c> property of the glyph.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getprohibitedcaretstops
// HRESULT GetProhibitedCaretStops( UINT32 *count, UINT32 *prohibitedCaretStops );
void GetProhibitedCaretStops(ref uint count, [In, Out] uint[] prohibitedCaretStops);
/// <summary>Sets an array of prohibited caret stop locations.</summary>
/// <param name="count">
/// The number of prohibited caret stop locations in the array that is referenced by prohibitedCaretStops. A value of 0 clears
/// the property.
/// </param>
/// <param name="prohibitedCaretStops">
/// The array of prohibited caret stop locations to be set. If count is 0, this parameter is ignored and can be set to <c>NULL</c>.
/// </param>
/// <remarks>
/// Each caret stop index corresponds to the scalar values of a UTF-16 <c>UnicodeString</c> property. Index 0 represents the
/// location just before the first UTF-16 scalar value of <c>UnicodeString</c>; index 1 represents the location between the
/// first and second UTF-16 scalar values, and so on. There is an additional index at the end of <c>UnicodeString</c>. Any
/// unspecified index is a valid caret stop location.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setprohibitedcaretstops
// HRESULT SetProhibitedCaretStops( UINT32 count, const UINT32 *prohibitedCaretStops );
void SetProhibitedCaretStops([In] uint count, [In] uint[] prohibitedCaretStops);
/// <summary>Gets the bidirectional text level of the parent IXpsOMGlyphs interface.</summary>
/// <returns>
/// <para>The bidirectional text level.</para>
/// <para>Range: 061</para>
/// </returns>
/// <remarks>
/// <para>
/// The <c>BidiLevel</c> property specifies the bidirectional nesting level of the Unicode algorithm. Even values imply the
/// left-to-right layout and odd values the right-to-left layout. Right-to-left layout places the run origin at the right side
/// of the first glyph. Advance widths that are positive will move to the left, allowing subsequent glyphs to be placed to the
/// left of the previous glyph.
/// </para>
/// <para>The range of allowed values for this property is between 0 and 61, inclusive, and the default value is 0.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getbidilevel HRESULT
// GetBidiLevel( UINT32 *bidiLevel );
uint GetBidiLevel();
/// <summary>Sets the level of bidirectional text.</summary>
/// <param name="bidiLevel">
/// <para>The level of bidirectional text.</para>
/// <para>Range: 061</para>
/// </param>
/// <remarks>
/// <para>
/// The <c>BidiLevel</c> property specifies the bidirectional nesting level of the Unicode algorithm. Even values imply the
/// left-to-right layout and odd values the right-to-left layout. Right-to-left layout places the run origin on the right side
/// of the first glyph. Advance widths that are positive will move to the left, allowing subsequent glyphs to be placed to the
/// left of the previous glyph.
/// </para>
/// <para>The range of allowed values for this property is between 0 and 61, inclusive, and the default value is 0.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setbidilevel HRESULT
// SetBidiLevel( UINT32 bidiLevel );
void SetBidiLevel([In] uint bidiLevel);
/// <summary>Gets a Boolean value that indicates whether the text is to be rendered with the glyphs rotated sideways.</summary>
/// <returns>
/// <para>The Boolean value that indicates whether the text is to be rendered with the glyphs rotated sideways.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>Rotate the glyphs sideways. Produces sideways text.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>Do not rotate the glyphs sideways. Produces normal text.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>The default value for this property is <c>false</c>.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getissideways HRESULT
// GetIsSideways( BOOL *isSideways );
[return: MarshalAs(UnmanagedType.Bool)]
bool GetIsSideways();
/// <summary>Sets the value that indicates whether the text is to be rendered with the glyphs rotated sideways.</summary>
/// <param name="isSideways">
/// <para>The Boolean value that indicates whether the text is to be rendered with the glyphs rotated sideways.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TRUE</term>
/// <term>Rotate the glyphs sideways. Produces sideways text.</term>
/// </item>
/// <item>
/// <term>FALSE</term>
/// <term>Do not rotate the glyphs sideways. Produces normal text.</term>
/// </item>
/// </list>
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setissideways HRESULT
// SetIsSideways( BOOL isSideways );
void SetIsSideways([In, MarshalAs(UnmanagedType.Bool)] bool isSideways);
/// <summary>Gets the name of the device font.</summary>
/// <returns>The name of the device font; if not specified, a <c>NULL</c> pointer will be returned.</returns>
/// <remarks>
/// <para>The device font name is created as an escaped name when the object is serialized.</para>
/// <para>The device font name uniquely identifies a specific device font and is typically defined by a hardware or font vendor.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-getdevicefontname
// HRESULT GetDeviceFontName( LPWSTR *deviceFontName );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetDeviceFontName();
/// <summary>Sets the name of the device font.</summary>
/// <param name="deviceFontName">
/// A pointer to the string that contains the name of the device font in its unescaped form. A <c>NULL</c> pointer clears the property.
/// </param>
/// <remarks>
/// The device font name that is passed in deviceFontName can be set in its unescaped form; it will be converted to its escaped
/// form when the document is serialized.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomglyphseditor-setdevicefontname
// HRESULT SetDeviceFontName( LPCWSTR deviceFontName );
void SetDeviceFontName([In, MarshalAs(UnmanagedType.LPWStr)] string deviceFontName);
}
/// <summary>
/// <para>
/// This interface describes a gradient that is made up of gradient stops. Classes that inherit from <c>IXpsOMGradientBrush</c>
/// specify different ways of interpreting gradient stops.
/// </para>
/// <para><c>IXpsOMGradientBrush</c> is the base interface for the IXpsOMLinearGradientBrush and IXpsOMRadialGradientBrush interfaces.</para>
/// </summary>
/// <remarks>
/// <para>
/// The methods of this interface define the basic parameters of a gradient. The gradient type, which can be linear or radial,
/// determines how these parameters are applied.
/// </para>
/// <para>
/// As shown in the figure that follows, the start and end points of a linear gradient mark the end points of the gradient path. The
/// gradient path is the straight line that connects the start and end points. The gradient region of a linear gradient consists of
/// the area between the start and end points, including those points, and extends in both directions at a right angle to the
/// gradient path. The spread area is the area outside the gradient region.
/// </para>
/// <para>
/// Gradient stops define the color at specific locations along the gradient path; the color is interpolated along the gradient path
/// between the gradient stops, as shown in the following illustration.
/// </para>
/// <para>
/// As shown in the figure that follows, the gradient region of a radial gradient is the area enclosed by the ellipse that is
/// described by the center point and the x and y radii that extend from the center point. The spread area is the area outside of
/// that ellipse. The gradient path is a radial line that sweeps the entire gradient region from the gradient origin to the ellipse
/// that bounds the gradient region. In the following illustration, the gradient path is not shown.
/// </para>
/// <para>
/// The spread method describes how the spread area is filled. Implementation of the spread method depends on the gradient type
/// (linear or radial). The following illustration shows several examples of how the spread area can be filled. For information
/// about different spread methods, see XPS_SPREAD_METHOD.
/// </para>
/// <para>
/// The transform determines how the resulting gradient is transformed. The visible part of the gradient that is ultimately rendered
/// in the image is determined by the path, stroke, or glyph that is using the gradient brush.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomgradientbrush
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "d381b813-5368-4ffe-a9a1-0f5027ae9d80")]
[ComImport, Guid("EDB59622-61A2-42C3-BACE-ACF2286C06BF"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGradientBrush : IXpsOMBrush
{
/// <summary>Gets the <c>IUnknown</c> interface of the parent.</summary>
/// <returns>A pointer to the <c>IUnknown</c> interface of the parent.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
new object GetOwner();
/// <summary>Gets the object type of the interface.</summary>
/// <returns>The XPS_OBJECT_TYPE value that describes the interface that is derived from IXpsOMShareable.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-gettype HRESULT GetType(
// XPS_OBJECT_TYPE *type );
new XPS_OBJECT_TYPE GetType();
/// <summary>Gets the opacity of the brush.</summary>
/// <returns>The opacity value of the brush.</returns>
/// <remarks>
/// opacity is expressed as a value between 0.0 and 1.0; 0.0 indicates that the brush is completely transparent, 0.5 that it is
/// 50 percent opaque, and 1.0 that it is completely opaque.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsombrush-getopacity HRESULT
// GetOpacity( FLOAT *opacity );
new float GetOpacity();
/// <summary>Sets the opacity of the brush.</summary>
/// <param name="opacity">The opacity value of the brush.</param>
/// <remarks>
/// <para>
/// opacity is expressed as a value between 0.0 and 1.0; 0.0 indicates that the brush is completely transparent, 0.5 that it is
/// 50 percent opaque, and 1.0 that it is completely opaque.
/// </para>
/// <para>If opacity is less than 0.0 or greater than 1.0, the method returns an error.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsombrush-setopacity HRESULT
// SetOpacity( FLOAT opacity );
new void SetOpacity([In] float opacity);
/// <summary>
/// Gets a pointer to an IXpsOMGradientStopCollection interface that contains the collection of IXpsOMGradientStop interfaces
/// that define the gradient.
/// </summary>
/// <returns>A pointer to the IXpsOMGradientStopCollection interface that contains the collection of IXpsOMGradientStop interfaces.</returns>
/// <remarks>
/// <para>
/// Gradient stops, which are described in the XPS OM by an IXpsOMGradientStop interface, are used to define the color at a
/// specific location along a gradient path; the color is interpolated between the gradient stops. The illustration that follows
/// shows the gradient path and gradient stops of a linear gradient.
/// </para>
/// <para>
/// The illustration that follows shows the gradient stops of a radial gradient. In this example, the gradient region is the
/// area enclosed by the outer ellipse, and the radial gradient is using the <c>XPS_SPREAD_METHOD_REFLECT</c> spread method to
/// fill the space outside of the gradient region.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-getgradientstops
// HRESULT GetGradientStops( IXpsOMGradientStopCollection **gradientStops );
IXpsOMGradientStopCollection GetGradientStops();
/// <summary>Gets a pointer to the IXpsOMMatrixTransform interface that contains the resolved matrix transform for the brush.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the resolved matrix transform for the brush. If the transform
/// has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has been most recently called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform that is retrieved, with a lookup key that matches the key set by SetTransformLookup, from the resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// The transform determines how the gradient is transformed. The visible part of the gradient that is ultimately rendered in
/// the image is determined by the path, stroke, or glyph that is using the gradient brush.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-gettransform HRESULT
// GetTransform( IXpsOMMatrixTransform **transform );
IXpsOMMatrixTransform GetTransform();
/// <summary>
/// Gets a pointer to the IXpsOMMatrixTransform interface that contains the local, unshared, resolved matrix transform for the brush.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the local, unshared, resolved matrix transform for the brush.
/// If the transform has not been set or if a matrix transform lookup key has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has been most recently called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// The transform determines how the gradient is transformed. The visible part of the gradient that is ultimately rendered in
/// the image is determined by the path, stroke, or glyph that is using the gradient brush.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-gettransformlocal
// HRESULT GetTransformLocal( IXpsOMMatrixTransform **transform );
IXpsOMMatrixTransform GetTransformLocal();
/// <summary>
/// Sets the IXpsOMMatrixTransform interface pointer to a local, unshared matrix transform that is to be used for the brush.
/// </summary>
/// <param name="transform">
/// A pointer to the IXpsOMMatrixTransform interface of the local, unshared matrix transform that is to be used for the brush. A
/// <c>NULL</c> pointer releases any previously set interface.
/// </param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLocal</c>, the transform lookup key is released and GetTransformLocal returns a <c>NULL</c>
/// pointer in the transform parameter. The table that follows explains the relationship between the local and lookup values of
/// this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in transform by GetTransformLocal</term>
/// <term>Object that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal (this method)</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The shared transform retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// <para>
/// The transform passed in transform determines how the gradient is transformed. The visible part of the gradient that is
/// ultimately rendered in the image is determined by the path, stroke, or glyph that is using the gradient brush.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-settransformlocal
// HRESULT SetTransformLocal( IXpsOMMatrixTransform *transform );
void SetTransformLocal([In] IXpsOMMatrixTransform transform);
/// <summary>
/// <para>Gets the name of the lookup key of the shared matrix transform interface that is to be used for the brush.</para>
/// <para>The key name identifies a shared resource in a resource dictionary.</para>
/// </summary>
/// <returns>
/// <para>
/// The name of the lookup key of the shared matrix transform interface that is to be used for the brush. If the lookup key name
/// has not been set or if the local matrix transform has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>
/// The value that is returned in this parameter depends on which method has been most recently called to set the lookup key or
/// the transform.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>String that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>The key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// This method does not return an IXpsOMMatrixTransform interface pointer; to retrieve this pointer from the dictionary, call IXpsOMDictionary::GetByKey.
/// </para>
/// <para>
/// The transform determines how the gradient is transformed. The visible part of the gradient that is ultimately rendered in
/// the image is determined by the path, stroke, or glyph that is using the gradient brush.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-gettransformlookup
// HRESULT GetTransformLookup( LPWSTR *key );
[return: MarshalAs(UnmanagedType.LPWStr)]
string GetTransformLookup();
/// <summary>
/// <para>Sets the name of the lookup key of a shared matrix transform that is to be used for the brush.</para>
/// <para>The key name identifies a shared resource in a resource dictionary.</para>
/// </summary>
/// <param name="key">The name of the lookup key of the matrix transform that is to be used for the brush.</param>
/// <remarks>
/// <para>
/// After you call <c>SetTransformLookup</c>, the local transform is released and GetTransformLocal returns a <c>NULL</c>
/// pointer in the transform parameter. The table that follows explains the relationship between the local and lookup values of
/// this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in transform by GetTransformLocal</term>
/// <term>Object that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>The local transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup (this method)</term>
/// <term>
/// The shared transform retrieved, with a lookup key that matches the key that is set by SetTransformLookup, from the resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// <para>
/// The transform referenced by key determines how the gradient is transformed. The visible part of the gradient that is
/// ultimately rendered in the image is determined by the path, stroke, or glyph that is using the brush.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-settransformlookup
// HRESULT SetTransformLookup( LPCWSTR key );
void SetTransformLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets the XPS_SPREAD_METHOD value, which describes how the area outside of the gradient region will be rendered.</summary>
/// <returns>
/// The XPS_SPREAD_METHOD value that describes how the area outside of the gradient region will be rendered. The gradient region
/// is defined by the linear-gradient brush or radial-gradient brush that inherits this interface.
/// </returns>
/// <remarks>For more information about different types of spread methods, see XPS_SPREAD_METHOD.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-getspreadmethod
// HRESULT GetSpreadMethod( XPS_SPREAD_METHOD *spreadMethod );
XPS_SPREAD_METHOD GetSpreadMethod();
/// <summary>
/// Sets the XPS_SPREAD_METHOD value, which describes how the area outside of the gradient region is to be rendered. The
/// gradient region is defined by the start and end points of the gradient.
/// </summary>
/// <param name="spreadMethod">
/// The XPS_SPREAD_METHOD value that describes how the area outside of the gradient region is to be rendered. The gradient
/// region is defined by the linear-gradient brush or radial-gradient brush that inherits this interface.
/// </param>
/// <remarks>For more information about different types of spread methods, see XPS_SPREAD_METHOD.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-setspreadmethod
// HRESULT SetSpreadMethod( XPS_SPREAD_METHOD spreadMethod );
void SetSpreadMethod([In] XPS_SPREAD_METHOD spreadMethod);
/// <summary>Gets the gamma function to be used for color interpolation.</summary>
/// <returns>The XPS_COLOR_INTERPOLATION value that describes the gamma function to be used for color interpolation.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-getcolorinterpolationmode
// HRESULT GetColorInterpolationMode( XPS_COLOR_INTERPOLATION *colorInterpolationMode );
XPS_COLOR_INTERPOLATION GetColorInterpolationMode();
/// <summary>Sets the XPS_COLOR_INTERPOLATION value, which describes the gamma function to be used for color interpolation.</summary>
/// <param name="colorInterpolationMode">
/// The XPS_COLOR_INTERPOLATION value, which describes the gamma function to be used for color interpolation.
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientbrush-setcolorinterpolationmode
// HRESULT SetColorInterpolationMode( XPS_COLOR_INTERPOLATION colorInterpolationMode );
void SetColorInterpolationMode([In] XPS_COLOR_INTERPOLATION colorInterpolationMode);
}
/// <summary>Represents a single color and location within a gradient.</summary>
/// <remarks>
/// <para>
/// A gradient stop is a specific color that is defined for a location within the gradient region. The color of the gradient changes
/// between the gradient stops of the gradient. The area and absolute location of the gradient is defined by the gradient interface.
/// The offset is a relative location within the gradient region and is measured between 0.0 and 1.0. An offset of 0.0 is the
/// beginning of the gradient and 1.0 is the end. Gradient stops can be defined for any offset within the range, including the end
/// points. This interface describes one and only one stop in a gradient.
/// </para>
/// <para>
/// The gradient path is the straight line that connects the start point and the end point of a linear gradient. The gradient region
/// of a linear gradient consists of the area between the start point and the end point, including those points, and extends in both
/// directions at a right angle to the gradient path. The spread area is the area outside the gradient region.
/// </para>
/// <para>
/// Gradient stops define the color at a specific location along the gradient path; the color is interpolated along the gradient
/// path between the gradient stops. In the example that follows, the gradient region fills the image, so there is no spread area.
/// </para>
/// <para>
/// For gradient stops used in linear-gradient brushes, the offset value of 0.0 corresponds to the start point of the gradient path,
/// and the offset value of 1.0 corresponds to the end point. To determine the location of a gradient stop between these two points,
/// intermediate offset values are interpolated between them. The following illustration shows two intermediate gradient stops, one
/// at an offset of 0.25 and another at 0.75.
/// </para>
/// <para>
/// For gradient stops used in radial-gradient brushes, the offset value of 0.0 corresponds to the gradient origin location, and the
/// offset value of 1.0 corresponds to the circumference of the ellipse that bounds the gradient. Offsets between 0.0 and 1.0 define
/// an ellipse that is interpolated between the gradient origin and the bounding ellipse. The illustration that follows has one
/// intermediate gradient stop at an offset of 0.50 (Gradient stop 1). The gradient is using the <c>XPS_SPREAD_METHOD_REFLECT</c>
/// spread method to fill the space outside of the gradient region.
/// </para>
/// <para>The calculations that are used to render a gradient are described in the XML Paper Specification.</para>
/// <para>The code example that follows illustrates how to create an instance of this interface.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomgradientstop
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "e115d806-70c1-4c6a-810e-e6a058628b44")]
[ComImport, Guid("5CF4F5CC-3969-49B5-A70A-5550B618FE49"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGradientStop
{
/// <summary>Gets a pointer to the IXpsOMGradientBrush interface that contains the gradient stop.</summary>
/// <returns>
/// A pointer to the IXpsOMGradientBrush interface that contains the gradient stop. If the gradient stop is not assigned to a
/// gradient brush, a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstop-getowner HRESULT
// GetOwner( IXpsOMGradientBrush **owner );
IXpsOMGradientBrush GetOwner();
/// <summary>Gets the offset value of the gradient stop.</summary>
/// <returns>The offset value of the gradient stop, expressed as a fraction of the gradient path.</returns>
/// <remarks>
/// The valid range of values returned in offset is 0.01.0. 0.0 is the start point of the gradient, 1.0 is the end point, and a
/// value between 0.0 and 1.0 is a location that is linearly interpolated between the start point and the end point.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstop-getoffset HRESULT
// GetOffset( FLOAT *offset );
float GetOffset();
/// <summary>Sets the offset location of the gradient stop.</summary>
/// <param name="offset">
/// <para>The offset value that describes the location of the gradient stop as a fraction of the gradient path.</para>
/// <para>The valid range of this parameter is 0.0 &lt;= offset &lt;= 1.0.</para>
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstop-setoffset HRESULT
// SetOffset( FLOAT offset );
void SetOffset([In] float offset);
/// <summary>Gets the color value and color profile of the gradient stop.</summary>
/// <param name="color">The color value of the gradient stop.</param>
/// <returns>
/// A pointer to the IXpsOMColorProfileResource interface that contains the color profile to be used. If no color profile
/// resource has been set, a <c>NULL</c> pointer is returned. See remarks.
/// </returns>
/// <remarks>A color profile is only returned when the color type of color is XPS_COLOR_TYPE_CONTEXT.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstop-getcolor HRESULT
// GetColor( XPS_COLOR *color, IXpsOMColorProfileResource **colorProfile );
IXpsOMColorProfileResource GetColor(out XPS_COLOR color);
/// <summary>Sets the color value and color profile of the gradient stop.</summary>
/// <param name="color">
/// <para>The color value to be set at the gradient stop.</para>
/// <para>
/// If the value of the <c>colorType</c> field in the XPS_COLOR structure that is passed in this parameter is
/// XPS_COLOR_TYPE_CONTEXT, a valid color profile must be provided in the colorProfile parameter.
/// </para>
/// </param>
/// <param name="colorProfile">
/// <para>The color profile to be used with color.</para>
/// <para>
/// A color profile is required when the value of the <c>colorType</c> field in the XPS_COLOR structure that is passed in the
/// color parameter is XPS_COLOR_TYPE_CONTEXT. If the value of the <c>colorType</c> field is not <c>XPS_COLOR_TYPE_CONTEXT</c>,
/// this parameter must be set to <c>NULL</c>.
/// </para>
/// </param>
/// <remarks>A color profile is only required when the color type of color is XPS_COLOR_TYPE_CONTEXT.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstop-setcolor HRESULT
// SetColor( const XPS_COLOR *color, IXpsOMColorProfileResource *colorProfile );
void SetColor(in XPS_COLOR color, [In] IXpsOMColorProfileResource colorProfile);
/// <summary>Makes a deep copy of the IXpsOMGradientStop interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
/// <remarks>
/// <para>The owner of the new interface is <c>NULL</c>.</para>
/// <para>This method does not update any of the resource pointers in the IXpsOMGradientStop interface returned in gradientStop.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstop-clone HRESULT Clone(
// IXpsOMGradientStop **gradientStop );
IXpsOMGradientStop Clone();
}
/// <summary>A collection of IXpsOMGradientStop interface pointers.</summary>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomgradientstopcollection
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "1f51f818-e9bb-4d88-9795-4e6890d24b8c")]
[ComImport, Guid("C9174C3A-3CD3-4319-BDA4-11A39392CEEF"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMGradientStopCollection
{
/// <summary>Gets the number of IXpsOMGradientStop interface pointers in the collection.</summary>
/// <returns>The number of IXpsOMGradientStop interface pointers in the collection.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstopcollection-getcount
// HRESULT GetCount( UINT32 *count );
uint GetCount();
/// <summary>Gets an IXpsOMGradientStop interface pointer from a specified location in the collection.</summary>
/// <param name="index">The zero-based index of the IXpsOMGradientStop interface pointer to be obtained.</param>
/// <returns>The IXpsOMGradientStop interface pointer at the location specified by index.</returns>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstopcollection-getat
// HRESULT GetAt( UINT32 index, IXpsOMGradientStop **stop );
IXpsOMGradientStop GetAt([In] uint index);
/// <summary>Inserts an IXpsOMGradientStop interface pointer at a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection where the interface pointer that is passed in stop is to be inserted.
/// </param>
/// <param name="stop">The IXpsOMGradientStop interface pointer to be inserted at the location specified by index.</param>
/// <remarks>
/// <para>
/// At the location specified by index, this method inserts the IXpsOMGradientStop interface pointer that is passed in stop.
/// Prior to the insertion, the pointer in this and all subsequent locations is moved up by one index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstopcollection-insertat
// HRESULT InsertAt( UINT32 index, IXpsOMGradientStop *stop );
void InsertAt([In] uint index, [In] IXpsOMGradientStop stop);
/// <summary>Removes and releases an IXpsOMGradientStop interface pointer from a specified location in the collection.</summary>
/// <param name="index">
/// The zero-based index in the collection from which an IXpsOMGradientStop interface pointer is to be removed and released.
/// </param>
/// <remarks>
/// <para>
/// This method releases the IXpsOMGradientStop interface referenced by the pointer at the location specified by index. After
/// releasing the interface, this method compacts the collection by reducing by 1 the index of each pointer subsequent to index.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstopcollection-removeat
// HRESULT RemoveAt( UINT32 index );
void RemoveAt([In] uint index);
/// <summary>Replaces an IXpsOMGradientStop interface pointer at a specified location in the collection.</summary>
/// <param name="index">The zero-based index in the collection where an IXpsOMGradientStop interface pointer is to be replaced.</param>
/// <param name="stop">
/// The IXpsOMGradientStop interface pointer that will replace current contents at the location specified by index.
/// </param>
/// <remarks>
/// <para>
/// At the location specified by index, this method releases the IXpsOMGradientStop interface referenced by the existing
/// pointer, then writes the pointer that is passed in stop.
/// </para>
/// <para>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstopcollection-setat
// HRESULT SetAt( UINT32 index, IXpsOMGradientStop *stop );
void SetAt([In] uint index, [In] IXpsOMGradientStop stop);
/// <summary>Appends an IXpsOMGradientStop interface to the end of the collection.</summary>
/// <param name="stop">A pointer to the IXpsOMGradientStop interface that is to be appended to the collection.</param>
/// <remarks>For more information about the collection methods, see Working with XPS OM Collection Interfaces.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomgradientstopcollection-append
// HRESULT Append( IXpsOMGradientStop *stop );
void Append([In] IXpsOMGradientStop stop);
}
/// <summary>A brush that uses a raster image as a source.</summary>
/// <remarks>
/// <para>
/// The image used by this brush is defined in a coordinate space that is specified by the image's resolution. The image type must
/// be JPEG, PNG, TIFF 6.0, or HD Photo.
/// </para>
/// <para>The code example that follows illustrates how to create an instance of this interface.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomimagebrush
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "f5478582-466b-496e-b7f3-42fb8caa6814")]
[ComImport, Guid("3DF0B466-D382-49EF-8550-DD94C80242E4"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMImageBrush : IXpsOMTileBrush
{
/// <summary>Gets the <c>IUnknown</c> interface of the parent.</summary>
/// <returns>A pointer to the <c>IUnknown</c> interface of the parent.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-getowner HRESULT
// GetOwner( IUnknown **owner );
[return: MarshalAs(UnmanagedType.IUnknown)]
new object GetOwner();
/// <summary>Gets the object type of the interface.</summary>
/// <returns>The XPS_OBJECT_TYPE value that describes the interface that is derived from IXpsOMShareable.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomshareable-gettype HRESULT GetType(
// XPS_OBJECT_TYPE *type );
new XPS_OBJECT_TYPE GetType();
/// <summary>Gets the opacity of the brush.</summary>
/// <returns>The opacity value of the brush.</returns>
/// <remarks>
/// opacity is expressed as a value between 0.0 and 1.0; 0.0 indicates that the brush is completely transparent, 0.5 that it is
/// 50 percent opaque, and 1.0 that it is completely opaque.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsombrush-getopacity HRESULT
// GetOpacity( FLOAT *opacity );
new float GetOpacity();
/// <summary>Sets the opacity of the brush.</summary>
/// <param name="opacity">The opacity value of the brush.</param>
/// <remarks>
/// <para>
/// opacity is expressed as a value between 0.0 and 1.0; 0.0 indicates that the brush is completely transparent, 0.5 that it is
/// 50 percent opaque, and 1.0 that it is completely opaque.
/// </para>
/// <para>If opacity is less than 0.0 or greater than 1.0, the method returns an error.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsombrush-setopacity HRESULT
// SetOpacity( FLOAT opacity );
new void SetOpacity([In] float opacity);
/// <summary>Gets a pointer to the IXpsOMMatrixTransform interface that contains the resolved matrix transform for the brush.</summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the resolved matrix transform for the brush. If a matrix
/// transform has not been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <para>The value that is returned in this parameter depends on which method has most recently been called to set the transform.</para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The transform which is retrieved, using a lookup key that matches the key that is set by SetTransformLookup, from the
/// resource directory.
/// </term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// The transform determines how the output area is transformed before the brush image is rendered in the path, stroke, or glyph
/// that is using the tile brush.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-gettransform HRESULT
// GetTransform( IXpsOMMatrixTransform **transform );
new IXpsOMMatrixTransform GetTransform();
/// <summary>
/// Gets a pointer to the IXpsOMMatrixTransform interface that contains the local, unshared resolved matrix transform for the brush.
/// </summary>
/// <returns>
/// <para>
/// A pointer to the IXpsOMMatrixTransform interface that contains the local, unshared resolved matrix transform for the brush.
/// If a local matrix transform has not been set or if a matrix transform lookup key has been set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The transform that is set by SetTransformLocal.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// The transform determines how the output area is transformed before the brush image is rendered in the path, stroke, or glyph
/// that is using the tile brush.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-gettransformlocal HRESULT
// GetTransformLocal( IXpsOMMatrixTransform **transform );
new IXpsOMMatrixTransform GetTransformLocal();
/// <summary>Sets the IXpsOMMatrixTransform interface pointer to a local, unshared matrix transform.</summary>
/// <param name="transform">
/// A pointer to the IXpsOMMatrixTransform interface to be set as the local, unshared matrix transform. If a local transform has
/// been set, a <c>NULL</c> pointer will release it.
/// </param>
/// <remarks>
/// <para>
/// The transform determines how the output area is transformed before the brush image is rendered in the path, stroke, or glyph
/// that is using the tile brush.
/// </para>
/// <para>
/// After you call <c>SetTransformLocal</c>, the transform lookup key is released and GetTransformLookup returns a <c>NULL</c>
/// pointer in the key parameter. The table that follows explains the relationship between the local and lookup values of this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in transform by GetTransformLocal</term>
/// <term>String that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal (this method)</term>
/// <term>The transform that is set by SetTransformLocal.</term>
/// <term>The transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>
/// The transform which is retrieved, using a lookup key that matches the key that is set by SetTransformLookup, from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-settransformlocal HRESULT
// SetTransformLocal( IXpsOMMatrixTransform *transform );
new void SetTransformLocal([In] IXpsOMMatrixTransform transform);
/// <summary>
/// Gets the lookup key that identifies the IXpsOMMatrixTransform interface in a resource dictionary that contains the resolved
/// matrix transform for the brush.
/// </summary>
/// <returns>
/// <para>
/// The lookup key that identifies the IXpsOMMatrixTransform interface in a resource dictionary that contains the resolved
/// matrix transform for the brush. If a matrix transform lookup key has not been set or if a local matrix transform has been
/// set, a <c>NULL</c> pointer is returned.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in key</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup</term>
/// <term>The lookup key set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// The transform determines how the output area is transformed before the brush image is rendered in the path, stroke, or glyph
/// that is using the tile brush.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-gettransformlookup
// HRESULT GetTransformLookup( LPWSTR *key );
[return: MarshalAs(UnmanagedType.LPWStr)]
new string GetTransformLookup();
/// <summary>
/// Sets the lookup key name of a shared matrix transform that will be used as the transform for this brush.The shared matrix
/// transform that is referenced by the lookup key is stored in the resource dictionary.
/// </summary>
/// <param name="key">
/// A string variable that contains the lookup key name of a shared matrix transform in the resource dictionary. If a lookup key
/// has already been set, a <c>NULL</c> pointer will clear it.
/// </param>
/// <remarks>
/// <para>
/// The transform is applied before the brush image is rendered in the path, stroke, or glyph that is using the tile brush. The
/// tile brush has only one transform, which can be local or remote.
/// </para>
/// <para>
/// After you call <c>SetTransformLookup</c>, the local transform is released and GetTransformLocal returns a <c>NULL</c>
/// pointer in the transform parameter. The table that follows explains the relationship between the local and lookup values of
/// this property.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Most recent method called</term>
/// <term>Object that is returned in transform by GetTransform</term>
/// <term>Object that is returned in transform by GetTransformLocal</term>
/// <term>String that is returned in key by GetTransformLookup</term>
/// </listheader>
/// <item>
/// <term>SetTransformLocal</term>
/// <term>The transform that is set by SetTransformLocal.</term>
/// <term>The transform that is set by SetTransformLocal.</term>
/// <term>NULL pointer.</term>
/// </item>
/// <item>
/// <term>SetTransformLookup (this method)</term>
/// <term>
/// The transform which is retrieved—using a lookup key that matches the key that is set by SetTransformLookup— from the
/// resource directory.
/// </term>
/// <term>NULL pointer.</term>
/// <term>The lookup key that is set by SetTransformLookup.</term>
/// </item>
/// <item>
/// <term>Neither SetTransformLocal nor SetTransformLookup has been called yet.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// <term>NULL pointer.</term>
/// </item>
/// </list>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-settransformlookup
// HRESULT SetTransformLookup( LPCWSTR key );
new void SetTransformLookup([In, MarshalAs(UnmanagedType.LPWStr)] string key);
/// <summary>Gets the portion of the source image to be used by the tile.</summary>
/// <returns>The XPS_RECT structure that describes the area of the source content to be used by the tile.</returns>
/// <remarks>
/// <para>The brush's viewbox specifies the portion of a source image or visual to be used as the tile image.</para>
/// <para>
/// The coordinates of the brush's viewbox are relative to the source content, such that (0,0) specifies the upper-left corner
/// of the source content. For images, dimensions specified by the brush's viewbox are expressed in the units of 1/96". The
/// corresponding pixel coordinates in the source image are calculated as follows:
/// </para>
/// <para>
/// In the illustration that follows, the image on the left is an example of a source image, the image in the center shows the
/// selected viewbox, and the image on the right shows the resulting brush.
/// </para>
/// <para>
/// If the source image resolution is 96 by 96 dots per inch and image dimensions are 96 by 96 pixels, the values of fields in
/// the viewbox parameter would be:
/// </para>
/// <para>The preceding parameter values correspond to the source image as:</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-getviewbox HRESULT
// GetViewbox( XPS_RECT *viewbox );
new XPS_RECT GetViewbox();
/// <summary>Sets the portion of the source content to be used as the tile image.</summary>
/// <param name="viewbox">An XPS_RECT structure that describes the portion of the source content to be used as the tile image.</param>
/// <remarks>
/// <para>The brush's viewbox specifies the portion of a source image or visual to be used as the tile image.</para>
/// <para>
/// The coordinates of the brush's viewbox are relative to the source content, such that (0,0) specifies the upper-left corner
/// of the source content. For images, dimensions specified by the brush's viewbox are expressed in the units of 1/96". The
/// corresponding pixel coordinates in the source image are calculated as follows:
/// </para>
/// <para>
/// In the illustration that follows, the image on the left is an example of a source image, while that on the right is the
/// source image with the selected viewbox for the brush shown as a red rectangle. In this example, the part of the source image
/// that is used as the content for the tile brush is the area within the red rectangle. The shaded area of the image is not
/// used by the brush.
/// </para>
/// <para>
/// If the source image resolution is 96 by 96 dots per inch and image dimensions are 96 by 96 pixels, the values of fields in
/// the viewbox parameter would be:
/// </para>
/// <para>The preceding parameter values correspond to the source image as:</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-setviewbox HRESULT
// SetViewbox( const XPS_RECT *viewbox );
new void SetViewbox(in XPS_RECT viewbox);
/// <summary>Gets the portion of the destination geometry that is covered by a single tile.</summary>
/// <returns>The XPS_RECT structure that describes the portion of the destination geometry that is covered by a single tile.</returns>
/// <remarks>
/// The viewport is the portion of the output area where the first tile is drawn. In the illustration, the viewport is outlined
/// by the purple rectangle inside the red, dotted rectangle. The tile mode of the brush determines how the rest of the tiles
/// are drawn in the output area.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-getviewport HRESULT
// GetViewport( XPS_RECT *viewport );
new XPS_RECT GetViewport();
/// <summary>Sets the portion of the destination geometry that is covered by a single tile.</summary>
/// <param name="viewport">
/// An XPS_RECT structure that describes the portion of the destination geometry that is covered by a single tile.
/// </param>
/// <remarks>
/// The viewport is the portion of the output area where the tile is drawn. In the following illustration, the viewport is
/// outlined by the blue rectangle inside the red, dotted rectangle. The tile mode of the brush determines how other tiles are
/// drawn in the output area.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-setviewport HRESULT
// SetViewport( const XPS_RECT *viewport );
new void SetViewport(in XPS_RECT viewport);
/// <summary>Gets the XPS_TILE_MODE value that describes the tile mode of the brush.</summary>
/// <returns>The XPS_TILE_MODE value that describes the tile mode of the brush.</returns>
/// <remarks>
/// The tile mode determines how the tile image is repeated to fill the output area. If the tile mode value is
/// XPS_TILE_MODE_NONE, the tile image is drawn only once. The following illustration shows examples of how the tile image
/// appears in several tile modes.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-gettilemode HRESULT
// GetTileMode( XPS_TILE_MODE *tileMode );
new XPS_TILE_MODE GetTileMode();
/// <summary>Sets the XPS_TILE_MODE value that describes the tiling mode of the brush.</summary>
/// <param name="tileMode">The XPS_TILE_MODE value to be set.</param>
/// <remarks>
/// The tile mode determines how the tile image is repeated to fill the output area. If the tile mode value is
/// XPS_TILE_MODE_NONE, the tile image is drawn only once.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomtilebrush-settilemode HRESULT
// SetTileMode( XPS_TILE_MODE tileMode );
new void SetTileMode([In] XPS_TILE_MODE tileMode);
/// <summary>
/// Gets a pointer to the IXpsOMImageResource interface, which contains the image resource to be used as the source for the brush.
/// </summary>
/// <returns>
/// A pointer to the IXpsOMImageResource interface that contains the image resource to be used as the source for the brush.
/// </returns>
/// <remarks>
/// After loading and parsing the resource into the XPS OM, this method might return an error that applies to another resource.
/// This occurs because all of the relationships are parsed when a resource is loaded.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimagebrush-getimageresource HRESULT
// GetImageResource( IXpsOMImageResource **imageResource );
IXpsOMImageResource GetImageResource();
/// <summary>
/// Sets a pointer to the IXpsOMImageResource interface that contains the image resource to be used as the source for the brush.
/// </summary>
/// <param name="imageResource">
/// The image resource to be used as the source for the brush. This parameter must not be a <c>NULL</c> pointer.
/// </param>
/// <remarks>The image resource must be of type JPEG, PNG, TIFF 6.0, or HD Photo.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimagebrush-setimageresource HRESULT
// SetImageResource( IXpsOMImageResource *imageResource );
void SetImageResource([In] IXpsOMImageResource imageResource);
/// <summary>
/// Gets a pointer to the IXpsOMColorProfileResource interface, which contains the color profile resource that is associated
/// with the image.
/// </summary>
/// <returns>
/// A pointer to the IXpsOMColorProfileResource interface that contains the color profile resource that is associated with the
/// image. If no color profile resource has been set, a <c>NULL</c> pointer is returned.
/// </returns>
/// <remarks>
/// After loading and parsing the resource into the XPS OM, this method might return an error that applies to another resource.
/// This occurs because all of the relationships are parsed when a resource is loaded.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimagebrush-getcolorprofileresource
// HRESULT GetColorProfileResource( IXpsOMColorProfileResource **colorProfileResource );
IXpsOMColorProfileResource GetColorProfileResource();
/// <summary>
/// Sets a pointer to the IXpsOMColorProfileResource interface, which contains the color profile resource that is associated
/// with the image.
/// </summary>
/// <param name="colorProfileResource">
/// The color profile resource that is associated with the image. A <c>NULL</c> pointer will release any previously set color
/// profile resources.
/// </param>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimagebrush-setcolorprofileresource
// HRESULT SetColorProfileResource( IXpsOMColorProfileResource *colorProfileResource );
void SetColorProfileResource([In] IXpsOMColorProfileResource colorProfileResource);
/// <summary>Makes a deep copy of the interface.</summary>
/// <returns>A pointer to the copy of the interface.</returns>
/// <remarks>This method does not update any of the resource pointers in the copy.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimagebrush-clone HRESULT Clone(
// IXpsOMImageBrush **imageBrush );
IXpsOMImageBrush Clone();
}
/// <summary>Provides an IStream interface to an image resource.</summary>
/// <remarks>The code example that follows illustrates how to create an instance of this interface.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomimageresource
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "89a1530e-fa87-45bf-a1da-c8656ec09ba3")]
[ComImport, Guid("3DB8417D-AE50-485E-9A44-D7758F78A23F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IXpsOMImageResource : IXpsOMResource
{
/// <summary>Gets the name that will be used when the part is serialized.</summary>
/// <returns>
/// A pointer to the IOpcPartUri interface that contains the part name. If the part name has not been set (by the SetPartName
/// method), a <c>NULL</c> pointer is returned.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-getpartname HRESULT
// GetPartName( IOpcPartUri **partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new IOpcPartUri GetPartName();
/// <summary>Sets the name that will be used when the part is serialized.</summary>
/// <param name="partUri">
/// A pointer to the IOpcPartUri interface that contains the name of this part. This parameter cannot be <c>NULL</c>.
/// </param>
/// <remarks>
/// IXpsOMPackageWriter will generate an error if it encounters an XPS document part whose name is the same as that of a part it
/// has previously serialized.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsompart-setpartname HRESULT
// SetPartName( IOpcPartUri *partUri );
[MethodImpl(MethodImplOptions.InternalCall)]
new void SetPartName([In] IOpcPartUri partUri);
/// <summary>Gets a new, read-only copy of the stream that is associated with this resource.</summary>
/// <returns>A new, read-only copy of the stream that is associated with this resource.</returns>
/// <remarks>
/// <para>
/// The IStream object returned by this method might return an error of E_PENDING, which indicates that the stream length has
/// not been determined yet. This behavior is different from that of a standard <c>IStream</c> object.
/// </para>
/// <para>
/// This method calls the stream's <c>Clone</c> method to create the stream returned in stream. As a result, the performance of
/// this method will depend on that of the stream's <c>Clone</c> method.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimageresource-getstream HRESULT
// GetStream( IStream **readerStream );
[MethodImpl(MethodImplOptions.InternalCall)]
IStream GetStream();
/// <summary>Sets the read-only stream to be associated with this resource.</summary>
/// <param name="sourceStream">The read-only stream to be associated with this resource.</param>
/// <param name="imageType">The XPS_IMAGE_TYPE value that describes the type of image in the stream.</param>
/// <param name="partName">The part name to be assigned to this resource.</param>
/// <remarks>
/// <para>
/// The calling method should treat this stream as a single-threaded apartment (STA) model object and not re-enter any of the
/// stream interface's methods.
/// </para>
/// <para>
/// Because GetStream gets a clone of the stream that is set by this method, the provided stream should have an efficient
/// cloning method. A stream with an inefficient cloning method will reduce the performance of <c>GetStream</c>.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimageresource-setcontent HRESULT
// SetContent( IStream *sourceStream, XPS_IMAGE_TYPE imageType, IOpcPartUri *partName );
[MethodImpl(MethodImplOptions.InternalCall)]
void SetContent([In] IStream sourceStream, [In] XPS_IMAGE_TYPE imageType, [In] IOpcPartUri partName);
/// <summary>Gets the type of image resource.</summary>
/// <returns>The XPS_IMAGE_TYPE value that describes the image type in the stream.</returns>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/nf-xpsobjectmodel-ixpsomimageresource-getimagetype HRESULT
// GetImageType( XPS_IMAGE_TYPE *imageType );
[MethodImpl(MethodImplOptions.InternalCall)]
XPS_IMAGE_TYPE GetImageType();
}
/// <summary>Represents an x- and y-coordinate pair in two-dimensional space.</summary>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/ns-xpsobjectmodel-xps_point typedef struct
// __MIDL___MIDL_itf_xpsobjectmodel_0000_0000_0017 { FLOAT x; FLOAT y; } XPS_POINT;
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "NS:xpsobjectmodel.__MIDL___MIDL_itf_xpsobjectmodel_0000_0000_0017")]
[StructLayout(LayoutKind.Sequential)]
public struct XPS_POINT
{
/// <summary>The x-coordinate of a point.</summary>
public float x;
/// <summary>The y-coordinate of a point.</summary>
public float y;
}
/// <summary>Describes the width, height, and location of a rectangle.</summary>
/// <remarks>The measurement units depend on the context and are not specified in the structure.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/ns-xpsobjectmodel-xps_rect typedef struct
// __MIDL___MIDL_itf_xpsobjectmodel_0000_0000_0019 { FLOAT x; FLOAT y; FLOAT width; FLOAT height; } XPS_RECT;
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "NS:xpsobjectmodel.__MIDL___MIDL_itf_xpsobjectmodel_0000_0000_0019")]
[StructLayout(LayoutKind.Sequential)]
public struct XPS_RECT
{
/// <summary>The x-coordinate of the rectangle's left side.</summary>
public float x;
/// <summary>The y-coordinate of the rectangle's top side.</summary>
public float y;
/// <summary>A non-negative value that represents the object's size in the horizontal (x) dimension.</summary>
public float width;
/// <summary>A non-negative value that represents the object's size in the vertical (y) dimension.</summary>
public float height;
}
/// <summary>Describes the size of an object.</summary>
/// <remarks>The measurement units are not specified in the structure.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/xpsobjectmodel/ns-xpsobjectmodel-xps_size typedef struct
// __MIDL___MIDL_itf_xpsobjectmodel_0000_0000_0018 { FLOAT width; FLOAT height; } XPS_SIZE;
[PInvokeData("xpsobjectmodel.h", MSDNShortId = "NS:xpsobjectmodel.__MIDL___MIDL_itf_xpsobjectmodel_0000_0000_0018")]
[StructLayout(LayoutKind.Sequential)]
public struct XPS_SIZE
{
/// <summary>A non-negative value that represents the object's size in the horizontal (x) dimension.</summary>
public float width;
/// <summary>A non-negative value that represents the object's size in the vertical (y) dimension.</summary>
public float height;
}
}
}