winapi_ui_automation/um/
d2d1svg.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! Mappings for the contents of d2d1svg.h
7use ctypes::c_void;
8use shared::basetsd::UINT32;
9use shared::guiddef::REFIID;
10use shared::minwindef::{BOOL, FLOAT};
11use shared::ntdef::{PCWSTR, PWSTR, WCHAR};
12use shared::winerror::HRESULT;
13use um::d2d1::{
14    D2D1_CAP_STYLE_FLAT, D2D1_CAP_STYLE_ROUND, D2D1_CAP_STYLE_SQUARE, D2D1_COLOR_F, D2D1_FILL_MODE,
15    D2D1_LINE_JOIN_BEVEL, D2D1_LINE_JOIN_MITER_OR_BEVEL, D2D1_LINE_JOIN_ROUND, D2D1_POINT_2F,
16    D2D1_SIZE_F, ID2D1Resource, ID2D1ResourceVtbl
17};
18use um::d2d1_1::ID2D1PathGeometry1;
19use um::objidlbase::IStream;
20ENUM!{enum D2D1_SVG_PAINT_TYPE {
21    D2D1_SVG_PAINT_TYPE_NONE = 0,
22    D2D1_SVG_PAINT_TYPE_COLOR = 1,
23    D2D1_SVG_PAINT_TYPE_CURRENT_COLOR = 2,
24    D2D1_SVG_PAINT_TYPE_URI = 3,
25    D2D1_SVG_PAINT_TYPE_URI_NONE = 4,
26    D2D1_SVG_PAINT_TYPE_URI_COLOR = 5,
27    D2D1_SVG_PAINT_TYPE_URI_CURRENT_COLOR = 6,
28}}
29ENUM!{enum D2D1_SVG_LENGTH_UNITS {
30    D2D1_SVG_LENGTH_UNITS_NUMBER = 0,
31    D2D1_SVG_LENGTH_UNITS_PERCENTAGE = 1,
32}}
33ENUM!{enum D2D1_SVG_DISPLAY {
34    D2D1_SVG_DISPLAY_INLINE = 0,
35    D2D1_SVG_DISPLAY_NONE = 1,
36}}
37ENUM!{enum D2D1_SVG_VISIBILITY {
38    D2D1_SVG_VISIBILITY_VISIBLE = 0,
39    D2D1_SVG_VISIBILITY_HIDDEN = 1,
40}}
41ENUM!{enum D2D1_SVG_OVERFLOW {
42    D2D1_SVG_OVERFLOW_VISIBLE = 0,
43    D2D1_SVG_OVERFLOW_HIDDEN = 1,
44}}
45ENUM!{enum D2D1_SVG_LINE_CAP {
46    D2D1_SVG_LINE_CAP_BUTT = D2D1_CAP_STYLE_FLAT,
47    D2D1_SVG_LINE_CAP_SQUARE = D2D1_CAP_STYLE_SQUARE,
48    D2D1_SVG_LINE_CAP_ROUND = D2D1_CAP_STYLE_ROUND,
49}}
50ENUM!{enum D2D1_SVG_LINE_JOIN {
51    D2D1_SVG_LINE_JOIN_BEVEL = D2D1_LINE_JOIN_BEVEL,
52    D2D1_SVG_LINE_JOIN_MITER = D2D1_LINE_JOIN_MITER_OR_BEVEL,
53    D2D1_SVG_LINE_JOIN_ROUND = D2D1_LINE_JOIN_ROUND,
54}}
55ENUM!{enum D2D1_SVG_ASPECT_ALIGN {
56    D2D1_SVG_ASPECT_ALIGN_NONE = 0,
57    D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MIN = 1,
58    D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MIN = 2,
59    D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MIN = 3,
60    D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MID = 4,
61    D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MID = 5,
62    D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MID = 6,
63    D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MAX = 7,
64    D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MAX = 8,
65    D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MAX = 9,
66}}
67ENUM!{enum D2D1_SVG_ASPECT_SCALING {
68    D2D1_SVG_ASPECT_SCALING_MEET = 0,
69    D2D1_SVG_ASPECT_SCALING_SLICE = 1,
70}}
71ENUM!{enum D2D1_SVG_PATH_COMMAND {
72    D2D1_SVG_PATH_COMMAND_CLOSE_PATH = 0,
73    D2D1_SVG_PATH_COMMAND_MOVE_ABSOLUTE = 1,
74    D2D1_SVG_PATH_COMMAND_MOVE_RELATIVE = 2,
75    D2D1_SVG_PATH_COMMAND_LINE_ABSOLUTE = 3,
76    D2D1_SVG_PATH_COMMAND_LINE_RELATIVE = 4,
77    D2D1_SVG_PATH_COMMAND_CUBIC_ABSOLUTE = 5,
78    D2D1_SVG_PATH_COMMAND_CUBIC_RELATIVE = 6,
79    D2D1_SVG_PATH_COMMAND_QUADRADIC_ABSOLUTE = 7,
80    D2D1_SVG_PATH_COMMAND_QUADRADIC_RELATIVE = 8,
81    D2D1_SVG_PATH_COMMAND_ARC_ABSOLUTE = 9,
82    D2D1_SVG_PATH_COMMAND_ARC_RELATIVE = 10,
83    D2D1_SVG_PATH_COMMAND_HORIZONTAL_ABSOLUTE = 11,
84    D2D1_SVG_PATH_COMMAND_HORIZONTAL_RELATIVE = 12,
85    D2D1_SVG_PATH_COMMAND_VERTICAL_ABSOLUTE = 13,
86    D2D1_SVG_PATH_COMMAND_VERTICAL_RELATIVE = 14,
87    D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_ABSOLUTE = 15,
88    D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_RELATIVE = 16,
89    D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_ABSOLUTE = 17,
90    D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_RELATIVE = 18,
91}}
92ENUM!{enum D2D1_SVG_UNIT_TYPE {
93    D2D1_SVG_UNIT_TYPE_USER_SPACE_ON_USE = 0,
94    D2D1_SVG_UNIT_TYPE_OBJECT_BOUNDING_BOX = 1,
95}}
96ENUM!{enum D2D1_SVG_ATTRIBUTE_STRING_TYPE {
97    D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG = 0,
98    D2D1_SVG_ATTRIBUTE_STRING_TYPE_ID = 1,
99}}
100ENUM!{enum D2D1_SVG_ATTRIBUTE_POD_TYPE {
101    D2D1_SVG_ATTRIBUTE_POD_TYPE_FLOAT = 0,
102    D2D1_SVG_ATTRIBUTE_POD_TYPE_COLOR = 1,
103    D2D1_SVG_ATTRIBUTE_POD_TYPE_FILL_MODE = 2,
104    D2D1_SVG_ATTRIBUTE_POD_TYPE_DISPLAY = 3,
105    D2D1_SVG_ATTRIBUTE_POD_TYPE_OVERFLOW = 4,
106    D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_CAP = 5,
107    D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_JOIN = 6,
108    D2D1_SVG_ATTRIBUTE_POD_TYPE_VISIBILITY = 7,
109    D2D1_SVG_ATTRIBUTE_POD_TYPE_MATRIX = 8,
110    D2D1_SVG_ATTRIBUTE_POD_TYPE_UNIT_TYPE = 9,
111    D2D1_SVG_ATTRIBUTE_POD_TYPE_EXTEND_MODE = 10,
112    D2D1_SVG_ATTRIBUTE_POD_TYPE_PRESERVE_ASPECT_RATIO = 11,
113    D2D1_SVG_ATTRIBUTE_POD_TYPE_VIEWBOX = 12,
114    D2D1_SVG_ATTRIBUTE_POD_TYPE_LENGTH = 13,
115}}
116STRUCT!{struct D2D1_SVG_LENGTH {
117    value: FLOAT,
118    units: D2D1_SVG_LENGTH_UNITS,
119}}
120STRUCT!{struct D2D1_SVG_PRESERVE_ASPECT_RATIO {
121    defer: BOOL,
122    align: D2D1_SVG_ASPECT_ALIGN,
123    meetOrSlice: D2D1_SVG_ASPECT_SCALING,
124}}
125STRUCT!{struct D2D1_SVG_VIEWBOX {
126    x: FLOAT,
127    y: FLOAT,
128    width: FLOAT,
129    height: FLOAT,
130}}
131DEFINE_GUID!{IID_ID2D1SvgAttribute,
132    0xc9cdb0dd, 0xf8c9, 0x4e70, 0xb7, 0xc2, 0x30, 0x1c, 0x80, 0x29, 0x2c, 0x5e}
133DEFINE_GUID!{IID_ID2D1SvgPaint,
134    0xd59bab0a, 0x68a2, 0x455b, 0xa5, 0xdc, 0x9e, 0xb2, 0x85, 0x4e, 0x24, 0x90}
135DEFINE_GUID!{IID_ID2D1SvgStrokeDashArray,
136    0xf1c0ca52, 0x92a3, 0x4f00, 0xb4, 0xce, 0xf3, 0x56, 0x91, 0xef, 0xd9, 0xd9}
137DEFINE_GUID!{IID_ID2D1SvgPointCollection,
138    0x9dbe4c0d, 0x3572, 0x4dd9, 0x98, 0x25, 0x55, 0x30, 0x81, 0x3b, 0xb7, 0x12}
139DEFINE_GUID!{IID_ID2D1SvgPathData,
140    0xc095e4f4, 0xbb98, 0x43d6, 0x97, 0x45, 0x4d, 0x1b, 0x84, 0xec, 0x98, 0x88}
141DEFINE_GUID!{IID_ID2D1SvgElement,
142    0xac7b67a6, 0x183e, 0x49c1, 0xa8, 0x23, 0x0e, 0xbe, 0x40, 0xb0, 0xdb, 0x29}
143DEFINE_GUID!{IID_ID2D1SvgDocument,
144    0x86b88e4d, 0xafa4, 0x4d7b, 0x88, 0xe4, 0x68, 0xa5, 0x1c, 0x4a, 0x0a, 0xec}
145RIDL!{#[uuid(0xc9cdb0dd, 0xf8c9, 0x4e70, 0xb7, 0xc2, 0x30, 0x1c, 0x80, 0x29, 0x2c, 0x5e)]
146interface ID2D1SvgAttribute(ID2D1SvgAttributeVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
147    fn GetElement(
148        element: *mut *mut ID2D1SvgElement,
149    ) -> (),
150    fn Clone(
151        attribute: *mut *mut ID2D1SvgAttribute,
152    ) -> HRESULT,
153}}
154RIDL!{#[uuid(0xd59bab0a, 0x68a2, 0x455b, 0xa5, 0xdc, 0x9e, 0xb2, 0x85, 0x4e, 0x24, 0x90)]
155interface ID2D1SvgPaint(ID2D1SvgPaintVtbl): ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
156    fn SetPaintType(
157        paintType: D2D1_SVG_PAINT_TYPE,
158    ) -> HRESULT,
159    fn GetPaintType() -> D2D1_SVG_PAINT_TYPE,
160    fn SetColor(
161        color: D2D1_COLOR_F,
162    ) -> HRESULT,
163    fn GetColor(
164        color: *mut D2D1_COLOR_F,
165    ) -> (),
166    fn SetId(
167        id: PCWSTR,
168    ) -> HRESULT,
169    fn GetId(
170        id: PWSTR,
171        idCount: UINT32,
172    ) -> HRESULT,
173    fn GetIdLength() -> UINT32,
174}}
175RIDL!{#[uuid(0xf1c0ca52, 0x92a3, 0x4f00, 0xb4, 0xce, 0xf3, 0x56, 0x91, 0xef, 0xd9, 0xd9)]
176interface ID2D1SvgStrokeDashArray(ID2D1SvgStrokeDashArrayVtbl):
177    ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
178    fn RemoveDashesAtEnd(
179        dashesCount: UINT32,
180    ) -> HRESULT,
181    fn UpdateDashes_1(
182        dashes: *const D2D1_SVG_LENGTH,
183        dashesCount: UINT32,
184        startIndex: UINT32,
185    ) -> HRESULT,
186    fn UpdateDashes_2(
187        dashes: *const FLOAT,
188        dashesCount: UINT32,
189        startIndex: UINT32,
190    ) -> HRESULT,
191    fn GetDashes_1(
192        dashes: *mut D2D1_SVG_LENGTH,
193        dashesCount: UINT32,
194        startIndex: UINT32,
195    ) -> HRESULT,
196    fn GetDashes_2(
197        dashes: *mut FLOAT,
198        dashesCount: UINT32,
199        startIndex: UINT32,
200    ) -> HRESULT,
201    fn GetDashesCount() -> UINT32,
202}}
203RIDL!{#[uuid(0x9dbe4c0d, 0x3572, 0x4dd9, 0x98, 0x25, 0x55, 0x30, 0x81, 0x3b, 0xb7, 0x12)]
204interface ID2D1SvgPointCollection(ID2D1SvgPointCollectionVtbl):
205    ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
206    fn RemovePointsAtEnd(
207        pointsCount: UINT32,
208    ) -> HRESULT,
209    fn UpdatePoints(
210        points: *const D2D1_POINT_2F,
211        pointsCount: UINT32,
212        startIndex: UINT32,
213    ) -> HRESULT,
214    fn GetPoints(
215        points: *mut D2D1_POINT_2F,
216        pointsCount: UINT32,
217        startIndex: UINT32,
218    ) -> HRESULT,
219    fn GetPointsCount() -> UINT32,
220}}
221RIDL!{#[uuid(0xc095e4f4, 0xbb98, 0x43d6, 0x97, 0x45, 0x4d, 0x1b, 0x84, 0xec, 0x98, 0x88)]
222interface ID2D1SvgPathData(ID2D1SvgPathDataVtbl): ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
223    fn RemoveSegmentDataAtEnd(
224        dataCount: UINT32,
225    ) -> HRESULT,
226    fn UpdateSegmentData(
227        data: *const FLOAT,
228        dataCount: UINT32,
229        startIndex: UINT32,
230    ) -> HRESULT,
231    fn GetSegmentData(
232        data: *mut FLOAT,
233        dataCount: UINT32,
234        startIndex: UINT32,
235    ) -> HRESULT,
236    fn GetSegmentDataCount() -> UINT32,
237    fn RemoveCommandsAtEnd(
238        commandsCount: UINT32,
239    ) -> HRESULT,
240    fn UpdateCommands(
241        commands: *const D2D1_SVG_PATH_COMMAND,
242        commandsCount: UINT32,
243        startIndex: UINT32,
244    ) -> HRESULT,
245    fn GetCommands(
246        commands: *mut D2D1_SVG_PATH_COMMAND,
247        commandsCount: UINT32,
248        startIndex: UINT32,
249    ) -> HRESULT,
250    fn GetCommandsCount() -> UINT32,
251    fn CreatePathGeometry(
252        fillMode: D2D1_FILL_MODE,
253        pathGeometry: *mut *mut ID2D1PathGeometry1,
254    ) -> HRESULT,
255}}
256RIDL!{#[uuid(0xac7b67a6, 0x183e, 0x49c1, 0xa8, 0x23, 0x0e, 0xbe, 0x40, 0xb0, 0xdb, 0x29)]
257interface ID2D1SvgElement(ID2D1SvgElementVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
258    fn GetDocument(
259        document: *mut *mut ID2D1SvgDocument,
260    ) -> (),
261    fn GetTagName(
262        name: PWSTR,
263        nameCount: UINT32,
264    ) -> HRESULT,
265    fn GetTagNameLength() -> UINT32,
266    fn IsTextContent() -> BOOL,
267    fn GetParent(
268        parent: *mut *mut ID2D1SvgElement,
269    ) -> (),
270    fn HasChildren() -> BOOL,
271    fn GetFirstChild(
272        child: *mut *mut ID2D1SvgElement,
273    ) -> (),
274    fn GetLastChild(
275        child: *mut *mut ID2D1SvgElement,
276    ) -> (),
277    fn GetPreviousChild(
278        referenceChild: *mut ID2D1SvgElement,
279        previousChild: *mut *mut ID2D1SvgElement,
280    ) -> HRESULT,
281    fn GetNextChild(
282        referenceChild: *mut ID2D1SvgElement,
283        nextChild: *mut *mut ID2D1SvgElement,
284    ) -> HRESULT,
285    fn InsertChildBefore(
286        newChild: *mut ID2D1SvgElement,
287        referenceChild: *mut ID2D1SvgElement,
288    ) -> HRESULT,
289    fn AppendChild(
290        newChild: *mut ID2D1SvgElement,
291    ) -> HRESULT,
292    fn ReplaceChild(
293        newChild: *mut ID2D1SvgElement,
294        oldChild: *mut ID2D1SvgElement,
295    ) -> HRESULT,
296    fn RemoveChild(
297        oldChild: *mut ID2D1SvgElement,
298    ) -> HRESULT,
299    fn IsAttributeSpecified(
300        name: PCWSTR, inherited: *mut BOOL,
301    ) -> BOOL,
302    fn GetSpecifiedAttributeCount() -> UINT32,
303    fn GetSpecifiedAttributeName(
304        index: UINT32,
305        name: PWSTR,
306        nameCount: UINT32,
307        inherited: *mut BOOL,
308    ) -> HRESULT,
309    fn GetSpecifiedAttributeNameLength(
310        index: UINT32,
311        nameLength: *mut UINT32,
312        inherited: *mut BOOL,
313    ) -> HRESULT,
314    fn RemoveAttribute(
315        name: PCWSTR,
316    ) -> HRESULT,
317    fn SetTextValue(
318        name: *const WCHAR,
319        nameCount: UINT32,
320    ) -> HRESULT,
321    fn GetTextValue(
322        name: PWSTR,
323        nameCount: UINT32,
324    ) -> HRESULT,
325    fn GetTextValueLength() -> UINT32,
326    fn SetAttributeValue_1(
327        name: PCWSTR,
328        value: *mut ID2D1SvgAttribute,
329    ) -> HRESULT,
330    fn SetAttributeValue_2(
331        name: PCWSTR,
332        type_: D2D1_SVG_ATTRIBUTE_POD_TYPE,
333        value: *const c_void,
334        valueSizeInBytes: UINT32,
335    ) -> HRESULT,
336    fn SetAttributeValue_3(
337        name: PCWSTR,
338        type_: D2D1_SVG_ATTRIBUTE_STRING_TYPE,
339        value: PCWSTR,
340    ) -> HRESULT,
341    fn GetAttributeValue_1(
342        name: PCWSTR,
343        riid: REFIID,
344        value: *mut *mut c_void,
345    ) -> HRESULT,
346    fn GetAttributeValue_2(
347        name: PCWSTR,
348        type_: D2D1_SVG_ATTRIBUTE_POD_TYPE,
349        value: *mut c_void,
350        valueSizeInBytes: UINT32,
351    ) -> HRESULT,
352    fn GetAttributeValue_3(
353        name: PCWSTR,
354        type_: D2D1_SVG_ATTRIBUTE_STRING_TYPE,
355        value: PWSTR,
356        valueCount: UINT32,
357    ) -> HRESULT,
358    fn GetAttributeValueLength(
359        name: PCWSTR,
360        type_: D2D1_SVG_ATTRIBUTE_STRING_TYPE,
361        valueLength: *mut UINT32,
362    ) -> HRESULT,
363}}
364RIDL!{#[uuid(0x86b88e4d, 0xafa4, 0x4d7b, 0x88, 0xe4, 0x68, 0xa5, 0x1c, 0x4a, 0x0a, 0xec)]
365interface ID2D1SvgDocument(ID2D1SvgDocumentVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
366    fn SetViewportSize(
367        viewportSize: D2D1_SIZE_F,
368    ) -> HRESULT,
369    fn GetViewportSize() -> D2D1_SIZE_F,
370    fn SetRoot(
371        root: *mut ID2D1SvgElement,
372    ) -> HRESULT,
373    fn GetRoot(
374        root: *mut *mut ID2D1SvgElement,
375    ) -> (),
376    fn FindElementById(
377        id: PCWSTR,
378        svgElement: *mut *mut ID2D1SvgElement,
379    ) -> HRESULT,
380    fn Serialize(
381        outputXmlStream: *mut IStream,
382        subtree: *mut ID2D1SvgElement,
383    ) -> HRESULT,
384    fn Deserialize(
385        inputXmlStream: *mut IStream,
386        subtree: *mut *mut ID2D1SvgElement,
387    ) -> HRESULT,
388    fn CreatePaint(
389        paintType: D2D1_SVG_PAINT_TYPE,
390        color: *const D2D1_COLOR_F,
391        id: PCWSTR,
392        paint: *mut *mut ID2D1SvgPaint,
393    ) -> HRESULT,
394    fn CreateStrokeDashArray(
395        dashes: *const D2D1_SVG_LENGTH,
396        dashesCount: UINT32,
397        strokeDashArray: *mut *mut ID2D1SvgStrokeDashArray,
398    ) -> HRESULT,
399    fn CreatePointCollection(
400        points: *const D2D1_POINT_2F,
401        pountsCount: UINT32,
402        pointCollection: *mut ID2D1SvgPointCollection,
403    ) -> HRESULT,
404    fn CreatePathData(
405        segmentData: *const FLOAT,
406        segmentDataCount: UINT32,
407        commands: *const D2D1_SVG_PATH_COMMAND,
408        commandsCount: UINT32,
409        pathData: *mut *mut ID2D1SvgPathData,
410    ) -> HRESULT,
411}}