diff --git a/include/Makefile.in b/include/Makefile.in index 302e0bb2a73..e5ae8429ed0 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -879,4 +879,6 @@ SOURCES = \ xmldso.idl \ xmldsodid.h \ xmllite.idl \ + xpsobjectmodel.idl \ + xpsobjectmodel_1.idl \ zmouse.h diff --git a/include/xpsobjectmodel.idl b/include/xpsobjectmodel.idl new file mode 100644 index 00000000000..8f8a8313bd1 --- /dev/null +++ b/include/xpsobjectmodel.idl @@ -0,0 +1,546 @@ +/* + * Copyright 2021 Nikolay Sivov for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "msopc.idl"; + +interface IXpsOMPrintTicketResource; +interface IXpsOMDocumentStructureResource; +interface IXpsOMSignatureBlockResourceCollection; +interface IXpsOMPartUriCollection; +interface IXpsOMPage; +interface IXpsOMStoryFragmentsResource; +interface IXpsOMImageResource; +interface IXpsOMResource; +interface IXpsOMObjectFactory; +interface IXpsOMSignatureBlockResource; +interface IXpsOMDictionary; +interface IXpsOMRemoteDictionaryResource; +interface IXpsOMPartResources; +interface IXpsOMDocument; +interface IXpsOMPageReference; +interface IXpsOMCanvas; +interface IXpsOMFontResource; +interface IXpsOMGlyphs; +interface IXpsOMPath; +interface IXpsOMGeometry; +interface IXpsOMGeometryFigure; +interface IXpsOMMatrixTransform; +interface IXpsOMColorProfileResource; +interface IXpsOMSolidColorBrush; +interface IXpsOMImageBrush; +interface IXpsOMVisualBrush; +interface IXpsOMGradientStop; +interface IXpsOMLinearGradientBrush; +interface IXpsOMRadialGradientBrush; +interface IXpsOMCoreProperties; +interface IXpsOMPackageWriter; +interface IXpsOMPackage; + +typedef [v1_enum] enum +{ + XPS_COLOR_TYPE_SRGB = 1, + XPS_COLOR_TYPE_SCRGB, + XPS_COLOR_TYPE_CONTEXT +} XPS_COLOR_TYPE; + +typedef [v1_enum] enum +{ + XPS_IMAGE_TYPE_JPEG = 1, + XPS_IMAGE_TYPE_PNG, + XPS_IMAGE_TYPE_TIFF, + XPS_IMAGE_TYPE_WDP, + XPS_IMAGE_TYPE_JXR +} XPS_IMAGE_TYPE; + +typedef [v1_enum] enum +{ + XPS_FONT_EMBEDDING_NORMAL = 1, + XPS_FONT_EMBEDDING_OBFUSCATED, + XPS_FONT_EMBEDDING_RESTRICTED, + XPS_FONT_EMBEDDING_RESTRICTED_UNOBFUSCATED +} XPS_FONT_EMBEDDING; + +typedef [v1_enum] enum +{ + XPS_INTERLEAVING_OFF = 1, + XPS_INTERLEAVING_ON, +} XPS_INTERLEAVING; + +typedef struct +{ + FLOAT width; + FLOAT height; +} XPS_SIZE; + +typedef struct +{ + FLOAT x; + FLOAT y; +} XPS_POINT; + +typedef struct +{ + FLOAT x; + FLOAT y; + FLOAT width; + FLOAT height; +} XPS_RECT; + +typedef struct +{ + FLOAT m11; + FLOAT m12; + FLOAT m21; + FLOAT m22; + FLOAT m31; + FLOAT m32; +} XPS_MATRIX; + +typedef union switch (XPS_COLOR_TYPE colorType) value +{ + case XPS_COLOR_TYPE_SRGB: + struct + { + UINT8 alpha, red, green, blue; + } sRGB; + case XPS_COLOR_TYPE_SCRGB: + struct + { + FLOAT alpha, red, green, blue; + } scRGB; + case XPS_COLOR_TYPE_CONTEXT: + struct + { + UINT8 channelCount; + FLOAT channels[9]; + } context; +} XPS_COLOR; + +[ + object, + uuid(74eb2f0b-a91e-4486-afac-0fabeca3dfc6) +] +interface IXpsOMPart : IUnknown +{ + HRESULT GetPartName( + [out, retval] IOpcPartUri **partUri + ); + + HRESULT SetPartName( + [in] IOpcPartUri *partUri + ); +} + +[ + object, + pointer_default(ref), + uuid(d1c87f0d-e947-4754-8a25-971478f7e83e) +] +interface IXpsOMDocumentCollection : IUnknown +{ + HRESULT GetCount( + [out, retval] UINT32 *count + ); + + HRESULT GetAt( + [in] UINT32 index, + [out, retval] IXpsOMDocument **document + ); + + HRESULT InsertAt( + [in] UINT32 index, + [in] IXpsOMDocument *document + ); + + HRESULT RemoveAt( + [in] UINT32 index + ); + + HRESULT SetAt( + [in] UINT32 index, + [in] IXpsOMDocument *document + ); + + HRESULT Append( + [in] IXpsOMDocument *document + ); +} + +[ + object, + pointer_default(ref), + uuid(56492eb4-d8d5-425e-8256-4c2b64ad0264) +] +interface IXpsOMDocumentSequence : IXpsOMPart +{ + HRESULT GetOwner( + [out, retval] IXpsOMPackage **package + ); + + HRESULT GetDocuments( + [out, retval] IXpsOMDocumentCollection **documents + ); + + HRESULT GetPrintTicketResource( + [out, retval] IXpsOMPrintTicketResource **printTicketResource + ); + + HRESULT SetPrintTicketResource( + [in] IXpsOMPrintTicketResource *printTicketResource + ); +} + +[ + object, + local, + pointer_default(ref), + uuid(18c3df65-81e1-4674-91dc-fc452f5a416f) +] +interface IXpsOMPackage : IUnknown +{ + HRESULT GetDocumentSequence( + [out, retval] IXpsOMDocumentSequence **documentSequence + ); + + HRESULT SetDocumentSequence( + [in] IXpsOMDocumentSequence *documentSequence + ); + + HRESULT GetCoreProperties( + [out, retval] IXpsOMCoreProperties **coreProperties + ); + + HRESULT SetCoreProperties( + [in] IXpsOMCoreProperties *coreProperties + ); + + HRESULT GetDiscardControlPartName( + [out, retval] IOpcPartUri **discardControlPartUri + ); + + HRESULT SetDiscardControlPartName( + [in] IOpcPartUri *discardControlPartUri + ); + + HRESULT GetThumbnailResource( + [out, retval] IXpsOMImageResource **imageResource + ); + + HRESULT SetThumbnailResource( + [in] IXpsOMImageResource *imageResource + ); + + HRESULT WriteToFile( + [in, string] LPCWSTR fileName, + [in, unique] LPSECURITY_ATTRIBUTES securityAttributes, + [in] DWORD flagsAndAttributes, + [in] BOOL optimizeMarkupSize + ); + + HRESULT WriteToStream( + [in] ISequentialStream *stream, + [in] BOOL optimizeMarkupSize + ); +} + +[ + object, + local, + pointer_default(ref), + uuid(f9b2a685-a50d-4fc2-b764-b56e093ea0ca), +] +interface IXpsOMObjectFactory : IUnknown +{ + HRESULT CreatePackage( + [out, retval] IXpsOMPackage **package + ); + + HRESULT CreatePackageFromFile( + [in, string] LPCWSTR filename, + [in] BOOL reuseObjects, + [out, retval] IXpsOMPackage **package + ); + + HRESULT CreatePackageFromStream( + [in] IStream *stream, + [in] BOOL reuseObjects, + [out, retval] IXpsOMPackage **package + ); + + HRESULT CreateStoryFragmentsResource( + [in] IStream *acquiredStream, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMStoryFragmentsResource **storyFragmentsResource + ); + + HRESULT CreateDocumentStructureResource( + [in] IStream *acquiredStream, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMDocumentStructureResource **documentStructureResource + ); + + HRESULT CreateSignatureBlockResource( + [in] IStream *acquiredStream, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMSignatureBlockResource **signatureBlockResource + ); + + HRESULT CreateRemoteDictionaryResource( + [in] IXpsOMDictionary *dictionary, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMRemoteDictionaryResource **remoteDictionaryResource + ); + + HRESULT CreateRemoteDictionaryResourceFromStream( + [in] IStream *dictionaryMarkupStream, + [in] IOpcPartUri *dictionaryPartUri, + [in] IXpsOMPartResources *resources, + [out, retval] IXpsOMRemoteDictionaryResource **dictionaryResource + ); + + HRESULT CreatePartResources( + [out, retval] IXpsOMPartResources **partResources + ); + + HRESULT CreateDocumentSequence( + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMDocumentSequence **documentSequence + ); + + HRESULT CreateDocument( + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMDocument **document + ); + + HRESULT CreatePageReference( + [in] const XPS_SIZE *advisoryPageDimensions, + [out, retval] IXpsOMPageReference **pageReference + ); + + HRESULT CreatePage( + [in] const XPS_SIZE *pageDimensions, + [in, string] LPCWSTR language, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMPage **page + ); + + HRESULT CreatePageFromStream( + [in] IStream *pageMarkupStream, + [in] IOpcPartUri *partUri, + [in] IXpsOMPartResources *resources, + [in] BOOL reuseObjects, + [out, retval] IXpsOMPage **page + ); + + HRESULT CreateCanvas( + [out, retval] IXpsOMCanvas **canvas + ); + + HRESULT CreateGlyphs( + [in] IXpsOMFontResource *fontResource, + [out, retval] IXpsOMGlyphs **glyphs + ); + + HRESULT CreatePath( + [out, retval] IXpsOMPath **path + ); + + HRESULT CreateGeometry( + [out, retval] IXpsOMGeometry **geometry + ); + + HRESULT CreateGeometryFigure( + [in] const XPS_POINT *startPoint, + [out, retval] IXpsOMGeometryFigure **figure + ); + + HRESULT CreateMatrixTransform( + [in] const XPS_MATRIX *matrix, + [out, retval] IXpsOMMatrixTransform **transform + ); + + HRESULT CreateSolidColorBrush( + [in] const XPS_COLOR *color, + [in] IXpsOMColorProfileResource *colorProfile, + [out, retval] IXpsOMSolidColorBrush **solidColorBrush + ); + + HRESULT CreateColorProfileResource( + [in] IStream *acquiredStream, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMColorProfileResource **colorProfileResource + ); + + HRESULT CreateImageBrush( + [in] IXpsOMImageResource *image, + [in] const XPS_RECT *viewBox, + [in] const XPS_RECT *viewPort, + [out, retval] IXpsOMImageBrush **imageBrush + ); + + HRESULT CreateVisualBrush( + [in] const XPS_RECT *viewBox, + [in] const XPS_RECT *viewPort, + [out, retval] IXpsOMVisualBrush **visualBrush + ); + + HRESULT CreateImageResource( + [in] IStream *acquiredStream, + [in] XPS_IMAGE_TYPE contentType, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMImageResource **imageResource + ); + + HRESULT CreatePrintTicketResource( + [in] IStream *acquiredStream, + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMPrintTicketResource **printTicketResource + ); + + HRESULT CreateFontResource( + [in] IStream *acquiredStream, + [in] XPS_FONT_EMBEDDING fontEmbedding, + [in] IOpcPartUri *partUri, + [in] BOOL isObfSourceStream, + [out, retval] IXpsOMFontResource **fontResource + ); + + HRESULT CreateGradientStop( + [in] const XPS_COLOR *color, + [in] IXpsOMColorProfileResource *colorProfile, + [in] FLOAT offset, + [out, retval] IXpsOMGradientStop **gradientStop + ); + + HRESULT CreateLinearGradientBrush( + [in] IXpsOMGradientStop *gradStop1, + [in] IXpsOMGradientStop *gradStop2, + [in] const XPS_POINT *startPoint, + [in] const XPS_POINT *endPoint, + [out, retval] IXpsOMLinearGradientBrush **linearGradientBrush + ); + + HRESULT CreateRadialGradientBrush + ( + [in] IXpsOMGradientStop *gradStop1, + [in] IXpsOMGradientStop *gradStop2, + [in] const XPS_POINT *centerPoint, + [in] const XPS_POINT *gradientOrigin, + [in] const XPS_SIZE *radiiSizes, + [out, retval] IXpsOMRadialGradientBrush **radialGradientBrush + ); + + HRESULT CreateCoreProperties( + [in] IOpcPartUri *partUri, + [out, retval] IXpsOMCoreProperties **coreProperties + ); + + HRESULT CreateDictionary( + [out, retval] IXpsOMDictionary **dictionary + ); + + HRESULT CreatePartUriCollection( + [out, retval] IXpsOMPartUriCollection **partUriCollection + ); + + HRESULT CreatePackageWriterOnFile( + [in, string] LPCWSTR fileName, + [in, unique] LPSECURITY_ATTRIBUTES securityAttributes, + [in] DWORD flagsAndAttributes, + [in] BOOL optimizeMarkupSize, + [in] XPS_INTERLEAVING interleaving, + [in] IOpcPartUri *documentSequencePartName, + [in] IXpsOMCoreProperties *coreProperties, + [in] IXpsOMImageResource *packageThumbnail, + [in] IXpsOMPrintTicketResource *documentSequencePrintTicket, + [in] IOpcPartUri *discardControlPartName, + [out, retval] IXpsOMPackageWriter **packageWriter + ); + + HRESULT CreatePackageWriterOnStream + ( + [in] ISequentialStream *outputStream, + [in] BOOL optimizeMarkupSize, + [in] XPS_INTERLEAVING interleaving, + [in] IOpcPartUri *documentSequencePartName, + [in] IXpsOMCoreProperties *coreProperties, + [in] IXpsOMImageResource *packageThumbnail, + [in] IXpsOMPrintTicketResource *documentSequencePrintTicket, + [in] IOpcPartUri *discardControlPartName, + [out, retval] IXpsOMPackageWriter **packageWriter + ); + + HRESULT CreatePartUri( + [in, string] LPCWSTR uri, + [out, retval] IOpcPartUri **partUri + ); + + HRESULT CreateReadOnlyStreamOnFile( + [in, string] LPCWSTR filename, + [out, retval] IStream **stream + ); +} + +[ + object, + uuid(4e2aa182-a443-42c6-b41b-4f8e9de73ff9) +] +interface IXpsOMPackageWriter : IUnknown +{ + HRESULT StartNewDocument( + [in] IOpcPartUri *documentPartName, + [in] IXpsOMPrintTicketResource *documentPrintTicket, + [in] IXpsOMDocumentStructureResource *documentStructure, + [in] IXpsOMSignatureBlockResourceCollection *signatureBlockResources, + [in] IXpsOMPartUriCollection *restrictedFonts + ); + + HRESULT AddPage( + [in] IXpsOMPage *page, + [in] const XPS_SIZE *advisoryPageDimensions, + [in] IXpsOMPartUriCollection *discardableResourceParts, + [in] IXpsOMStoryFragmentsResource *storyFragments, + [in] IXpsOMPrintTicketResource *pagePrintTicket, + [in] IXpsOMImageResource *pageThumbnail + ); + + HRESULT AddResource( + [in] IXpsOMResource *resource + ); + + HRESULT Close(); + + HRESULT IsClosed( + [out, retval] BOOL *isClosed + ); +} + +[ + uuid(b47491a0-cf33-4fe4-9a48-b0acdae207e8) +] +library MSXPS +{ +[ + uuid(e974d26d-3d9b-4d47-88cc-3872f2dc3585) +] +coclass XpsOMObjectFactory +{ + interface IXpsOMObjectFactory; +} + +} diff --git a/include/xpsobjectmodel_1.idl b/include/xpsobjectmodel_1.idl new file mode 100644 index 00000000000..f10ffeb81a0 --- /dev/null +++ b/include/xpsobjectmodel_1.idl @@ -0,0 +1,49 @@ +/* + * Copyright 2021 Nikolay Sivov for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "xpsobjectmodel.idl"; + +typedef [v1_enum] enum +{ + XPS_DOCUMENT_TYPE_UNSPECIFIED = 1, + XPS_DOCUMENT_TYPE_XPS, + XPS_DOCUMENT_TYPE_OPENXPS +} XPS_DOCUMENT_TYPE; + +[ + object, + local, + pointer_default(ref), + uuid(3b0b6d38-53ad-41da-b212-d37637a6714e), +] +interface IXpsDocumentPackageTarget : IUnknown +{ + HRESULT GetXpsOMPackageWriter( + [in] IOpcPartUri *documentpart, + [in] IOpcPartUri *controlpart, + [out, retval] IXpsOMPackageWriter **writer + ); + + HRESULT GetXpsOMFactory( + [out, retval] IXpsOMObjectFactory **factory + ); + + HRESULT GetXpsType( + [out, retval] XPS_DOCUMENT_TYPE *document_type + ); +}