/* * Copyright 2017 Lucian Poston * * 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 "d2d1.idl"; interface ID2D1DeviceContext; interface ID2D1StrokeStyle1; interface ID2D1PathGeometry1; interface ID2D1DrawingStateBlock1; interface ID2D1GdiMetafile; interface ID2D1Properties; interface IPrintDocumentPackageTarget; interface ID2D1PrintControl; interface IWICImagingFactory; interface IWICColorContext; interface ID2D1ColorContext; interface ID2D1Effect; interface ID2D1GradientStopCollection1; interface ID2D1ImageBrush; interface ID2D1BitmapBrush1; interface ID2D1CommandList; cpp_quote("#ifndef __dwrite_h__") /* already defined in dwrite.h but needed for WIDL */ typedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION; cpp_quote("#endif /* __dwrite_h__ */") typedef enum D2D1_DEVICE_CONTEXT_OPTIONS { D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0x0, D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 0x1, D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_DEVICE_CONTEXT_OPTIONS; typedef enum D2D1_STROKE_TRANSFORM_TYPE { D2D1_STROKE_TRANSFORM_TYPE_NORMAL = 0x0, D2D1_STROKE_TRANSFORM_TYPE_FIXED = 0x1, D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE = 0x2, D2D1_STROKE_TRANSFORM_TYPE_FORCE_DWORD = 0xffffffff, } D2D1_STROKE_TRANSFORM_TYPE; typedef enum D2D1_PRIMITIVE_BLEND { D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0x0, D2D1_PRIMITIVE_BLEND_COPY = 0x1, D2D1_PRIMITIVE_BLEND_MIN = 0x2, D2D1_PRIMITIVE_BLEND_ADD = 0x3, D2D1_PRIMITIVE_BLEND_MAX = 0x4, D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff, } D2D1_PRIMITIVE_BLEND; typedef enum D2D1_UNIT_MODE { D2D1_UNIT_MODE_DIPS = 0x0, D2D1_UNIT_MODE_PIXELS = 0x1, D2D1_UNIT_MODE_FORCE_DWORD = 0xffffffff, } D2D1_UNIT_MODE; typedef enum D2D1_PRINT_FONT_SUBSET_MODE { D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT = 0x0, D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE = 0x1, D2D1_PRINT_FONT_SUBSET_MODE_NONE = 0x2, D2D1_PRINT_FONT_SUBSET_MODE_FORCE_DWORD = 0xffffffff, } D2D1_PRINT_FONT_SUBSET_MODE; typedef enum D2D1_COLOR_SPACE { D2D1_COLOR_SPACE_CUSTOM = 0x0, D2D1_COLOR_SPACE_SRGB = 0x1, D2D1_COLOR_SPACE_SCRGB = 0x2, D2D1_COLOR_SPACE_FORCE_DWORD = 0xffffffff, } D2D1_COLOR_SPACE; typedef enum D2D1_BITMAP_OPTIONS { D2D1_BITMAP_OPTIONS_NONE = 0x0, D2D1_BITMAP_OPTIONS_TARGET = 0x1, D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x2, D2D1_BITMAP_OPTIONS_CPU_READ = 0x4, D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x8, D2D1_BITMAP_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_BITMAP_OPTIONS; typedef enum D2D1_MAP_OPTIONS { D2D1_MAP_OPTIONS_NONE = 0x0, D2D1_MAP_OPTIONS_READ = 0x1, D2D1_MAP_OPTIONS_WRITE = 0x2, D2D1_MAP_OPTIONS_DISCARD = 0x4, D2D1_MAP_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_MAP_OPTIONS; typedef enum D2D1_BUFFER_PRECISION { D2D1_BUFFER_PRECISION_UNKNOWN = 0x0, D2D1_BUFFER_PRECISION_8BPC_UNORM = 0x1, D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB = 0x2, D2D1_BUFFER_PRECISION_16BPC_UNORM = 0x3, D2D1_BUFFER_PRECISION_16BPC_FLOAT = 0x4, D2D1_BUFFER_PRECISION_32BPC_FLOAT = 0x5, D2D1_BUFFER_PRECISION_FORCE_DWORD = 0xffffffff, } D2D1_BUFFER_PRECISION; typedef enum D2D1_COLOR_INTERPOLATION_MODE { D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT = 0x0, D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED = 0x1, D2D1_COLOR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff, } D2D1_COLOR_INTERPOLATION_MODE; typedef enum D2D1_INTERPOLATION_MODE { D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR, D2D1_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR, D2D1_INTERPOLATION_MODE_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC, D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR, D2D1_INTERPOLATION_MODE_ANISOTROPIC = D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC, D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC, D2D1_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff, } D2D1_INTERPOLATION_MODE; typedef enum D2D1_COMPOSITE_MODE { D2D1_COMPOSITE_MODE_SOURCE_OVER = 0x0, D2D1_COMPOSITE_MODE_DESTINATION_OVER = 0x1, D2D1_COMPOSITE_MODE_SOURCE_IN = 0x2, D2D1_COMPOSITE_MODE_DESTINATION_IN = 0x3, D2D1_COMPOSITE_MODE_SOURCE_OUT = 0x4, D2D1_COMPOSITE_MODE_DESTINATION_OUT = 0x5, D2D1_COMPOSITE_MODE_SOURCE_ATOP = 0x6, D2D1_COMPOSITE_MODE_DESTINATION_ATOP = 0x7, D2D1_COMPOSITE_MODE_XOR = 0x8, D2D1_COMPOSITE_MODE_PLUS = 0x9, D2D1_COMPOSITE_MODE_SOURCE_COPY = 0xa, D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY = 0xb, D2D1_COMPOSITE_MODE_MASK_INVERT = 0xc, D2D1_COMPOSITE_MODE_FORCE_DWORD = 0xffffffff, } D2D1_COMPOSITE_MODE; typedef enum D2D1_LAYER_OPTIONS1 { D2D1_LAYER_OPTIONS1_NONE = 0x0, D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND = 0x1, D2D1_LAYER_OPTIONS1_IGNORE_ALPHA = 0x2, D2D1_LAYER_OPTIONS1_FORCE_DWORD = 0xffffffff, } D2D1_LAYER_OPTIONS1; typedef struct D2D1_PROPERTY_BINDING D2D1_PROPERTY_BINDING; typedef D2D_MATRIX_4X4_F D2D1_MATRIX_4X4_F; typedef struct D2D1_STROKE_STYLE_PROPERTIES1 { D2D1_CAP_STYLE startCap; D2D1_CAP_STYLE endCap; D2D1_CAP_STYLE dashCap; D2D1_LINE_JOIN lineJoin; float miterLimit; D2D1_DASH_STYLE dashStyle; float dashOffset; D2D1_STROKE_TRANSFORM_TYPE transformType; } D2D1_STROKE_STYLE_PROPERTIES1; typedef struct D2D1_DRAWING_STATE_DESCRIPTION1 { D2D1_ANTIALIAS_MODE antialiasMode; D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode; D2D1_TAG tag1; D2D1_TAG tag2; D2D1_MATRIX_3X2_F transform; D2D1_PRIMITIVE_BLEND primitiveBlend; D2D1_UNIT_MODE unitMode; } D2D1_DRAWING_STATE_DESCRIPTION1; typedef struct D2D1_PRINT_CONTROL_PROPERTIES { D2D1_PRINT_FONT_SUBSET_MODE fontSubset; float rasterDPI; D2D1_COLOR_SPACE colorSpace; } D2D1_PRINT_CONTROL_PROPERTIES; typedef struct D2D1_MAPPED_RECT { UINT32 pitch; BYTE *bits; } D2D1_MAPPED_RECT; typedef struct D2D1_BITMAP_PROPERTIES1 { D2D1_PIXEL_FORMAT pixelFormat; float dpiX; float dpiY; D2D1_BITMAP_OPTIONS bitmapOptions; ID2D1ColorContext *colorContext; } D2D1_BITMAP_PROPERTIES1; typedef struct D2D1_IMAGE_BRUSH_PROPERTIES { D2D1_RECT_F sourceRectangle; D2D1_EXTEND_MODE extendModeX; D2D1_EXTEND_MODE extendModeY; D2D1_INTERPOLATION_MODE interpolationMode; } D2D1_IMAGE_BRUSH_PROPERTIES; typedef struct D2D1_BITMAP_BRUSH_PROPERTIES1 { D2D1_EXTEND_MODE extendModeX; D2D1_EXTEND_MODE extendModeY; D2D1_INTERPOLATION_MODE interpolationMode; } D2D1_BITMAP_BRUSH_PROPERTIES1; typedef struct D2D1_RENDERING_CONTROLS { D2D1_BUFFER_PRECISION bufferPrecision; D2D1_SIZE_U tileSize; } D2D1_RENDERING_CONTROLS; typedef struct D2D1_LAYER_PARAMETERS1 { D2D1_RECT_F contentBounds; ID2D1Geometry *geometricMask; D2D1_ANTIALIAS_MODE maskAntialiasMode; D2D1_MATRIX_3X2_F maskTransform; float opacity; ID2D1Brush *opacityBrush; D2D1_LAYER_OPTIONS1 layerOptions; } D2D1_LAYER_PARAMETERS1; typedef struct D2D1_EFFECT_INPUT_DESCRIPTION { ID2D1Effect *effect; UINT32 inputIndex; D2D1_RECT_F inputRectangle; } D2D1_EFFECT_INPUT_DESCRIPTION; typedef HRESULT (__stdcall *PD2D1_EFFECT_FACTORY)(IUnknown **effect); [ object, uuid(a898a84c-3873-4588-b08b-ebbf978df041), local, ] interface ID2D1Bitmap1 : ID2D1Bitmap { void GetColorContext( [out] ID2D1ColorContext **context ); D2D1_BITMAP_OPTIONS GetOptions(); HRESULT GetSurface( [out] IDXGISurface **surface ); HRESULT Map( [in] D2D1_MAP_OPTIONS options, [out] D2D1_MAPPED_RECT *mapped_rect ); HRESULT Unmap(); } [ object, uuid(47dd575d-ac05-4cdd-8049-9b02cd16f44c), local, ] interface ID2D1Device : ID2D1Resource { HRESULT CreateDeviceContext( [in] D2D1_DEVICE_CONTEXT_OPTIONS options, [out] ID2D1DeviceContext **context ); HRESULT CreatePrintControl( [in] IWICImagingFactory *wic_factory, [in] IPrintDocumentPackageTarget *document_target, [in] const D2D1_PRINT_CONTROL_PROPERTIES *desc, [out] ID2D1PrintControl **print_control ); void SetMaximumTextureMemory( [in] UINT64 max_texture_memory ); UINT64 GetMaximumTextureMemory(); HRESULT ClearResources( [in, defaultvalue(0)] UINT msec_since_use ); } [ object, uuid(e8f7fe7a-191c-466d-ad95-975678bda998), local, ] interface ID2D1DeviceContext : ID2D1RenderTarget { HRESULT CreateBitmap( [in] D2D1_SIZE_U size, [in] const void *src_data, [in] UINT32 pitch, [in] const D2D1_BITMAP_PROPERTIES1 *desc, [out] ID2D1Bitmap1 **bitmap ); HRESULT CreateBitmapFromWicBitmap( [in] IWICBitmapSource *bitmap_source, [in] const D2D1_BITMAP_PROPERTIES1 *desc, [out] ID2D1Bitmap1 **bitmap ); HRESULT CreateColorContext( [in] D2D1_COLOR_SPACE space, [in] const BYTE *profile, [in] UINT32 profile_size, [out] ID2D1ColorContext **color_context ); HRESULT CreateColorContextFromFilename( [in] const WCHAR *filename, [out] ID2D1ColorContext **color_context ); HRESULT CreateColorContextFromWicColorContext( [in] IWICColorContext *wic_color_context, [out] ID2D1ColorContext **color_context ); HRESULT CreateBitmapFromDxgiSurface( [in] IDXGISurface *surface, [in] const D2D1_BITMAP_PROPERTIES1 *desc, [out] ID2D1Bitmap1 **bitmap ); HRESULT CreateEffect( [in] REFCLSID effect_id, [out] ID2D1Effect **effect ); HRESULT CreateGradientStopCollection( [in] const D2D1_GRADIENT_STOP *stops, [in] UINT32 stop_count, [in] D2D1_COLOR_SPACE preinterpolation_space, [in] D2D1_COLOR_SPACE postinterpolation_space, [in] D2D1_BUFFER_PRECISION buffer_precision, [in] D2D1_EXTEND_MODE extend_mode, [in] D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode, [out] ID2D1GradientStopCollection1 **gradient ); HRESULT CreateImageBrush( [in] ID2D1Image *image, [in] const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [out] ID2D1ImageBrush **brush ); HRESULT CreateBitmapBrush( [in] ID2D1Bitmap *bitmap, [in] const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [out] ID2D1BitmapBrush1 **bitmap_brush ); HRESULT CreateCommandList( [out] ID2D1CommandList **command_list ); BOOL IsDxgiFormatSupported( [in] DXGI_FORMAT format ); BOOL IsBufferPrecisionSupported( [in] D2D1_BUFFER_PRECISION buffer_precision ); void GetImageLocalBounds( [in] ID2D1Image *image, [out] D2D1_RECT_F *local_bounds ); HRESULT GetImageWorldBounds( [in] ID2D1Image *image, [out] D2D1_RECT_F *world_bounds ); HRESULT GetGlyphRunWorldBounds( [in] D2D1_POINT_2F baseline_origin, [in] const DWRITE_GLYPH_RUN *glyph_run, [in] DWRITE_MEASURING_MODE measuring_mode, [out] D2D1_RECT_F *bounds ); void GetDevice( [out] ID2D1Device **device ); void SetTarget( [in] ID2D1Image *target ); void GetTarget( [out] ID2D1Image **target ); void SetRenderingControls( [in] const D2D1_RENDERING_CONTROLS *rendering_controls ); void GetRenderingControls( [out] D2D1_RENDERING_CONTROLS *rendering_controls ); void SetPrimitiveBlend( [in] D2D1_PRIMITIVE_BLEND primitive_blend ); D2D1_PRIMITIVE_BLEND GetPrimitiveBlend(); void SetUnitMode( [in] D2D1_UNIT_MODE unit_mode ); D2D1_UNIT_MODE GetUnitMode(); void DrawGlyphRun( [in] D2D1_POINT_2F baseline_origin, [in] const DWRITE_GLYPH_RUN *glyph_run, [in] const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc, [in] ID2D1Brush *brush, [in] DWRITE_MEASURING_MODE measuring_mode ); void DrawImage( [in] ID2D1Image *image, [in] const D2D1_POINT_2F *target_offset, [in] const D2D1_RECT_F *image_rect, [in] D2D1_INTERPOLATION_MODE interpolation_mode, [in] D2D1_COMPOSITE_MODE composite_mode ); void DrawGdiMetafile( [in] ID2D1GdiMetafile *metafile, [in] const D2D1_POINT_2F *target_offset ); void DrawBitmap( [in] ID2D1Bitmap *bitmap, [in] const D2D1_RECT_F *dst_rect, [in] float opacity, [in] D2D1_INTERPOLATION_MODE interpolation_mode, [in] const D2D1_RECT_F *src_rect, [in] const D2D1_MATRIX_4X4_F *perspective_transform ); void PushLayer( [in] const D2D1_LAYER_PARAMETERS1 *layer_parameters, [in] ID2D1Layer *layer ); HRESULT InvalidateEffectInputRectangle( [in] ID2D1Effect *effect, [in] UINT32 input, [in] const D2D1_RECT_F *input_rect ); HRESULT GetEffectInvalidRectangleCount( [in] ID2D1Effect *effect, [out] UINT32 *rect_count ); HRESULT GetEffectInvalidRectangles( [in] ID2D1Effect *effect, [out] D2D1_RECT_F *rectangles, [in] UINT32 rect_count ); HRESULT GetEffectRequiredInputRectangles( [in] ID2D1Effect *effect, [in] const D2D1_RECT_F *image_rect, [in] const D2D1_EFFECT_INPUT_DESCRIPTION *desc, [out] D2D1_RECT_F *input_rect, [in] UINT32 input_count ); void FillOpacityMask( [in] ID2D1Bitmap *mask, [in] ID2D1Brush *brush, [in] const D2D1_RECT_F *dst_rect, [in] const D2D1_RECT_F *src_rect ); } [ object, uuid(bb12d362-daee-4b9a-aa1d-14ba401cfa1f), local, ] interface ID2D1Factory1 : ID2D1Factory { HRESULT CreateDevice( [in] IDXGIDevice *dxgi_device, [out] ID2D1Device **device ); HRESULT CreateStrokeStyle( [in] const D2D1_STROKE_STYLE_PROPERTIES1 *desc, [in, size_is(dash_count)] const float *dashes, [in] UINT32 dash_count, [out] ID2D1StrokeStyle1 **stroke_style ); HRESULT CreatePathGeometry( [out] ID2D1PathGeometry1 **geometry ); HRESULT CreateDrawingStateBlock( [in] const D2D1_DRAWING_STATE_DESCRIPTION1 *desc, [in] IDWriteRenderingParams *text_rendering_params, [out] ID2D1DrawingStateBlock1 **state_block ); HRESULT CreateGdiMetafile( [in] IStream *stream, [out] ID2D1GdiMetafile **metafile ); HRESULT RegisterEffectFromStream( [in] REFCLSID effect_id, [in] IStream *property_xml, [in, size_is(binding_count)] const D2D1_PROPERTY_BINDING *bindings, [in] UINT32 binding_count, [in] PD2D1_EFFECT_FACTORY effect_factory ); HRESULT RegisterEffectFromString( [in] REFCLSID effect_id, [in] const WCHAR *property_xml, [in, size_is(binding_count)] const D2D1_PROPERTY_BINDING *bindings, [in] UINT32 binding_count, [in] PD2D1_EFFECT_FACTORY effect_factory ); HRESULT UnregisterEffect( [in] REFCLSID effect_id ); HRESULT GetRegisteredEffects( [out, size_is(effect_count)] CLSID *effects, [in] UINT32 effect_count, [out] UINT32 *returned, [out] UINT32 *registered ); HRESULT GetEffectProperties( [in] REFCLSID effect_id, [out] ID2D1Properties **props ); }