/* * Copyright 2013 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 "unknwn.idl"; import "d2dbasetypes.h"; typedef D2D_POINT_2F D2D1_POINT_2F; typedef D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F; typedef D2D_RECT_F D2D1_RECT_F; typedef D2D_SIZE_F D2D1_SIZE_F; typedef enum D2D1_DEBUG_LEVEL { D2D1_DEBUG_LEVEL_NONE = 0, D2D1_DEBUG_LEVEL_ERROR = 1, D2D1_DEBUG_LEVEL_WARNING = 2, D2D1_DEBUG_LEVEL_INFORMATION = 3, D2D1_DEBUG_LEVEL_FORCE_DWORD = 0xffffffff, } D2D1_DEBUG_LEVEL; typedef enum D2D1_FACTORY_TYPE { D2D1_FACTORY_TYPE_SINGLE_THREADED = 0, D2D1_FACTORY_TYPE_MULTI_THREADED = 1, D2D1_FACTORY_TYPE_FORCE_DWORD = 0xfffffff, } D2D1_FACTORY_TYPE; typedef enum D2D1_FILL_MODE { D2D1_FILL_MODE_ALTERNATE = 0, D2D1_FILL_MODE_WINDING = 1, D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff } D2D1_FILL_MODE; typedef enum D2D1_PATH_SEGMENT { D2D1_PATH_SEGMENT_NONE = 0, D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 1, D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 2, D2D1_PATH_SEGMENT_FORCE_DWORD = 0xffffffff } D2D1_PATH_SEGMENT; typedef enum D2D1_FIGURE_BEGIN { D2D1_FIGURE_BEGIN_FILLED = 0, D2D1_FIGURE_BEGIN_HOLLOW = 1, D2D1_FIGURE_BEGIN_FORCE_DWORD = 0xffffffff } D2D1_FIGURE_BEGIN; typedef enum D2D1_FIGURE_END { D2D1_FIGURE_END_OPEN = 0, D2D1_FIGURE_END_CLOSED = 1, D2D1_FIGURE_END_FORCE_DWORD = 0xffffffff } D2D1_FIGURE_END; typedef enum D2D1_CAP_STYLE { D2D1_CAP_STYLE_FLAT = 0, D2D1_CAP_STYLE_SQUARE = 1, D2D1_CAP_STYLE_ROUND = 2, D2D1_CAP_STYLE_TRIANGLE = 3, D2D1_CAP_STYLE_FORCE_DWORD = 0xffffffff, } D2D1_CAP_STYLE; typedef enum D2D1_LINE_JOIN { D2D1_LINE_JOIN_MITER = 0, D2D1_LINE_JOIN_BEVEL = 1, D2D1_LINE_JOIN_ROUND = 2, D2D1_LINE_JOIN_MITER_OR_BEVEL = 3, D2D1_LINE_JOIN_FORCE_DWORD = 0xffffffff, } D2D1_LINE_JOIN; typedef enum D2D1_DASH_STYLE { D2D1_DASH_STYLE_SOLID = 0, D2D1_DASH_STYLE_DASH = 1, D2D1_DASH_STYLE_DOT = 2, D2D1_DASH_STYLE_DASH_DOT = 3, D2D1_DASH_STYLE_DASH_DOT_DOT = 4, D2D1_DASH_STYLE_CUSTOM = 5, D2D1_DASH_STYLE_FORCE_DWORD = 0xffffffff, } D2D1_DASH_STYLE; typedef enum D2D1_GEOMETRY_RELATION { D2D1_GEOMETRY_RELATION_UNKNOWN = 0, D2D1_GEOMETRY_RELATION_DISJOINT = 1, D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2, D2D1_GEOMETRY_RELATION_CONTAINS = 3, D2D1_GEOMETRY_RELATION_OVERLAP = 4, D2D1_GEOMETRY_RELATION_FORCE_DWORD = 0xffffffff, } D2D1_GEOMETRY_RELATION; typedef enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION { D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES = 0, D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES = 1, D2D1_GEOMETRY_SIMPLIFICATION_OPTION_FORCE_DWORD = 0xffffffff, } D2D1_GEOMETRY_SIMPLIFICATION_OPTION; typedef enum D2D1_COMBINE_MODE { D2D1_COMBINE_MODE_UNION = 0, D2D1_COMBINE_MODE_INTERSECT = 1, D2D1_COMBINE_MODE_XOR = 2, D2D1_COMBINE_MODE_EXCLUDE = 3, D2D1_COMBINE_MODE_FORCE_DWORD = 0xffffffff, } D2D1_COMBINE_MODE; typedef enum D2D1_SWEEP_DIRECTION { D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE = 0, D2D1_SWEEP_DIRECTION_CLOCKWISE = 1, D2D1_SWEEP_DIRECTION_FORCE_DWORD = 0xffffffff, } D2D1_SWEEP_DIRECTION; typedef enum D2D1_ARC_SIZE { D2D1_ARC_SIZE_SMALL = 0, D2D1_ARC_SIZE_LARGE = 1, D2D1_ARC_SIZE_FORCE_DWORD = 0xffffffff, } D2D1_ARC_SIZE; typedef struct D2D1_BEZIER_SEGMENT { D2D1_POINT_2F point1; D2D1_POINT_2F point2; D2D1_POINT_2F point3; } D2D1_BEZIER_SEGMENT; typedef struct D2D1_FACTORY_OPTIONS { D2D1_DEBUG_LEVEL debugLevel; } D2D1_FACTORY_OPTIONS; typedef struct D2D1_TRIANGLE { D2D1_POINT_2F point1; D2D1_POINT_2F point2; D2D1_POINT_2F point3; } D2D1_TRIANGLE; typedef struct D2D1_ROUNDED_RECT { D2D1_RECT_F rect; float radiusX; float radiusY; } D2D1_ROUNDED_RECT; typedef struct D2D1_ELLIPSE { D2D1_POINT_2F point; float radiusX; float radiusY; } D2D1_ELLIPSE; typedef struct D2D1_QUADRATIC_BEZIER_SEGMENT { D2D1_POINT_2F point1; D2D1_POINT_2F point2; } D2D1_QUADRATIC_BEZIER_SEGMENT; typedef struct D2D1_ARC_SEGMENT { D2D1_POINT_2F point; D2D1_SIZE_F size; float rotationAngle; D2D1_SWEEP_DIRECTION sweepDirection; D2D1_ARC_SIZE arcSize; } D2D1_ARC_SEGMENT; interface ID2D1Factory; [ local, object, uuid(2cd90691-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Resource : IUnknown { void GetFactory( [out] ID2D1Factory **factory ); } [ local, object, uuid(2cd9069d-12e2-11dc-9fed-001143a055f9) ] interface ID2D1StrokeStyle : ID2D1Resource { D2D1_CAP_STYLE GetStartCap(); D2D1_CAP_STYLE GetEndCap(); D2D1_CAP_STYLE GetDashCap(); float GetMiterLimit(); D2D1_LINE_JOIN GetLineJoin(); float GetDashOffset(); D2D1_DASH_STYLE GetDashStyle(); UINT32 GetDashesCount(); void GetDashes( [out, size_is(count)] float *dashes, [in] UINT32 count ); } [ local, object, uuid(2cd9069e-12e2-11dc-9fed-001143a055f9) ] interface ID2D1SimplifiedGeometrySink : IUnknown { void SetFillMode(D2D1_FILL_MODE mode); void SetSegmentFlags(D2D1_PATH_SEGMENT vertexFlags); void BeginFigure(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin); void AddLines(const D2D1_POINT_2F *points, UINT32 count); void AddBeziers(const D2D1_BEZIER_SEGMENT *beziers, UINT32 count); void EndFigure(D2D1_FIGURE_END figureEnd); HRESULT Close(); } [ local, object, uuid(2cd906c1-12e2-11dc-9fed-001143a055f9) ] interface ID2D1TessellationSink : IUnknown { void AddTriangles( [in, size_is(count)] const D2D1_TRIANGLE *triangles, [in] UINT32 count ); HRESULT Close(); } [ local, object, uuid(2cd906a1-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Geometry : ID2D1Resource { HRESULT GetBounds( [in, optional] const D2D1_MATRIX_3X2_F *transform, [out] D2D1_RECT_F *bounds ); HRESULT GetWidenedBounds( [in] float stroke_width, [in, optional] ID2D1StrokeStyle *stroke_style, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] D2D1_RECT_F *bounds ); HRESULT StrokeContainsPoint( [in] D2D1_POINT_2F point, [in] float stroke_width, [in, optional] ID2D1StrokeStyle *stroke_style, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] BOOL *contains ); HRESULT FillContainsPoint( [in] D2D1_POINT_2F point, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] BOOL *contains ); HRESULT CompareWithGeometry( [in] ID2D1Geometry *geometry, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] D2D1_GEOMETRY_RELATION *relation ); HRESULT Simplify( [in] D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); HRESULT Tessellate( [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1TessellationSink *sink ); HRESULT CombineWithGeometry( [in] ID2D1Geometry *geometry, [in] D2D1_COMBINE_MODE combine_mode, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); HRESULT Outline( [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); HRESULT ComputeArea( [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] float *area ); HRESULT ComputeLength( [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] float *length ); HRESULT ComputePointAtLength( [in] float length, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out, optional] D2D1_POINT_2F *point, [out, optional] D2D1_POINT_2F *tangent ); HRESULT Widen( [in] float stroke_width, [in, optional] ID2D1StrokeStyle *stroke_style, [in, optional] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); } [ local, object, uuid(2cd906a2-12e2-11dc-9fed-001143a055f9) ] interface ID2D1RectangleGeometry : ID2D1Geometry { void GetRect( [out] D2D1_RECT_F *rect ); } [ local, object, uuid(2cd906a3-12e2-11dc-9fed-001143a055f9) ] interface ID2D1RoundedRectangleGeometry : ID2D1Geometry { void GetRoundedRect( [out] D2D1_ROUNDED_RECT *rect ); } [ local, object, uuid(2cd906a4-12e2-11dc-9fed-001143a055f9) ] interface ID2D1EllipseGeometry : ID2D1Geometry { void GetEllipse( [out] D2D1_ELLIPSE *ellipse ); } [ local, object, uuid(2cd906a6-12e2-11dc-9fed-001143a055f9) ] interface ID2D1GeometryGroup : ID2D1Geometry { D2D1_FILL_MODE GetFillMode(); UINT32 GetSourceGeometryCount(); void GetSourceGeometries( [out, size_is(geometry_count)] ID2D1Geometry **geometry, [in] UINT32 geometry_count ); } [ local, object, uuid(2cd906bb-12e2-11dc-9fed-001143a055f9) ] interface ID2D1TransformedGeometry : ID2D1Geometry { void GetSourceGeometry( [out] ID2D1Geometry **geometry ); void GetTransform( [out] D2D1_MATRIX_3X2_F *transform ); } [ local, object, uuid(2cd9069f-12e2-11dc-9fed-001143a055f9) ] interface ID2D1GeometrySink : ID2D1SimplifiedGeometrySink { void AddLine( [in] D2D1_POINT_2F point ); void AddBezier( [in] const D2D1_BEZIER_SEGMENT *bezier ); void AddQuadraticBezier( [in] const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier ); void AddQuadraticBeziers( [in, size_is(bezier_count)] const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, [in] UINT32 bezier_count ); void AddArc( [in] const D2D1_ARC_SEGMENT *arc ); } [ local, object, uuid(2cd906a5-12e2-11dc-9fed-001143a055f9) ] interface ID2D1PathGeometry : ID2D1Geometry { HRESULT Open( [out] ID2D1GeometrySink **sink ); HRESULT Stream( [in] ID2D1GeometrySink *sink ); HRESULT GetSegmentCount( [out] UINT32 *count ); HRESULT GetFigureCount( [out] UINT32 *count ); } [local] HRESULT __stdcall D2D1CreateFactory(D2D1_FACTORY_TYPE factory_type, REFIID iid, const D2D1_FACTORY_OPTIONS *factory_options, void **factory);