2 * Copyright 2013 Nikolay Sivov for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 import
"d2dbasetypes.h";
22 typedef D2D_POINT_2F D2D1_POINT_2F
;
23 typedef D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F
;
24 typedef D2D_RECT_F D2D1_RECT_F
;
25 typedef D2D_SIZE_F D2D1_SIZE_F
;
27 typedef enum D2D1_DEBUG_LEVEL
29 D2D1_DEBUG_LEVEL_NONE
= 0,
30 D2D1_DEBUG_LEVEL_ERROR
= 1,
31 D2D1_DEBUG_LEVEL_WARNING
= 2,
32 D2D1_DEBUG_LEVEL_INFORMATION
= 3,
33 D2D1_DEBUG_LEVEL_FORCE_DWORD
= 0xffffffff,
36 typedef enum D2D1_FACTORY_TYPE
38 D2D1_FACTORY_TYPE_SINGLE_THREADED
= 0,
39 D2D1_FACTORY_TYPE_MULTI_THREADED
= 1,
40 D2D1_FACTORY_TYPE_FORCE_DWORD
= 0xfffffff,
43 typedef enum D2D1_FILL_MODE
45 D2D1_FILL_MODE_ALTERNATE
= 0,
46 D2D1_FILL_MODE_WINDING
= 1,
47 D2D1_FILL_MODE_FORCE_DWORD
= 0xffffffff
50 typedef enum D2D1_PATH_SEGMENT
52 D2D1_PATH_SEGMENT_NONE
= 0,
53 D2D1_PATH_SEGMENT_FORCE_UNSTROKED
= 1,
54 D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN
= 2,
55 D2D1_PATH_SEGMENT_FORCE_DWORD
= 0xffffffff
58 typedef enum D2D1_FIGURE_BEGIN
60 D2D1_FIGURE_BEGIN_FILLED
= 0,
61 D2D1_FIGURE_BEGIN_HOLLOW
= 1,
62 D2D1_FIGURE_BEGIN_FORCE_DWORD
= 0xffffffff
65 typedef enum D2D1_FIGURE_END
67 D2D1_FIGURE_END_OPEN
= 0,
68 D2D1_FIGURE_END_CLOSED
= 1,
69 D2D1_FIGURE_END_FORCE_DWORD
= 0xffffffff
72 typedef enum D2D1_CAP_STYLE
74 D2D1_CAP_STYLE_FLAT
= 0,
75 D2D1_CAP_STYLE_SQUARE
= 1,
76 D2D1_CAP_STYLE_ROUND
= 2,
77 D2D1_CAP_STYLE_TRIANGLE
= 3,
78 D2D1_CAP_STYLE_FORCE_DWORD
= 0xffffffff,
81 typedef enum D2D1_LINE_JOIN
83 D2D1_LINE_JOIN_MITER
= 0,
84 D2D1_LINE_JOIN_BEVEL
= 1,
85 D2D1_LINE_JOIN_ROUND
= 2,
86 D2D1_LINE_JOIN_MITER_OR_BEVEL
= 3,
87 D2D1_LINE_JOIN_FORCE_DWORD
= 0xffffffff,
90 typedef enum D2D1_DASH_STYLE
92 D2D1_DASH_STYLE_SOLID
= 0,
93 D2D1_DASH_STYLE_DASH
= 1,
94 D2D1_DASH_STYLE_DOT
= 2,
95 D2D1_DASH_STYLE_DASH_DOT
= 3,
96 D2D1_DASH_STYLE_DASH_DOT_DOT
= 4,
97 D2D1_DASH_STYLE_CUSTOM
= 5,
98 D2D1_DASH_STYLE_FORCE_DWORD
= 0xffffffff,
101 typedef enum D2D1_GEOMETRY_RELATION
103 D2D1_GEOMETRY_RELATION_UNKNOWN
= 0,
104 D2D1_GEOMETRY_RELATION_DISJOINT
= 1,
105 D2D1_GEOMETRY_RELATION_IS_CONTAINED
= 2,
106 D2D1_GEOMETRY_RELATION_CONTAINS
= 3,
107 D2D1_GEOMETRY_RELATION_OVERLAP
= 4,
108 D2D1_GEOMETRY_RELATION_FORCE_DWORD
= 0xffffffff,
109 } D2D1_GEOMETRY_RELATION
;
111 typedef enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION
113 D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES
= 0,
114 D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES
= 1,
115 D2D1_GEOMETRY_SIMPLIFICATION_OPTION_FORCE_DWORD
= 0xffffffff,
116 } D2D1_GEOMETRY_SIMPLIFICATION_OPTION
;
118 typedef enum D2D1_COMBINE_MODE
120 D2D1_COMBINE_MODE_UNION
= 0,
121 D2D1_COMBINE_MODE_INTERSECT
= 1,
122 D2D1_COMBINE_MODE_XOR
= 2,
123 D2D1_COMBINE_MODE_EXCLUDE
= 3,
124 D2D1_COMBINE_MODE_FORCE_DWORD
= 0xffffffff,
127 typedef enum D2D1_SWEEP_DIRECTION
129 D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE
= 0,
130 D2D1_SWEEP_DIRECTION_CLOCKWISE
= 1,
131 D2D1_SWEEP_DIRECTION_FORCE_DWORD
= 0xffffffff,
132 } D2D1_SWEEP_DIRECTION
;
134 typedef enum D2D1_ARC_SIZE
136 D2D1_ARC_SIZE_SMALL
= 0,
137 D2D1_ARC_SIZE_LARGE
= 1,
138 D2D1_ARC_SIZE_FORCE_DWORD
= 0xffffffff,
141 typedef struct D2D1_BEZIER_SEGMENT
143 D2D1_POINT_2F point1
;
144 D2D1_POINT_2F point2
;
145 D2D1_POINT_2F point3
;
146 } D2D1_BEZIER_SEGMENT
;
148 typedef struct D2D1_FACTORY_OPTIONS
150 D2D1_DEBUG_LEVEL debugLevel
;
151 } D2D1_FACTORY_OPTIONS
;
153 typedef struct D2D1_TRIANGLE
155 D2D1_POINT_2F point1
;
156 D2D1_POINT_2F point2
;
157 D2D1_POINT_2F point3
;
160 typedef struct D2D1_ROUNDED_RECT
167 typedef struct D2D1_ELLIPSE
174 typedef struct D2D1_QUADRATIC_BEZIER_SEGMENT
176 D2D1_POINT_2F point1
;
177 D2D1_POINT_2F point2
;
178 } D2D1_QUADRATIC_BEZIER_SEGMENT
;
180 typedef struct D2D1_ARC_SEGMENT
185 D2D1_SWEEP_DIRECTION sweepDirection
;
186 D2D1_ARC_SIZE arcSize
;
189 interface ID2D1Factory
;
194 uuid(2cd90691
-12e2
-11dc
-9fed
-001143a055f9
)
196 interface ID2D1Resource
: IUnknown
199 [out] ID2D1Factory
**factory
206 uuid(2cd9069d
-12e2
-11dc
-9fed
-001143a055f9
)
208 interface ID2D1StrokeStyle
: ID2D1Resource
210 D2D1_CAP_STYLE GetStartCap
();
211 D2D1_CAP_STYLE GetEndCap
();
212 D2D1_CAP_STYLE GetDashCap
();
213 float GetMiterLimit
();
214 D2D1_LINE_JOIN GetLineJoin
();
215 float GetDashOffset
();
216 D2D1_DASH_STYLE GetDashStyle
();
217 UINT32 GetDashesCount
();
219 [out, size_is(count
)] float *dashes
,
227 uuid(2cd9069e
-12e2
-11dc
-9fed
-001143a055f9
)
229 interface ID2D1SimplifiedGeometrySink
: IUnknown
231 void SetFillMode
(D2D1_FILL_MODE mode
);
232 void SetSegmentFlags
(D2D1_PATH_SEGMENT vertexFlags
);
233 void BeginFigure
(D2D1_POINT_2F startPoint
, D2D1_FIGURE_BEGIN figureBegin
);
234 void AddLines
(const D2D1_POINT_2F
*points
, UINT32 count
);
235 void AddBeziers
(const D2D1_BEZIER_SEGMENT
*beziers
, UINT32 count
);
236 void EndFigure
(D2D1_FIGURE_END figureEnd
);
243 uuid(2cd906c1
-12e2
-11dc
-9fed
-001143a055f9
)
245 interface ID2D1TessellationSink
: IUnknown
248 [in, size_is(count
)] const D2D1_TRIANGLE
*triangles
,
257 uuid(2cd906a1
-12e2
-11dc
-9fed
-001143a055f9
)
259 interface ID2D1Geometry
: ID2D1Resource
262 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
263 [out] D2D1_RECT_F
*bounds
265 HRESULT GetWidenedBounds
(
266 [in] float stroke_width
,
267 [in, optional] ID2D1StrokeStyle
*stroke_style
,
268 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
269 [in] float tolerance
,
270 [out] D2D1_RECT_F
*bounds
272 HRESULT StrokeContainsPoint
(
273 [in] D2D1_POINT_2F point
,
274 [in] float stroke_width
,
275 [in, optional] ID2D1StrokeStyle
*stroke_style
,
276 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
277 [in] float tolerance
,
280 HRESULT FillContainsPoint
(
281 [in] D2D1_POINT_2F point
,
282 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
283 [in] float tolerance
,
286 HRESULT CompareWithGeometry
(
287 [in] ID2D1Geometry
*geometry
,
288 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
289 [in] float tolerance
,
290 [out] D2D1_GEOMETRY_RELATION
*relation
293 [in] D2D1_GEOMETRY_SIMPLIFICATION_OPTION option
,
294 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
295 [in] float tolerance
,
296 [in] ID2D1SimplifiedGeometrySink
*sink
299 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
300 [in] float tolerance
,
301 [in] ID2D1TessellationSink
*sink
303 HRESULT CombineWithGeometry
(
304 [in] ID2D1Geometry
*geometry
,
305 [in] D2D1_COMBINE_MODE combine_mode
,
306 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
307 [in] float tolerance
,
308 [in] ID2D1SimplifiedGeometrySink
*sink
311 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
312 [in] float tolerance
,
313 [in] ID2D1SimplifiedGeometrySink
*sink
316 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
317 [in] float tolerance
,
320 HRESULT ComputeLength
(
321 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
322 [in] float tolerance
,
325 HRESULT ComputePointAtLength
(
327 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
328 [in] float tolerance
,
329 [out, optional] D2D1_POINT_2F
*point
,
330 [out, optional] D2D1_POINT_2F
*tangent
333 [in] float stroke_width
,
334 [in, optional] ID2D1StrokeStyle
*stroke_style
,
335 [in, optional] const D2D1_MATRIX_3X2_F
*transform
,
336 [in] float tolerance
,
337 [in] ID2D1SimplifiedGeometrySink
*sink
344 uuid(2cd906a2
-12e2
-11dc
-9fed
-001143a055f9
)
346 interface ID2D1RectangleGeometry
: ID2D1Geometry
349 [out] D2D1_RECT_F
*rect
356 uuid(2cd906a3
-12e2
-11dc
-9fed
-001143a055f9
)
358 interface ID2D1RoundedRectangleGeometry
: ID2D1Geometry
361 [out] D2D1_ROUNDED_RECT
*rect
368 uuid(2cd906a4
-12e2
-11dc
-9fed
-001143a055f9
)
370 interface ID2D1EllipseGeometry
: ID2D1Geometry
373 [out] D2D1_ELLIPSE
*ellipse
380 uuid(2cd906a6
-12e2
-11dc
-9fed
-001143a055f9
)
382 interface ID2D1GeometryGroup
: ID2D1Geometry
384 D2D1_FILL_MODE GetFillMode
();
385 UINT32 GetSourceGeometryCount
();
386 void GetSourceGeometries
(
387 [out, size_is(geometry_count
)] ID2D1Geometry
**geometry
,
388 [in] UINT32 geometry_count
395 uuid(2cd906bb
-12e2
-11dc
-9fed
-001143a055f9
)
397 interface ID2D1TransformedGeometry
: ID2D1Geometry
399 void GetSourceGeometry
(
400 [out] ID2D1Geometry
**geometry
403 [out] D2D1_MATRIX_3X2_F
*transform
410 uuid(2cd9069f
-12e2
-11dc
-9fed
-001143a055f9
)
412 interface ID2D1GeometrySink
: ID2D1SimplifiedGeometrySink
415 [in] D2D1_POINT_2F point
418 [in] const D2D1_BEZIER_SEGMENT
*bezier
420 void AddQuadraticBezier
(
421 [in] const D2D1_QUADRATIC_BEZIER_SEGMENT
*bezier
423 void AddQuadraticBeziers
(
424 [in, size_is(bezier_count
)] const D2D1_QUADRATIC_BEZIER_SEGMENT
*beziers
,
425 [in] UINT32 bezier_count
428 [in] const D2D1_ARC_SEGMENT
*arc
432 [local] HRESULT __stdcall D2D1CreateFactory
(D2D1_FACTORY_TYPE factory_type
, REFIID iid
,
433 const D2D1_FACTORY_OPTIONS
*factory_options
, void **factory
);