v0.2.2 9100209

Gsk-4.0.gir RawHistoryFolder

1<?xml version="1.0"?>
2<!-- This file was automatically generated from C sources - DO NOT EDIT!
3To affect the contents of this file, edit the original C definitions,
4and/or use gtk-doc annotations.  -->
5<repository version="1.2"
6            xmlns="http://www.gtk.org/introspection/core/1.0"
7            xmlns:c="http://www.gtk.org/introspection/c/1.0"
8            xmlns:doc="http://www.gtk.org/introspection/doc/1.0"
9            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
10  <include name="Gdk" version="4.0"/>
11  <include name="Graphene" version="1.0"/>
12  <package name="gtk4"/>
13  <c:include name="gsk/gsk.h"/>
14  <doc:format name="gi-docgen"/>
15  <namespace name="Gsk"
16             version="4.0"
17             shared-library="libgtk-4.so.1"
18             c:identifier-prefixes="Gsk"
19             c:symbol-prefixes="gsk">
20    <function-macro name="BROADWAY_RENDERER"
21                    c:identifier="GSK_BROADWAY_RENDERER"
22                    introspectable="0">
23      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
24                       line="31"/>
25      <parameters>
26        <parameter name="obj">
27        </parameter>
28      </parameters>
29    </function-macro>
30    <function-macro name="BROADWAY_RENDERER_CLASS"
31                    c:identifier="GSK_BROADWAY_RENDERER_CLASS"
32                    introspectable="0">
33      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
34                       line="33"/>
35      <parameters>
36        <parameter name="klass">
37        </parameter>
38      </parameters>
39    </function-macro>
40    <function-macro name="BROADWAY_RENDERER_GET_CLASS"
41                    c:identifier="GSK_BROADWAY_RENDERER_GET_CLASS"
42                    introspectable="0">
43      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
44                       line="35"/>
45      <parameters>
46        <parameter name="obj">
47        </parameter>
48      </parameters>
49    </function-macro>
50    <enumeration name="BlendMode"
51                 glib:type-name="GskBlendMode"
52                 glib:get-type="gsk_blend_mode_get_type"
53                 c:type="GskBlendMode">
54      <doc xml:space="preserve"
55           filename="gsk/gskenums.h"
56           line="158">The blend modes available for render nodes.
57
58The implementation of each blend mode is deferred to the
59rendering pipeline.
60
61See &lt;https://www.w3.org/TR/compositing-1/#blending&gt; for more information
62on blending and blend modes.</doc>
63      <member name="default"
64              value="0"
65              c:identifier="GSK_BLEND_MODE_DEFAULT"
66              glib:nick="default"
67              glib:name="GSK_BLEND_MODE_DEFAULT">
68        <doc xml:space="preserve"
69             filename="gsk/gskenums.h"
70             line="160">The default blend mode, which specifies no blending</doc>
71      </member>
72      <member name="multiply"
73              value="1"
74              c:identifier="GSK_BLEND_MODE_MULTIPLY"
75              glib:nick="multiply"
76              glib:name="GSK_BLEND_MODE_MULTIPLY">
77        <doc xml:space="preserve"
78             filename="gsk/gskenums.h"
79             line="161">The source color is multiplied by the destination
80  and replaces the destination</doc>
81      </member>
82      <member name="screen"
83              value="2"
84              c:identifier="GSK_BLEND_MODE_SCREEN"
85              glib:nick="screen"
86              glib:name="GSK_BLEND_MODE_SCREEN">
87        <doc xml:space="preserve"
88             filename="gsk/gskenums.h"
89             line="163">Multiplies the complements of the destination and source
90  color values, then complements the result.</doc>
91      </member>
92      <member name="overlay"
93              value="3"
94              c:identifier="GSK_BLEND_MODE_OVERLAY"
95              glib:nick="overlay"
96              glib:name="GSK_BLEND_MODE_OVERLAY">
97        <doc xml:space="preserve"
98             filename="gsk/gskenums.h"
99             line="165">Multiplies or screens the colors, depending on the
100  destination color value. This is the inverse of hard-list</doc>
101      </member>
102      <member name="darken"
103              value="4"
104              c:identifier="GSK_BLEND_MODE_DARKEN"
105              glib:nick="darken"
106              glib:name="GSK_BLEND_MODE_DARKEN">
107        <doc xml:space="preserve"
108             filename="gsk/gskenums.h"
109             line="167">Selects the darker of the destination and source colors</doc>
110      </member>
111      <member name="lighten"
112              value="5"
113              c:identifier="GSK_BLEND_MODE_LIGHTEN"
114              glib:nick="lighten"
115              glib:name="GSK_BLEND_MODE_LIGHTEN">
116        <doc xml:space="preserve"
117             filename="gsk/gskenums.h"
118             line="168">Selects the lighter of the destination and source colors</doc>
119      </member>
120      <member name="color_dodge"
121              value="6"
122              c:identifier="GSK_BLEND_MODE_COLOR_DODGE"
123              glib:nick="color-dodge"
124              glib:name="GSK_BLEND_MODE_COLOR_DODGE">
125        <doc xml:space="preserve"
126             filename="gsk/gskenums.h"
127             line="169">Brightens the destination color to reflect the source color</doc>
128      </member>
129      <member name="color_burn"
130              value="7"
131              c:identifier="GSK_BLEND_MODE_COLOR_BURN"
132              glib:nick="color-burn"
133              glib:name="GSK_BLEND_MODE_COLOR_BURN">
134        <doc xml:space="preserve"
135             filename="gsk/gskenums.h"
136             line="170">Darkens the destination color to reflect the source color</doc>
137      </member>
138      <member name="hard_light"
139              value="8"
140              c:identifier="GSK_BLEND_MODE_HARD_LIGHT"
141              glib:nick="hard-light"
142              glib:name="GSK_BLEND_MODE_HARD_LIGHT">
143        <doc xml:space="preserve"
144             filename="gsk/gskenums.h"
145             line="171">Multiplies or screens the colors, depending on the source color value</doc>
146      </member>
147      <member name="soft_light"
148              value="9"
149              c:identifier="GSK_BLEND_MODE_SOFT_LIGHT"
150              glib:nick="soft-light"
151              glib:name="GSK_BLEND_MODE_SOFT_LIGHT">
152        <doc xml:space="preserve"
153             filename="gsk/gskenums.h"
154             line="172">Darkens or lightens the colors, depending on the source color value</doc>
155      </member>
156      <member name="difference"
157              value="10"
158              c:identifier="GSK_BLEND_MODE_DIFFERENCE"
159              glib:nick="difference"
160              glib:name="GSK_BLEND_MODE_DIFFERENCE">
161        <doc xml:space="preserve"
162             filename="gsk/gskenums.h"
163             line="173">Subtracts the darker of the two constituent colors from the lighter color</doc>
164      </member>
165      <member name="exclusion"
166              value="11"
167              c:identifier="GSK_BLEND_MODE_EXCLUSION"
168              glib:nick="exclusion"
169              glib:name="GSK_BLEND_MODE_EXCLUSION">
170        <doc xml:space="preserve"
171             filename="gsk/gskenums.h"
172             line="174">Produces an effect similar to that of the difference mode but lower in contrast</doc>
173      </member>
174      <member name="color"
175              value="12"
176              c:identifier="GSK_BLEND_MODE_COLOR"
177              glib:nick="color"
178              glib:name="GSK_BLEND_MODE_COLOR">
179        <doc xml:space="preserve"
180             filename="gsk/gskenums.h"
181             line="175">Creates a color with the hue and saturation of the source color and the luminosity of the destination color</doc>
182      </member>
183      <member name="hue"
184              value="13"
185              c:identifier="GSK_BLEND_MODE_HUE"
186              glib:nick="hue"
187              glib:name="GSK_BLEND_MODE_HUE">
188        <doc xml:space="preserve"
189             filename="gsk/gskenums.h"
190             line="176">Creates a color with the hue of the source color and the saturation and luminosity of the destination color</doc>
191      </member>
192      <member name="saturation"
193              value="14"
194              c:identifier="GSK_BLEND_MODE_SATURATION"
195              glib:nick="saturation"
196              glib:name="GSK_BLEND_MODE_SATURATION">
197        <doc xml:space="preserve"
198             filename="gsk/gskenums.h"
199             line="177">Creates a color with the saturation of the source color and the hue and luminosity of the destination color</doc>
200      </member>
201      <member name="luminosity"
202              value="15"
203              c:identifier="GSK_BLEND_MODE_LUMINOSITY"
204              glib:nick="luminosity"
205              glib:name="GSK_BLEND_MODE_LUMINOSITY">
206        <doc xml:space="preserve"
207             filename="gsk/gskenums.h"
208             line="178">Creates a color with the luminosity of the source color and the hue and saturation of the destination color</doc>
209      </member>
210    </enumeration>
211    <class name="BlendNode"
212           c:symbol-prefix="blend_node"
213           c:type="GskBlendNode"
214           parent="RenderNode"
215           glib:type-name="GskBlendNode"
216           glib:get-type="gsk_blend_node_get_type"
217           glib:fundamental="1">
218      <doc xml:space="preserve"
219           filename="gsk/gskrendernodeimpl.c"
220           line="6667">A render node applying a blending function between its two child nodes.</doc>
221      <constructor name="new" c:identifier="gsk_blend_node_new">
222        <doc xml:space="preserve"
223             filename="gsk/gskrendernodeimpl.c"
224             line="6794">Creates a `GskRenderNode` that will use @blend_mode to blend the @top
225node onto the @bottom node.</doc>
226        <source-position filename="gsk/gskrendernode.h" line="521"/>
227        <return-value transfer-ownership="full">
228          <doc xml:space="preserve"
229               filename="gsk/gskrendernodeimpl.c"
230               line="6803">A new `GskRenderNode`</doc>
231          <type name="BlendNode" c:type="GskRenderNode*"/>
232        </return-value>
233        <parameters>
234          <parameter name="bottom" transfer-ownership="none">
235            <doc xml:space="preserve"
236                 filename="gsk/gskrendernodeimpl.c"
237                 line="6796">The bottom node to be drawn</doc>
238            <type name="RenderNode" c:type="GskRenderNode*"/>
239          </parameter>
240          <parameter name="top" transfer-ownership="none">
241            <doc xml:space="preserve"
242                 filename="gsk/gskrendernodeimpl.c"
243                 line="6797">The node to be blended onto the @bottom node</doc>
244            <type name="RenderNode" c:type="GskRenderNode*"/>
245          </parameter>
246          <parameter name="blend_mode" transfer-ownership="none">
247            <doc xml:space="preserve"
248                 filename="gsk/gskrendernodeimpl.c"
249                 line="6798">The blend mode to use</doc>
250            <type name="BlendMode" c:type="GskBlendMode"/>
251          </parameter>
252        </parameters>
253      </constructor>
254      <method name="get_blend_mode"
255              c:identifier="gsk_blend_node_get_blend_mode">
256        <doc xml:space="preserve"
257             filename="gsk/gskrendernodeimpl.c"
258             line="6865">Retrieves the blend mode used by @node.</doc>
259        <source-position filename="gsk/gskrendernode.h" line="529"/>
260        <return-value transfer-ownership="none">
261          <doc xml:space="preserve"
262               filename="gsk/gskrendernodeimpl.c"
263               line="6871">the blend mode</doc>
264          <type name="BlendMode" c:type="GskBlendMode"/>
265        </return-value>
266        <parameters>
267          <instance-parameter name="node" transfer-ownership="none">
268            <doc xml:space="preserve"
269                 filename="gsk/gskrendernodeimpl.c"
270                 line="6867">a blending `GskRenderNode`</doc>
271            <type name="BlendNode" c:type="const GskRenderNode*"/>
272          </instance-parameter>
273        </parameters>
274      </method>
275      <method name="get_bottom_child"
276              c:identifier="gsk_blend_node_get_bottom_child">
277        <doc xml:space="preserve"
278             filename="gsk/gskrendernodeimpl.c"
279             line="6833">Retrieves the bottom `GskRenderNode` child of the @node.</doc>
280        <source-position filename="gsk/gskrendernode.h" line="525"/>
281        <return-value transfer-ownership="none">
282          <doc xml:space="preserve"
283               filename="gsk/gskrendernodeimpl.c"
284               line="6839">the bottom child node</doc>
285          <type name="RenderNode" c:type="GskRenderNode*"/>
286        </return-value>
287        <parameters>
288          <instance-parameter name="node" transfer-ownership="none">
289            <doc xml:space="preserve"
290                 filename="gsk/gskrendernodeimpl.c"
291                 line="6835">a blending `GskRenderNode`</doc>
292            <type name="BlendNode" c:type="const GskRenderNode*"/>
293          </instance-parameter>
294        </parameters>
295      </method>
296      <method name="get_top_child" c:identifier="gsk_blend_node_get_top_child">
297        <doc xml:space="preserve"
298             filename="gsk/gskrendernodeimpl.c"
299             line="6849">Retrieves the top `GskRenderNode` child of the @node.</doc>
300        <source-position filename="gsk/gskrendernode.h" line="527"/>
301        <return-value transfer-ownership="none">
302          <doc xml:space="preserve"
303               filename="gsk/gskrendernodeimpl.c"
304               line="6855">the top child node</doc>
305          <type name="RenderNode" c:type="GskRenderNode*"/>
306        </return-value>
307        <parameters>
308          <instance-parameter name="node" transfer-ownership="none">
309            <doc xml:space="preserve"
310                 filename="gsk/gskrendernodeimpl.c"
311                 line="6851">a blending `GskRenderNode`</doc>
312            <type name="BlendNode" c:type="const GskRenderNode*"/>
313          </instance-parameter>
314        </parameters>
315      </method>
316    </class>
317    <class name="BlurNode"
318           c:symbol-prefix="blur_node"
319           c:type="GskBlurNode"
320           parent="RenderNode"
321           glib:type-name="GskBlurNode"
322           glib:get-type="gsk_blur_node_get_type"
323           glib:fundamental="1">
324      <doc xml:space="preserve"
325           filename="gsk/gskrendernodeimpl.c"
326           line="7431">A render node applying a blur effect to its single child.</doc>
327      <constructor name="new" c:identifier="gsk_blur_node_new">
328        <doc xml:space="preserve"
329             filename="gsk/gskrendernodeimpl.c"
330             line="7698">Creates a render node that blurs the child.</doc>
331        <source-position filename="gsk/gskrendernode.h" line="568"/>
332        <return-value transfer-ownership="full">
333          <doc xml:space="preserve"
334               filename="gsk/gskrendernodeimpl.c"
335               line="7705">a new `GskRenderNode`</doc>
336          <type name="BlurNode" c:type="GskRenderNode*"/>
337        </return-value>
338        <parameters>
339          <parameter name="child" transfer-ownership="none">
340            <doc xml:space="preserve"
341                 filename="gsk/gskrendernodeimpl.c"
342                 line="7700">the child node to blur</doc>
343            <type name="RenderNode" c:type="GskRenderNode*"/>
344          </parameter>
345          <parameter name="radius" transfer-ownership="none">
346            <doc xml:space="preserve"
347                 filename="gsk/gskrendernodeimpl.c"
348                 line="7701">the blur radius. Must be positive</doc>
349            <type name="gfloat" c:type="float"/>
350          </parameter>
351        </parameters>
352      </constructor>
353      <method name="get_child" c:identifier="gsk_blur_node_get_child">
354        <doc xml:space="preserve"
355             filename="gsk/gskrendernodeimpl.c"
356             line="7735">Retrieves the child `GskRenderNode` of the blur @node.</doc>
357        <source-position filename="gsk/gskrendernode.h" line="571"/>
358        <return-value transfer-ownership="none">
359          <doc xml:space="preserve"
360               filename="gsk/gskrendernodeimpl.c"
361               line="7741">the blurred child node</doc>
362          <type name="RenderNode" c:type="GskRenderNode*"/>
363        </return-value>
364        <parameters>
365          <instance-parameter name="node" transfer-ownership="none">
366            <doc xml:space="preserve"
367                 filename="gsk/gskrendernodeimpl.c"
368                 line="7737">a blur `GskRenderNode`</doc>
369            <type name="BlurNode" c:type="const GskRenderNode*"/>
370          </instance-parameter>
371        </parameters>
372      </method>
373      <method name="get_radius" c:identifier="gsk_blur_node_get_radius">
374        <doc xml:space="preserve"
375             filename="gsk/gskrendernodeimpl.c"
376             line="7751">Retrieves the blur radius of the @node.</doc>
377        <source-position filename="gsk/gskrendernode.h" line="573"/>
378        <return-value transfer-ownership="none">
379          <doc xml:space="preserve"
380               filename="gsk/gskrendernodeimpl.c"
381               line="7757">the blur radius</doc>
382          <type name="gfloat" c:type="float"/>
383        </return-value>
384        <parameters>
385          <instance-parameter name="node" transfer-ownership="none">
386            <doc xml:space="preserve"
387                 filename="gsk/gskrendernodeimpl.c"
388                 line="7753">a blur `GskRenderNode`</doc>
389            <type name="BlurNode" c:type="const GskRenderNode*"/>
390          </instance-parameter>
391        </parameters>
392      </method>
393    </class>
394    <class name="BorderNode"
395           c:symbol-prefix="border_node"
396           c:type="GskBorderNode"
397           parent="RenderNode"
398           glib:type-name="GskBorderNode"
399           glib:get-type="gsk_border_node_get_type"
400           glib:fundamental="1">
401      <doc xml:space="preserve"
402           filename="gsk/gskrendernodeimpl.c"
403           line="2180">A render node for a border.</doc>
404      <constructor name="new" c:identifier="gsk_border_node_new">
405        <doc xml:space="preserve"
406             filename="gsk/gskrendernodeimpl.c"
407             line="2473">Creates a `GskRenderNode` that will stroke a border rectangle inside the
408given @outline.
409
410The 4 sides of the border can have different widths and colors.</doc>
411        <source-position filename="gsk/gskrendernode.h" line="339"/>
412        <return-value transfer-ownership="full">
413          <doc xml:space="preserve"
414               filename="gsk/gskrendernodeimpl.c"
415               line="2486">A new `GskRenderNode`</doc>
416          <type name="BorderNode" c:type="GskRenderNode*"/>
417        </return-value>
418        <parameters>
419          <parameter name="outline" transfer-ownership="none">
420            <doc xml:space="preserve"
421                 filename="gsk/gskrendernodeimpl.c"
422                 line="2475">a `GskRoundedRect` describing the outline of the border</doc>
423            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
424          </parameter>
425          <parameter name="border_width" transfer-ownership="none">
426            <doc xml:space="preserve"
427                 filename="gsk/gskrendernodeimpl.c"
428                 line="2476">the stroke width of the border on
429    the top, right, bottom and left side respectively.</doc>
430            <array zero-terminated="0" c:type="const float*" fixed-size="4">
431              <type name="gfloat" c:type="float"/>
432            </array>
433          </parameter>
434          <parameter name="border_color" transfer-ownership="none">
435            <doc xml:space="preserve"
436                 filename="gsk/gskrendernodeimpl.c"
437                 line="2478">the color used on the top, right,
438    bottom and left side.</doc>
439            <array zero-terminated="0" c:type="const GdkRGBA*" fixed-size="4">
440              <type name="Gdk.RGBA" c:type="GdkRGBA"/>
441            </array>
442          </parameter>
443        </parameters>
444      </constructor>
445      <method name="get_colors" c:identifier="gsk_border_node_get_colors">
446        <doc xml:space="preserve"
447             filename="gsk/gskrendernodeimpl.c"
448             line="2442">Retrieves the colors of the border.</doc>
449        <source-position filename="gsk/gskrendernode.h" line="347"/>
450        <return-value transfer-ownership="none">
451          <doc xml:space="preserve"
452               filename="gsk/gskrendernodeimpl.c"
453               line="2448">an array of 4 `GdkRGBA`
454  structs for the top, right, bottom and left color of the border</doc>
455          <array zero-terminated="0" c:type="const GdkRGBA*" fixed-size="4">
456            <type name="Gdk.RGBA" c:type="GdkRGBA"/>
457          </array>
458        </return-value>
459        <parameters>
460          <instance-parameter name="node" transfer-ownership="none">
461            <doc xml:space="preserve"
462                 filename="gsk/gskrendernodeimpl.c"
463                 line="2444">a `GskRenderNode` for a border</doc>
464            <type name="BorderNode" c:type="const GskRenderNode*"/>
465          </instance-parameter>
466        </parameters>
467      </method>
468      <method name="get_outline" c:identifier="gsk_border_node_get_outline">
469        <doc xml:space="preserve"
470             filename="gsk/gskrendernodeimpl.c"
471             line="2408">Retrieves the outline of the border.</doc>
472        <source-position filename="gsk/gskrendernode.h" line="343"/>
473        <return-value transfer-ownership="none">
474          <doc xml:space="preserve"
475               filename="gsk/gskrendernodeimpl.c"
476               line="2414">the outline of the border</doc>
477          <type name="RoundedRect" c:type="const GskRoundedRect*"/>
478        </return-value>
479        <parameters>
480          <instance-parameter name="node" transfer-ownership="none">
481            <doc xml:space="preserve"
482                 filename="gsk/gskrendernodeimpl.c"
483                 line="2410">a `GskRenderNode` for a border</doc>
484            <type name="BorderNode" c:type="const GskRenderNode*"/>
485          </instance-parameter>
486        </parameters>
487      </method>
488      <method name="get_widths" c:identifier="gsk_border_node_get_widths">
489        <doc xml:space="preserve"
490             filename="gsk/gskrendernodeimpl.c"
491             line="2424">Retrieves the stroke widths of the border.</doc>
492        <source-position filename="gsk/gskrendernode.h" line="345"/>
493        <return-value transfer-ownership="none">
494          <doc xml:space="preserve"
495               filename="gsk/gskrendernodeimpl.c"
496               line="2430">an array of 4 floats
497  for the top, right, bottom and left stroke width of the border,
498  respectively</doc>
499          <array zero-terminated="0" c:type="const float*" fixed-size="4">
500            <type name="gfloat" c:type="float"/>
501          </array>
502        </return-value>
503        <parameters>
504          <instance-parameter name="node" transfer-ownership="none">
505            <doc xml:space="preserve"
506                 filename="gsk/gskrendernodeimpl.c"
507                 line="2426">a `GskRenderNode` for a border</doc>
508            <type name="BorderNode" c:type="const GskRenderNode*"/>
509          </instance-parameter>
510        </parameters>
511      </method>
512    </class>
513    <class name="BroadwayRenderer"
514           c:symbol-prefix="broadway_renderer"
515           c:type="GskBroadwayRenderer"
516           parent="Renderer"
517           glib:type-name="GskBroadwayRenderer"
518           glib:get-type="gsk_broadway_renderer_get_type"
519           glib:type-struct="BroadwayRendererClass">
520      <doc xml:space="preserve"
521           filename="gsk/broadway/gskbroadwayrenderer.c"
522           line="14">A Broadway based renderer.
523
524See [class@Gsk.Renderer].</doc>
525      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
526                       line="38"/>
527      <constructor name="new"
528                   c:identifier="gsk_broadway_renderer_new"
529                   deprecated="1"
530                   deprecated-version="4.20">
531        <doc xml:space="preserve"
532             filename="gsk/broadway/gskbroadwayrenderer.c"
533             line="998">Creates a new Broadway renderer.
534
535The Broadway renderer is the default renderer for the broadway backend.
536It will only work with broadway surfaces, otherwise it will fail the
537call to gsk_renderer_realize().
538
539This function is only available when GTK was compiled with Broadway
540support.</doc>
541        <doc-deprecated xml:space="preserve">Broadway will be retired in GTK 5</doc-deprecated>
542        <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
543                         line="45"/>
544        <return-value transfer-ownership="full">
545          <doc xml:space="preserve"
546               filename="gsk/broadway/gskbroadwayrenderer.c"
547               line="1010">a new Broadway renderer.</doc>
548          <type name="Renderer" c:type="GskRenderer*"/>
549        </return-value>
550      </constructor>
551    </class>
552    <record name="BroadwayRendererClass"
553            c:type="GskBroadwayRendererClass"
554            disguised="1"
555            opaque="1"
556            glib:is-gtype-struct-for="BroadwayRenderer">
557      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
558                       line="38"/>
559    </record>
560    <function-macro name="CAIRO_RENDERER"
561                    c:identifier="GSK_CAIRO_RENDERER"
562                    introspectable="0">
563      <source-position filename="gsk/gskcairorenderer.h" line="34"/>
564      <parameters>
565        <parameter name="obj">
566        </parameter>
567      </parameters>
568    </function-macro>
569    <function-macro name="CAIRO_RENDERER_CLASS"
570                    c:identifier="GSK_CAIRO_RENDERER_CLASS"
571                    introspectable="0">
572      <source-position filename="gsk/gskcairorenderer.h" line="36"/>
573      <parameters>
574        <parameter name="klass">
575        </parameter>
576      </parameters>
577    </function-macro>
578    <function-macro name="CAIRO_RENDERER_GET_CLASS"
579                    c:identifier="GSK_CAIRO_RENDERER_GET_CLASS"
580                    introspectable="0">
581      <source-position filename="gsk/gskcairorenderer.h" line="38"/>
582      <parameters>
583        <parameter name="obj">
584        </parameter>
585      </parameters>
586    </function-macro>
587    <class name="CairoNode"
588           c:symbol-prefix="cairo_node"
589           c:type="GskCairoNode"
590           parent="RenderNode"
591           glib:type-name="GskCairoNode"
592           glib:get-type="gsk_cairo_node_get_type"
593           glib:fundamental="1">
594      <doc xml:space="preserve"
595           filename="gsk/gskrendernodeimpl.c"
596           line="4103">A render node for a Cairo surface.</doc>
597      <constructor name="new" c:identifier="gsk_cairo_node_new">
598        <doc xml:space="preserve"
599             filename="gsk/gskrendernodeimpl.c"
600             line="4202">Creates a `GskRenderNode` that will render a cairo surface
601into the area given by @bounds.
602
603You can draw to the cairo surface using [method@Gsk.CairoNode.get_draw_context].</doc>
604        <source-position filename="gsk/gskrendernode.h" line="396"/>
605        <return-value transfer-ownership="full">
606          <doc xml:space="preserve"
607               filename="gsk/gskrendernodeimpl.c"
608               line="4211">A new `GskRenderNode`</doc>
609          <type name="CairoNode" c:type="GskRenderNode*"/>
610        </return-value>
611        <parameters>
612          <parameter name="bounds" transfer-ownership="none">
613            <doc xml:space="preserve"
614                 filename="gsk/gskrendernodeimpl.c"
615                 line="4204">the rectangle to render to</doc>
616            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
617          </parameter>
618        </parameters>
619      </constructor>
620      <method name="get_draw_context"
621              c:identifier="gsk_cairo_node_get_draw_context">
622        <doc xml:space="preserve"
623             filename="gsk/gskrendernodeimpl.c"
624             line="4231">Creates a Cairo context for drawing using the surface associated
625to the render node.
626
627If no surface exists yet, a surface will be created optimized for
628rendering to @renderer.</doc>
629        <source-position filename="gsk/gskrendernode.h" line="398"/>
630        <return-value transfer-ownership="full">
631          <doc xml:space="preserve"
632               filename="gsk/gskrendernodeimpl.c"
633               line="4241">a Cairo context used for drawing; use
634  cairo_destroy() when done drawing</doc>
635          <type name="cairo.Context" c:type="cairo_t*"/>
636        </return-value>
637        <parameters>
638          <instance-parameter name="node" transfer-ownership="none">
639            <doc xml:space="preserve"
640                 filename="gsk/gskrendernodeimpl.c"
641                 line="4233">a `GskRenderNode` for a Cairo surface</doc>
642            <type name="CairoNode" c:type="GskRenderNode*"/>
643          </instance-parameter>
644        </parameters>
645      </method>
646      <method name="get_surface" c:identifier="gsk_cairo_node_get_surface">
647        <doc xml:space="preserve"
648             filename="gsk/gskrendernodeimpl.c"
649             line="4172">Retrieves the Cairo surface used by the render node.</doc>
650        <source-position filename="gsk/gskrendernode.h" line="400"/>
651        <return-value transfer-ownership="none">
652          <doc xml:space="preserve"
653               filename="gsk/gskrendernodeimpl.c"
654               line="4178">a Cairo surface</doc>
655          <type name="cairo.Surface" c:type="cairo_surface_t*"/>
656        </return-value>
657        <parameters>
658          <instance-parameter name="node" transfer-ownership="none">
659            <doc xml:space="preserve"
660                 filename="gsk/gskrendernodeimpl.c"
661                 line="4174">a `GskRenderNode` for a Cairo surface</doc>
662            <type name="CairoNode" c:type="GskRenderNode*"/>
663          </instance-parameter>
664        </parameters>
665      </method>
666    </class>
667    <class name="CairoRenderer"
668           c:symbol-prefix="cairo_renderer"
669           c:type="GskCairoRenderer"
670           parent="Renderer"
671           glib:type-name="GskCairoRenderer"
672           glib:get-type="gsk_cairo_renderer_get_type"
673           glib:type-struct="CairoRendererClass">
674      <doc xml:space="preserve"
675           filename="gsk/gskcairorenderer.h"
676           line="40">Renders a GSK rendernode tree with cairo.
677
678Since it is using cairo, this renderer cannot support
6793D transformations.</doc>
680      <source-position filename="gsk/gskcairorenderer.h" line="49"/>
681      <constructor name="new" c:identifier="gsk_cairo_renderer_new">
682        <doc xml:space="preserve"
683             filename="gsk/gskcairorenderer.c"
684             line="210">Creates a new Cairo renderer.
685
686The Cairo renderer is the fallback renderer drawing in ways similar
687to how GTK 3 drew its content. Its primary use is as comparison tool.
688
689The Cairo renderer is incomplete. It cannot render 3D transformed
690content and will instead render an error marker. Its usage should be
691avoided.</doc>
692        <source-position filename="gsk/gskcairorenderer.h" line="55"/>
693        <return-value transfer-ownership="full">
694          <doc xml:space="preserve"
695               filename="gsk/gskcairorenderer.c"
696               line="222">a new Cairo renderer.</doc>
697          <type name="Renderer" c:type="GskRenderer*"/>
698        </return-value>
699      </constructor>
700    </class>
701    <record name="CairoRendererClass"
702            c:type="GskCairoRendererClass"
703            disguised="1"
704            opaque="1"
705            glib:is-gtype-struct-for="CairoRenderer">
706      <source-position filename="gsk/gskcairorenderer.h" line="49"/>
707    </record>
708    <class name="ClipNode"
709           c:symbol-prefix="clip_node"
710           c:type="GskClipNode"
711           parent="RenderNode"
712           glib:type-name="GskClipNode"
713           glib:get-type="gsk_clip_node_get_type"
714           glib:fundamental="1">
715      <doc xml:space="preserve"
716           filename="gsk/gskrendernodeimpl.c"
717           line="5548">A render node applying a rectangular clip to its single child node.</doc>
718      <constructor name="new" c:identifier="gsk_clip_node_new">
719        <doc xml:space="preserve"
720             filename="gsk/gskrendernodeimpl.c"
721             line="5642">Creates a `GskRenderNode` that will clip the @child to the area
722given by @clip.</doc>
723        <source-position filename="gsk/gskrendernode.h" line="461"/>
724        <return-value transfer-ownership="full">
725          <doc xml:space="preserve"
726               filename="gsk/gskrendernodeimpl.c"
727               line="5650">A new `GskRenderNode`</doc>
728          <type name="ClipNode" c:type="GskRenderNode*"/>
729        </return-value>
730        <parameters>
731          <parameter name="child" transfer-ownership="none">
732            <doc xml:space="preserve"
733                 filename="gsk/gskrendernodeimpl.c"
734                 line="5644">The node to draw</doc>
735            <type name="RenderNode" c:type="GskRenderNode*"/>
736          </parameter>
737          <parameter name="clip" transfer-ownership="none">
738            <doc xml:space="preserve"
739                 filename="gsk/gskrendernodeimpl.c"
740                 line="5645">The clip to apply</doc>
741            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
742          </parameter>
743        </parameters>
744      </constructor>
745      <method name="get_child" c:identifier="gsk_clip_node_get_child">
746        <doc xml:space="preserve"
747             filename="gsk/gskrendernodeimpl.c"
748             line="5679">Gets the child node that is getting clipped by the given @node.</doc>
749        <source-position filename="gsk/gskrendernode.h" line="464"/>
750        <return-value transfer-ownership="none">
751          <doc xml:space="preserve"
752               filename="gsk/gskrendernodeimpl.c"
753               line="5685">The child that is getting clipped</doc>
754          <type name="RenderNode" c:type="GskRenderNode*"/>
755        </return-value>
756        <parameters>
757          <instance-parameter name="node" transfer-ownership="none">
758            <doc xml:space="preserve"
759                 filename="gsk/gskrendernodeimpl.c"
760                 line="5681">a clip @GskRenderNode</doc>
761            <type name="ClipNode" c:type="const GskRenderNode*"/>
762          </instance-parameter>
763        </parameters>
764      </method>
765      <method name="get_clip" c:identifier="gsk_clip_node_get_clip">
766        <doc xml:space="preserve"
767             filename="gsk/gskrendernodeimpl.c"
768             line="5695">Retrieves the clip rectangle for @node.</doc>
769        <source-position filename="gsk/gskrendernode.h" line="466"/>
770        <return-value transfer-ownership="none">
771          <doc xml:space="preserve"
772               filename="gsk/gskrendernodeimpl.c"
773               line="5701">a clip rectangle</doc>
774          <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
775        </return-value>
776        <parameters>
777          <instance-parameter name="node" transfer-ownership="none">
778            <doc xml:space="preserve"
779                 filename="gsk/gskrendernodeimpl.c"
780                 line="5697">a `GskClipNode`</doc>
781            <type name="ClipNode" c:type="const GskRenderNode*"/>
782          </instance-parameter>
783        </parameters>
784      </method>
785    </class>
786    <class name="ColorMatrixNode"
787           c:symbol-prefix="color_matrix_node"
788           c:type="GskColorMatrixNode"
789           parent="RenderNode"
790           glib:type-name="GskColorMatrixNode"
791           glib:get-type="gsk_color_matrix_node_get_type"
792           glib:fundamental="1">
793      <doc xml:space="preserve"
794           filename="gsk/gskrendernodeimpl.c"
795           line="5005">A render node controlling the color matrix of its single child node.</doc>
796      <constructor name="new" c:identifier="gsk_color_matrix_node_new">
797        <doc xml:space="preserve"
798             filename="gsk/gskrendernodeimpl.c"
799             line="5160">Creates a `GskRenderNode` that will drawn the @child with
800@color_matrix.
801
802In particular, the node will transform colors by applying
803
804    pixel = transpose(color_matrix) * pixel + color_offset
805
806for every pixel. The transformation operates on unpremultiplied
807colors, with color components ordered R, G, B, A.</doc>
808        <source-position filename="gsk/gskrendernode.h" line="436"/>
809        <return-value transfer-ownership="full">
810          <doc xml:space="preserve"
811               filename="gsk/gskrendernodeimpl.c"
812               line="5176">A new `GskRenderNode`</doc>
813          <type name="ColorMatrixNode" c:type="GskRenderNode*"/>
814        </return-value>
815        <parameters>
816          <parameter name="child" transfer-ownership="none">
817            <doc xml:space="preserve"
818                 filename="gsk/gskrendernodeimpl.c"
819                 line="5162">The node to draw</doc>
820            <type name="RenderNode" c:type="GskRenderNode*"/>
821          </parameter>
822          <parameter name="color_matrix" transfer-ownership="none">
823            <doc xml:space="preserve"
824                 filename="gsk/gskrendernodeimpl.c"
825                 line="5163">The matrix to apply</doc>
826            <type name="Graphene.Matrix" c:type="const graphene_matrix_t*"/>
827          </parameter>
828          <parameter name="color_offset" transfer-ownership="none">
829            <doc xml:space="preserve"
830                 filename="gsk/gskrendernodeimpl.c"
831                 line="5164">Values to add to the color</doc>
832            <type name="Graphene.Vec4" c:type="const graphene_vec4_t*"/>
833          </parameter>
834        </parameters>
835      </constructor>
836      <method name="get_child" c:identifier="gsk_color_matrix_node_get_child">
837        <doc xml:space="preserve"
838             filename="gsk/gskrendernodeimpl.c"
839             line="5203">Gets the child node that is getting its colors modified by the given @node.</doc>
840        <source-position filename="gsk/gskrendernode.h" line="440"/>
841        <return-value transfer-ownership="none">
842          <doc xml:space="preserve"
843               filename="gsk/gskrendernodeimpl.c"
844               line="5209">The child that is getting its colors modified</doc>
845          <type name="RenderNode" c:type="GskRenderNode*"/>
846        </return-value>
847        <parameters>
848          <instance-parameter name="node" transfer-ownership="none">
849            <doc xml:space="preserve"
850                 filename="gsk/gskrendernodeimpl.c"
851                 line="5205">a color matrix `GskRenderNode`</doc>
852            <type name="ColorMatrixNode" c:type="const GskRenderNode*"/>
853          </instance-parameter>
854        </parameters>
855      </method>
856      <method name="get_color_matrix"
857              c:identifier="gsk_color_matrix_node_get_color_matrix">
858        <doc xml:space="preserve"
859             filename="gsk/gskrendernodeimpl.c"
860             line="5219">Retrieves the color matrix used by the @node.</doc>
861        <source-position filename="gsk/gskrendernode.h" line="443"/>
862        <return-value transfer-ownership="none">
863          <doc xml:space="preserve"
864               filename="gsk/gskrendernodeimpl.c"
865               line="5225">a 4x4 color matrix</doc>
866          <type name="Graphene.Matrix" c:type="const graphene_matrix_t*"/>
867        </return-value>
868        <parameters>
869          <instance-parameter name="node" transfer-ownership="none">
870            <doc xml:space="preserve"
871                 filename="gsk/gskrendernodeimpl.c"
872                 line="5221">a color matrix `GskRenderNode`</doc>
873            <type name="ColorMatrixNode" c:type="const GskRenderNode*"/>
874          </instance-parameter>
875        </parameters>
876      </method>
877      <method name="get_color_offset"
878              c:identifier="gsk_color_matrix_node_get_color_offset">
879        <doc xml:space="preserve"
880             filename="gsk/gskrendernodeimpl.c"
881             line="5235">Retrieves the color offset used by the @node.</doc>
882        <source-position filename="gsk/gskrendernode.h" line="445"/>
883        <return-value transfer-ownership="none">
884          <doc xml:space="preserve"
885               filename="gsk/gskrendernodeimpl.c"
886               line="5241">a color vector</doc>
887          <type name="Graphene.Vec4" c:type="const graphene_vec4_t*"/>
888        </return-value>
889        <parameters>
890          <instance-parameter name="node" transfer-ownership="none">
891            <doc xml:space="preserve"
892                 filename="gsk/gskrendernodeimpl.c"
893                 line="5237">a color matrix `GskRenderNode`</doc>
894            <type name="ColorMatrixNode" c:type="const GskRenderNode*"/>
895          </instance-parameter>
896        </parameters>
897      </method>
898    </class>
899    <class name="ColorNode"
900           c:symbol-prefix="color_node"
901           c:type="GskColorNode"
902           parent="RenderNode"
903           glib:type-name="GskColorNode"
904           glib:get-type="gsk_color_node_get_type"
905           glib:fundamental="1">
906      <doc xml:space="preserve"
907           filename="gsk/gskrendernodeimpl.c"
908           line="158">A render node for a solid color.</doc>
909      <constructor name="new" c:identifier="gsk_color_node_new">
910        <doc xml:space="preserve"
911             filename="gsk/gskrendernodeimpl.c"
912             line="260">Creates a `GskRenderNode` that will render the color specified by @rgba into
913the area given by @bounds.</doc>
914        <source-position filename="gsk/gskrendernode.h" line="226"/>
915        <return-value transfer-ownership="full">
916          <doc xml:space="preserve"
917               filename="gsk/gskrendernodeimpl.c"
918               line="268">A new `GskRenderNode`</doc>
919          <type name="ColorNode" c:type="GskRenderNode*"/>
920        </return-value>
921        <parameters>
922          <parameter name="rgba" transfer-ownership="none">
923            <doc xml:space="preserve"
924                 filename="gsk/gskrendernodeimpl.c"
925                 line="262">a `GdkRGBA` specifying a color</doc>
926            <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
927          </parameter>
928          <parameter name="bounds" transfer-ownership="none">
929            <doc xml:space="preserve"
930                 filename="gsk/gskrendernodeimpl.c"
931                 line="263">the rectangle to render the color into</doc>
932            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
933          </parameter>
934        </parameters>
935      </constructor>
936      <method name="get_color" c:identifier="gsk_color_node_get_color">
937        <doc xml:space="preserve"
938             filename="gsk/gskrendernodeimpl.c"
939             line="220">Retrieves the color of the given @node.
940
941The value returned by this function will not be correct
942if the render node was created for a non-sRGB color.</doc>
943        <source-position filename="gsk/gskrendernode.h" line="229"/>
944        <return-value transfer-ownership="none">
945          <doc xml:space="preserve"
946               filename="gsk/gskrendernodeimpl.c"
947               line="229">the color of the node</doc>
948          <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
949        </return-value>
950        <parameters>
951          <instance-parameter name="node" transfer-ownership="none">
952            <doc xml:space="preserve"
953                 filename="gsk/gskrendernodeimpl.c"
954                 line="222">a `GskRenderNode`</doc>
955            <type name="ColorNode" c:type="const GskRenderNode*"/>
956          </instance-parameter>
957        </parameters>
958      </method>
959    </class>
960    <record name="ColorStop" c:type="GskColorStop">
961      <doc xml:space="preserve"
962           filename="gsk/gskrendernode.h"
963           line="41">A color stop in a gradient node.</doc>
964      <source-position filename="gsk/gskrendernode.h" line="52"/>
965      <field name="offset" writable="1">
966        <doc xml:space="preserve"
967             filename="gsk/gskrendernode.h"
968             line="43">the offset of the color stop</doc>
969        <type name="gfloat" c:type="float"/>
970      </field>
971      <field name="color" writable="1">
972        <doc xml:space="preserve"
973             filename="gsk/gskrendernode.h"
974             line="44">the color at the given offset</doc>
975        <type name="Gdk.RGBA" c:type="GdkRGBA"/>
976      </field>
977    </record>
978    <record name="ComponentTransfer"
979            c:type="GskComponentTransfer"
980            opaque="1"
981            version="4.20"
982            glib:type-name="GskComponentTransfer"
983            glib:get-type="gsk_component_transfer_get_type"
984            c:symbol-prefix="component_transfer">
985      <doc xml:space="preserve"
986           filename="gsk/gskcomponenttransfer.c"
987           line="24">Specifies a transfer function for a color component to be applied
988while rendering.
989
990The available functions include linear, piecewise-linear,
991gamma and step functions.
992
993Note that the transfer function is applied to un-premultiplied
994values, and all results are clamped to the [0, 1] range.</doc>
995      <source-position filename="gsk/gsktypes.h" line="37"/>
996      <constructor name="new_discrete"
997                   c:identifier="gsk_component_transfer_new_discrete"
998                   version="4.20">
999        <doc xml:space="preserve"
1000             filename="gsk/gskcomponenttransfer.c"
1001             line="184">Creates a new component transfer that applies
1002a step function.
1003
1004The new value is computed as
1005
1006    C' = values[k]
1007
1008where k is the smallest value such that
1009
1010    k / n &lt;= C &lt; (k + 1) / n
1011
1012&lt;figure&gt;
1013  &lt;picture&gt;
1014    &lt;source srcset="discrete-dark.png" media="(prefers-color-scheme: dark)"&gt;
1015      &lt;img alt="Component transfer: discrete" src="discrete-light.png"&gt;
1016  &lt;/picture&gt;
1017&lt;/figure&gt;</doc>
1018        <source-position filename="gsk/gskcomponenttransfer.h" line="47"/>
1019        <return-value transfer-ownership="full">
1020          <doc xml:space="preserve"
1021               filename="gsk/gskcomponenttransfer.c"
1022               line="207">a new `GskComponentTransfer`</doc>
1023          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1024        </return-value>
1025        <parameters>
1026          <parameter name="n" transfer-ownership="none">
1027            <doc xml:space="preserve"
1028                 filename="gsk/gskcomponenttransfer.c"
1029                 line="186">Number of values</doc>
1030            <type name="guint" c:type="guint"/>
1031          </parameter>
1032          <parameter name="values" transfer-ownership="none">
1033            <doc xml:space="preserve"
1034                 filename="gsk/gskcomponenttransfer.c"
1035                 line="187">Values</doc>
1036            <array length="0" zero-terminated="0" c:type="float*">
1037              <type name="gfloat" c:type="float"/>
1038            </array>
1039          </parameter>
1040        </parameters>
1041      </constructor>
1042      <constructor name="new_gamma"
1043                   c:identifier="gsk_component_transfer_new_gamma"
1044                   version="4.20">
1045        <doc xml:space="preserve"
1046             filename="gsk/gskcomponenttransfer.c"
1047             line="143">Creates a new component transfer that applies
1048a gamma transform.
1049
1050The new value is computed as
1051
1052    C' = amp * pow (C, exp) + ofs
1053
1054&lt;figure&gt;
1055  &lt;picture&gt;
1056    &lt;source srcset="gamma-dark.png" media="(prefers-color-scheme: dark)"&gt;
1057      &lt;img alt="Component transfer: gamma" src="gamma-light.png"&gt;
1058  &lt;/picture&gt;
1059&lt;/figure&gt;</doc>
1060        <source-position filename="gsk/gskcomponenttransfer.h" line="43"/>
1061        <return-value transfer-ownership="full">
1062          <doc xml:space="preserve"
1063               filename="gsk/gskcomponenttransfer.c"
1064               line="163">a new `GskComponentTransfer`</doc>
1065          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1066        </return-value>
1067        <parameters>
1068          <parameter name="amp" transfer-ownership="none">
1069            <doc xml:space="preserve"
1070                 filename="gsk/gskcomponenttransfer.c"
1071                 line="145">Amplitude</doc>
1072            <type name="gfloat" c:type="float"/>
1073          </parameter>
1074          <parameter name="exp" transfer-ownership="none">
1075            <doc xml:space="preserve"
1076                 filename="gsk/gskcomponenttransfer.c"
1077                 line="146">Exponent</doc>
1078            <type name="gfloat" c:type="float"/>
1079          </parameter>
1080          <parameter name="ofs" transfer-ownership="none">
1081            <doc xml:space="preserve"
1082                 filename="gsk/gskcomponenttransfer.c"
1083                 line="147">Offset</doc>
1084            <type name="gfloat" c:type="float"/>
1085          </parameter>
1086        </parameters>
1087      </constructor>
1088      <constructor name="new_identity"
1089                   c:identifier="gsk_component_transfer_new_identity"
1090                   version="4.20">
1091        <doc xml:space="preserve"
1092             filename="gsk/gskcomponenttransfer.c"
1093             line="41">Creates a new component transfer that doesn't
1094change the component value.
1095
1096&lt;figure&gt;
1097  &lt;picture&gt;
1098    &lt;source srcset="identity-dark.png" media="(prefers-color-scheme: dark)"&gt;
1099      &lt;img alt="Component transfer: identity" src="identity-light.png"&gt;
1100  &lt;/picture&gt;
1101&lt;/figure&gt;</doc>
1102        <source-position filename="gsk/gskcomponenttransfer.h" line="36"/>
1103        <return-value transfer-ownership="full">
1104          <doc xml:space="preserve"
1105               filename="gsk/gskcomponenttransfer.c"
1106               line="54">a new `GskComponentTransfer`</doc>
1107          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1108        </return-value>
1109      </constructor>
1110      <constructor name="new_levels"
1111                   c:identifier="gsk_component_transfer_new_levels"
1112                   version="4.20">
1113        <doc xml:space="preserve"
1114             filename="gsk/gskcomponenttransfer.c"
1115             line="70">Creates a new component transfer that limits
1116the values of the component to `n` levels.
1117
1118The new value is computed as
1119
1120    C' = (floor (C * n) + 0.5) / n
1121
1122&lt;figure&gt;
1123  &lt;picture&gt;
1124    &lt;source srcset="levels-dark.png" media="(prefers-color-scheme: dark)"&gt;
1125      &lt;img alt="Component transfer: levels" src="levels-light.png"&gt;
1126  &lt;/picture&gt;
1127&lt;/figure&gt;</doc>
1128        <source-position filename="gsk/gskcomponenttransfer.h" line="38"/>
1129        <return-value transfer-ownership="full">
1130          <doc xml:space="preserve"
1131               filename="gsk/gskcomponenttransfer.c"
1132               line="88">a new `GskComponentTransfer`</doc>
1133          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1134        </return-value>
1135        <parameters>
1136          <parameter name="n" transfer-ownership="none">
1137            <doc xml:space="preserve"
1138                 filename="gsk/gskcomponenttransfer.c"
1139                 line="72">Number of levels</doc>
1140            <type name="gfloat" c:type="float"/>
1141          </parameter>
1142        </parameters>
1143      </constructor>
1144      <constructor name="new_linear"
1145                   c:identifier="gsk_component_transfer_new_linear"
1146                   version="4.20">
1147        <doc xml:space="preserve"
1148             filename="gsk/gskcomponenttransfer.c"
1149             line="105">Creates a new component transfer that applies
1150a linear transform.
1151
1152The new value is computed as
1153
1154    C' = C * m + b
1155
1156&lt;figure&gt;
1157  &lt;picture&gt;
1158    &lt;source srcset="linear-dark.png" media="(prefers-color-scheme: dark)"&gt;
1159      &lt;img alt="Component transfer: linear" src="linear-light.png"&gt;
1160  &lt;/picture&gt;
1161&lt;/figure&gt;</doc>
1162        <source-position filename="gsk/gskcomponenttransfer.h" line="40"/>
1163        <return-value transfer-ownership="full">
1164          <doc xml:space="preserve"
1165               filename="gsk/gskcomponenttransfer.c"
1166               line="124">a new `GskComponentTransfer`</doc>
1167          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1168        </return-value>
1169        <parameters>
1170          <parameter name="m" transfer-ownership="none">
1171            <doc xml:space="preserve"
1172                 filename="gsk/gskcomponenttransfer.c"
1173                 line="107">Slope</doc>
1174            <type name="gfloat" c:type="float"/>
1175          </parameter>
1176          <parameter name="b" transfer-ownership="none">
1177            <doc xml:space="preserve"
1178                 filename="gsk/gskcomponenttransfer.c"
1179                 line="108">Offset</doc>
1180            <type name="gfloat" c:type="float"/>
1181          </parameter>
1182        </parameters>
1183      </constructor>
1184      <constructor name="new_table"
1185                   c:identifier="gsk_component_transfer_new_table"
1186                   version="4.20">
1187        <doc xml:space="preserve"
1188             filename="gsk/gskcomponenttransfer.c"
1189             line="227">Creates a new component transfer that applies
1190a piecewise linear function.
1191
1192The new value is computed as
1193
1194    C' = values[k] + (C - k / (n - 1)) * n * (values[k + 1] - values[k])
1195
1196where k is the smallest value such that
1197
1198    k / (n - 1) &lt;= C &lt; (k + 1) / (n - 1)
1199
1200&lt;figure&gt;
1201  &lt;picture&gt;
1202    &lt;source srcset="table-dark.png" media="(prefers-color-scheme: dark)"&gt;
1203      &lt;img alt="Component transfer: table" src="table-light.png"&gt;
1204  &lt;/picture&gt;
1205&lt;/figure&gt;</doc>
1206        <source-position filename="gsk/gskcomponenttransfer.h" line="50"/>
1207        <return-value transfer-ownership="full">
1208          <doc xml:space="preserve"
1209               filename="gsk/gskcomponenttransfer.c"
1210               line="250">a new `GskComponentTransfer`</doc>
1211          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1212        </return-value>
1213        <parameters>
1214          <parameter name="n" transfer-ownership="none">
1215            <doc xml:space="preserve"
1216                 filename="gsk/gskcomponenttransfer.c"
1217                 line="229">Number of values</doc>
1218            <type name="guint" c:type="guint"/>
1219          </parameter>
1220          <parameter name="values" transfer-ownership="none">
1221            <doc xml:space="preserve"
1222                 filename="gsk/gskcomponenttransfer.c"
1223                 line="230">Values</doc>
1224            <array length="0" zero-terminated="0" c:type="float*">
1225              <type name="gfloat" c:type="float"/>
1226            </array>
1227          </parameter>
1228        </parameters>
1229      </constructor>
1230      <method name="copy"
1231              c:identifier="gsk_component_transfer_copy"
1232              version="4.20">
1233        <doc xml:space="preserve"
1234             filename="gsk/gskcomponenttransfer.c"
1235             line="270">Creates a copy of @other.</doc>
1236        <source-position filename="gsk/gskcomponenttransfer.h" line="53"/>
1237        <return-value transfer-ownership="full">
1238          <doc xml:space="preserve"
1239               filename="gsk/gskcomponenttransfer.c"
1240               line="276">a newly allocated copy of @other</doc>
1241          <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1242        </return-value>
1243        <parameters>
1244          <instance-parameter name="other" transfer-ownership="none">
1245            <doc xml:space="preserve"
1246                 filename="gsk/gskcomponenttransfer.c"
1247                 line="272">a component transfer</doc>
1248            <type name="ComponentTransfer"
1249                  c:type="const GskComponentTransfer*"/>
1250          </instance-parameter>
1251        </parameters>
1252      </method>
1253      <method name="free"
1254              c:identifier="gsk_component_transfer_free"
1255              version="4.20">
1256        <doc xml:space="preserve"
1257             filename="gsk/gskcomponenttransfer.c"
1258             line="294">Frees a component transfer.</doc>
1259        <source-position filename="gsk/gskcomponenttransfer.h" line="55"/>
1260        <return-value transfer-ownership="none">
1261          <type name="none" c:type="void"/>
1262        </return-value>
1263        <parameters>
1264          <instance-parameter name="self" transfer-ownership="none">
1265            <doc xml:space="preserve"
1266                 filename="gsk/gskcomponenttransfer.c"
1267                 line="296">a component transfer</doc>
1268            <type name="ComponentTransfer" c:type="GskComponentTransfer*"/>
1269          </instance-parameter>
1270        </parameters>
1271      </method>
1272      <function name="equal"
1273                c:identifier="gsk_component_transfer_equal"
1274                version="4.20">
1275        <doc xml:space="preserve"
1276             filename="gsk/gskcomponenttransfer.c"
1277             line="313">Compares two component transfers for equality.</doc>
1278        <source-position filename="gsk/gskcomponenttransfer.h" line="57"/>
1279        <return-value transfer-ownership="none">
1280          <doc xml:space="preserve"
1281               filename="gsk/gskcomponenttransfer.c"
1282               line="320">true if @self and @other are equal</doc>
1283          <type name="gboolean" c:type="gboolean"/>
1284        </return-value>
1285        <parameters>
1286          <parameter name="self" transfer-ownership="none">
1287            <doc xml:space="preserve"
1288                 filename="gsk/gskcomponenttransfer.c"
1289                 line="315">a component transfer</doc>
1290            <type name="gpointer" c:type="gconstpointer"/>
1291          </parameter>
1292          <parameter name="other" transfer-ownership="none">
1293            <doc xml:space="preserve"
1294                 filename="gsk/gskcomponenttransfer.c"
1295                 line="316">another component transfer</doc>
1296            <type name="gpointer" c:type="gconstpointer"/>
1297          </parameter>
1298        </parameters>
1299      </function>
1300    </record>
1301    <class name="ComponentTransferNode"
1302           c:symbol-prefix="component_transfer_node"
1303           c:type="GskComponentTransferNode"
1304           version="4.20"
1305           parent="RenderNode"
1306           glib:type-name="GskComponentTransferNode"
1307           glib:get-type="gsk_component_transfer_node_get_type"
1308           glib:fundamental="1">
1309      <constructor name="new"
1310                   c:identifier="gsk_component_transfer_node_new"
1311                   version="4.20">
1312        <doc xml:space="preserve"
1313             filename="gsk/gskrendernodeimpl.c"
1314             line="8739">Creates a render node that will apply component
1315transfers to a child node.</doc>
1316        <source-position filename="gsk/gskrendernode.h" line="624"/>
1317        <return-value transfer-ownership="full">
1318          <doc xml:space="preserve"
1319               filename="gsk/gskrendernodeimpl.c"
1320               line="8750">A new `GskRenderNode`</doc>
1321          <type name="ComponentTransferNode" c:type="GskRenderNode*"/>
1322        </return-value>
1323        <parameters>
1324          <parameter name="child" transfer-ownership="none">
1325            <doc xml:space="preserve"
1326                 filename="gsk/gskrendernodeimpl.c"
1327                 line="8741">The child to apply component transfers to</doc>
1328            <type name="RenderNode" c:type="GskRenderNode*"/>
1329          </parameter>
1330          <parameter name="r" transfer-ownership="none">
1331            <doc xml:space="preserve"
1332                 filename="gsk/gskrendernodeimpl.c"
1333                 line="8742">transfer for the red component</doc>
1334            <type name="ComponentTransfer"
1335                  c:type="const GskComponentTransfer*"/>
1336          </parameter>
1337          <parameter name="g" transfer-ownership="none">
1338            <doc xml:space="preserve"
1339                 filename="gsk/gskrendernodeimpl.c"
1340                 line="8743">transfer for the green component</doc>
1341            <type name="ComponentTransfer"
1342                  c:type="const GskComponentTransfer*"/>
1343          </parameter>
1344          <parameter name="b" transfer-ownership="none">
1345            <doc xml:space="preserve"
1346                 filename="gsk/gskrendernodeimpl.c"
1347                 line="8744">transfer for the blue component</doc>
1348            <type name="ComponentTransfer"
1349                  c:type="const GskComponentTransfer*"/>
1350          </parameter>
1351          <parameter name="a" transfer-ownership="none">
1352            <doc xml:space="preserve"
1353                 filename="gsk/gskrendernodeimpl.c"
1354                 line="8745">transfer for the alpha component</doc>
1355            <type name="ComponentTransfer"
1356                  c:type="const GskComponentTransfer*"/>
1357          </parameter>
1358        </parameters>
1359      </constructor>
1360      <method name="get_child"
1361              c:identifier="gsk_component_transfer_node_get_child"
1362              version="4.20">
1363        <doc xml:space="preserve"
1364             filename="gsk/gskrendernodeimpl.c"
1365             line="8785">Gets the child node that is getting drawn by the given @node.</doc>
1366        <source-position filename="gsk/gskrendernode.h" line="630"/>
1367        <return-value transfer-ownership="none">
1368          <doc xml:space="preserve"
1369               filename="gsk/gskrendernodeimpl.c"
1370               line="8791">the child `GskRenderNode`</doc>
1371          <type name="RenderNode" c:type="GskRenderNode*"/>
1372        </return-value>
1373        <parameters>
1374          <instance-parameter name="node" transfer-ownership="none">
1375            <doc xml:space="preserve"
1376                 filename="gsk/gskrendernodeimpl.c"
1377                 line="8787">a debug `GskRenderNode`</doc>
1378            <type name="ComponentTransferNode" c:type="const GskRenderNode*"/>
1379          </instance-parameter>
1380        </parameters>
1381      </method>
1382      <method name="get_transfer"
1383              c:identifier="gsk_component_transfer_node_get_transfer"
1384              version="4.20">
1385        <doc xml:space="preserve"
1386             filename="gsk/gskrendernodeimpl.c"
1387             line="8803">Gets the component transfer for one of the components.</doc>
1388        <source-position filename="gsk/gskrendernode.h" line="633"/>
1389        <return-value transfer-ownership="none">
1390          <doc xml:space="preserve"
1391               filename="gsk/gskrendernodeimpl.c"
1392               line="8811">the `GskComponentTransfer`</doc>
1393          <type name="ComponentTransfer" c:type="const GskComponentTransfer*"/>
1394        </return-value>
1395        <parameters>
1396          <instance-parameter name="node" transfer-ownership="none">
1397            <doc xml:space="preserve"
1398                 filename="gsk/gskrendernodeimpl.c"
1399                 line="8805">a debug `GskRenderNode`</doc>
1400            <type name="ComponentTransferNode" c:type="const GskRenderNode*"/>
1401          </instance-parameter>
1402          <parameter name="component" transfer-ownership="none">
1403            <doc xml:space="preserve"
1404                 filename="gsk/gskrendernodeimpl.c"
1405                 line="8806">a value between 0 and 3 to indicate the red, green, blue
1406  or alpha component</doc>
1407            <type name="guint" c:type="guint"/>
1408          </parameter>
1409        </parameters>
1410      </method>
1411    </class>
1412    <class name="ConicGradientNode"
1413           c:symbol-prefix="conic_gradient_node"
1414           c:type="GskConicGradientNode"
1415           parent="RenderNode"
1416           glib:type-name="GskConicGradientNode"
1417           glib:get-type="gsk_conic_gradient_node_get_type"
1418           glib:fundamental="1">
1419      <doc xml:space="preserve"
1420           filename="gsk/gskrendernodeimpl.c"
1421           line="1662">A render node for a conic gradient.</doc>
1422      <constructor name="new" c:identifier="gsk_conic_gradient_node_new">
1423        <doc xml:space="preserve"
1424             filename="gsk/gskrendernodeimpl.c"
1425             line="1961">Creates a `GskRenderNode` that draws a conic gradient.
1426
1427The conic gradient
1428starts around @center in the direction of @rotation. A rotation of 0 means
1429that the gradient points up. Color stops are then added clockwise.</doc>
1430        <source-position filename="gsk/gskrendernode.h" line="280"/>
1431        <return-value transfer-ownership="full">
1432          <doc xml:space="preserve"
1433               filename="gsk/gskrendernodeimpl.c"
1434               line="1978">A new `GskRenderNode`</doc>
1435          <type name="ConicGradientNode" c:type="GskRenderNode*"/>
1436        </return-value>
1437        <parameters>
1438          <parameter name="bounds" transfer-ownership="none">
1439            <doc xml:space="preserve"
1440                 filename="gsk/gskrendernodeimpl.c"
1441                 line="1963">the bounds of the node</doc>
1442            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
1443          </parameter>
1444          <parameter name="center" transfer-ownership="none">
1445            <doc xml:space="preserve"
1446                 filename="gsk/gskrendernodeimpl.c"
1447                 line="1964">the center of the gradient</doc>
1448            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
1449          </parameter>
1450          <parameter name="rotation" transfer-ownership="none">
1451            <doc xml:space="preserve"
1452                 filename="gsk/gskrendernodeimpl.c"
1453                 line="1965">the rotation of the gradient in degrees</doc>
1454            <type name="gfloat" c:type="float"/>
1455          </parameter>
1456          <parameter name="color_stops" transfer-ownership="none">
1457            <doc xml:space="preserve"
1458                 filename="gsk/gskrendernodeimpl.c"
1459                 line="1966">a pointer to an array of
1460  `GskColorStop` defining the gradient. The offsets of all color stops
1461  must be increasing. The first stop's offset must be &gt;= 0 and the last
1462  stop's offset must be &lt;= 1.</doc>
1463            <array length="4" zero-terminated="0" c:type="const GskColorStop*">
1464              <type name="ColorStop" c:type="GskColorStop"/>
1465            </array>
1466          </parameter>
1467          <parameter name="n_color_stops" transfer-ownership="none">
1468            <doc xml:space="preserve"
1469                 filename="gsk/gskrendernodeimpl.c"
1470                 line="1970">the number of elements in @color_stops</doc>
1471            <type name="gsize" c:type="gsize"/>
1472          </parameter>
1473        </parameters>
1474      </constructor>
1475      <method name="get_angle"
1476              c:identifier="gsk_conic_gradient_node_get_angle"
1477              version="4.2">
1478        <doc xml:space="preserve"
1479             filename="gsk/gskrendernodeimpl.c"
1480             line="2154">Retrieves the angle for the gradient in radians, normalized in [0, 2 * PI].
1481
1482The angle is starting at the top and going clockwise, as expressed
1483in the css specification:
1484
1485    angle = 90 - gsk_conic_gradient_node_get_rotation()</doc>
1486        <source-position filename="gsk/gskrendernode.h" line="290"/>
1487        <return-value transfer-ownership="none">
1488          <doc xml:space="preserve"
1489               filename="gsk/gskrendernodeimpl.c"
1490               line="2165">the angle for the gradient</doc>
1491          <type name="gfloat" c:type="float"/>
1492        </return-value>
1493        <parameters>
1494          <instance-parameter name="node" transfer-ownership="none">
1495            <doc xml:space="preserve"
1496                 filename="gsk/gskrendernodeimpl.c"
1497                 line="2156">a `GskRenderNode` for a conic gradient</doc>
1498            <type name="ConicGradientNode" c:type="const GskRenderNode*"/>
1499          </instance-parameter>
1500        </parameters>
1501      </method>
1502      <method name="get_center"
1503              c:identifier="gsk_conic_gradient_node_get_center">
1504        <doc xml:space="preserve"
1505             filename="gsk/gskrendernodeimpl.c"
1506             line="2122">Retrieves the center pointer for the gradient.</doc>
1507        <source-position filename="gsk/gskrendernode.h" line="286"/>
1508        <return-value transfer-ownership="none">
1509          <doc xml:space="preserve"
1510               filename="gsk/gskrendernodeimpl.c"
1511               line="2128">the center point for the gradient</doc>
1512          <type name="Graphene.Point" c:type="const graphene_point_t*"/>
1513        </return-value>
1514        <parameters>
1515          <instance-parameter name="node" transfer-ownership="none">
1516            <doc xml:space="preserve"
1517                 filename="gsk/gskrendernodeimpl.c"
1518                 line="2124">a `GskRenderNode` for a conic gradient</doc>
1519            <type name="ConicGradientNode" c:type="const GskRenderNode*"/>
1520          </instance-parameter>
1521        </parameters>
1522      </method>
1523      <method name="get_color_stops"
1524              c:identifier="gsk_conic_gradient_node_get_color_stops">
1525        <doc xml:space="preserve"
1526             filename="gsk/gskrendernodeimpl.c"
1527             line="2104">Retrieves the color stops in the gradient.</doc>
1528        <source-position filename="gsk/gskrendernode.h" line="294"/>
1529        <return-value transfer-ownership="none">
1530          <doc xml:space="preserve"
1531               filename="gsk/gskrendernodeimpl.c"
1532               line="2111">the color stops in the gradient</doc>
1533          <array length="0" zero-terminated="0" c:type="const GskColorStop*">
1534            <type name="ColorStop" c:type="GskColorStop"/>
1535          </array>
1536        </return-value>
1537        <parameters>
1538          <instance-parameter name="node" transfer-ownership="none">
1539            <doc xml:space="preserve"
1540                 filename="gsk/gskrendernodeimpl.c"
1541                 line="2106">a `GskRenderNode` for a conic gradient</doc>
1542            <type name="ConicGradientNode" c:type="const GskRenderNode*"/>
1543          </instance-parameter>
1544          <parameter name="n_stops"
1545                     direction="out"
1546                     caller-allocates="0"
1547                     transfer-ownership="full"
1548                     optional="1"
1549                     allow-none="1">
1550            <doc xml:space="preserve"
1551                 filename="gsk/gskrendernodeimpl.c"
1552                 line="2107">the number of color stops in the returned array</doc>
1553            <type name="gsize" c:type="gsize*"/>
1554          </parameter>
1555        </parameters>
1556      </method>
1557      <method name="get_n_color_stops"
1558              c:identifier="gsk_conic_gradient_node_get_n_color_stops">
1559        <doc xml:space="preserve"
1560             filename="gsk/gskrendernodeimpl.c"
1561             line="2088">Retrieves the number of color stops in the gradient.</doc>
1562        <source-position filename="gsk/gskrendernode.h" line="292"/>
1563        <return-value transfer-ownership="none">
1564          <doc xml:space="preserve"
1565               filename="gsk/gskrendernodeimpl.c"
1566               line="2094">the number of color stops</doc>
1567          <type name="gsize" c:type="gsize"/>
1568        </return-value>
1569        <parameters>
1570          <instance-parameter name="node" transfer-ownership="none">
1571            <doc xml:space="preserve"
1572                 filename="gsk/gskrendernodeimpl.c"
1573                 line="2090">a `GskRenderNode` for a conic gradient</doc>
1574            <type name="ConicGradientNode" c:type="const GskRenderNode*"/>
1575          </instance-parameter>
1576        </parameters>
1577      </method>
1578      <method name="get_rotation"
1579              c:identifier="gsk_conic_gradient_node_get_rotation">
1580        <doc xml:space="preserve"
1581             filename="gsk/gskrendernodeimpl.c"
1582             line="2138">Retrieves the rotation for the gradient in degrees.</doc>
1583        <source-position filename="gsk/gskrendernode.h" line="288"/>
1584        <return-value transfer-ownership="none">
1585          <doc xml:space="preserve"
1586               filename="gsk/gskrendernodeimpl.c"
1587               line="2144">the rotation for the gradient</doc>
1588          <type name="gfloat" c:type="float"/>
1589        </return-value>
1590        <parameters>
1591          <instance-parameter name="node" transfer-ownership="none">
1592            <doc xml:space="preserve"
1593                 filename="gsk/gskrendernodeimpl.c"
1594                 line="2140">a `GskRenderNode` for a conic gradient</doc>
1595            <type name="ConicGradientNode" c:type="const GskRenderNode*"/>
1596          </instance-parameter>
1597        </parameters>
1598      </method>
1599    </class>
1600    <class name="ContainerNode"
1601           c:symbol-prefix="container_node"
1602           c:type="GskContainerNode"
1603           parent="RenderNode"
1604           glib:type-name="GskContainerNode"
1605           glib:get-type="gsk_container_node_get_type"
1606           glib:fundamental="1">
1607      <doc xml:space="preserve"
1608           filename="gsk/gskrendernodeimpl.c"
1609           line="4287">A render node that can contain other render nodes.</doc>
1610      <constructor name="new" c:identifier="gsk_container_node_new">
1611        <doc xml:space="preserve"
1612             filename="gsk/gskrendernodeimpl.c"
1613             line="4454">Creates a new `GskRenderNode` instance for holding the given @children.
1614
1615The new node will acquire a reference to each of the children.</doc>
1616        <source-position filename="gsk/gskrendernode.h" line="405"/>
1617        <return-value transfer-ownership="full">
1618          <doc xml:space="preserve"
1619               filename="gsk/gskrendernodeimpl.c"
1620               line="4463">the new `GskRenderNode`</doc>
1621          <type name="ContainerNode" c:type="GskRenderNode*"/>
1622        </return-value>
1623        <parameters>
1624          <parameter name="children" transfer-ownership="none">
1625            <doc xml:space="preserve"
1626                 filename="gsk/gskrendernodeimpl.c"
1627                 line="4456">The children of the node</doc>
1628            <array length="1" zero-terminated="0" c:type="GskRenderNode**">
1629              <type name="RenderNode" c:type="GskRenderNode*"/>
1630            </array>
1631          </parameter>
1632          <parameter name="n_children" transfer-ownership="none">
1633            <doc xml:space="preserve"
1634                 filename="gsk/gskrendernodeimpl.c"
1635                 line="4457">Number of children in the @children array</doc>
1636            <type name="guint" c:type="guint"/>
1637          </parameter>
1638        </parameters>
1639      </constructor>
1640      <method name="get_child" c:identifier="gsk_container_node_get_child">
1641        <doc xml:space="preserve"
1642             filename="gsk/gskrendernodeimpl.c"
1643             line="4540">Gets one of the children of @container.</doc>
1644        <source-position filename="gsk/gskrendernode.h" line="410"/>
1645        <return-value transfer-ownership="none">
1646          <doc xml:space="preserve"
1647               filename="gsk/gskrendernodeimpl.c"
1648               line="4547">the @idx'th child of @container</doc>
1649          <type name="RenderNode" c:type="GskRenderNode*"/>
1650        </return-value>
1651        <parameters>
1652          <instance-parameter name="node" transfer-ownership="none">
1653            <doc xml:space="preserve"
1654                 filename="gsk/gskrendernodeimpl.c"
1655                 line="4542">a container `GskRenderNode`</doc>
1656            <type name="ContainerNode" c:type="const GskRenderNode*"/>
1657          </instance-parameter>
1658          <parameter name="idx" transfer-ownership="none">
1659            <doc xml:space="preserve"
1660                 filename="gsk/gskrendernodeimpl.c"
1661                 line="4543">the position of the child to get</doc>
1662            <type name="guint" c:type="guint"/>
1663          </parameter>
1664        </parameters>
1665      </method>
1666      <method name="get_n_children"
1667              c:identifier="gsk_container_node_get_n_children">
1668        <doc xml:space="preserve"
1669             filename="gsk/gskrendernodeimpl.c"
1670             line="4524">Retrieves the number of direct children of @node.</doc>
1671        <source-position filename="gsk/gskrendernode.h" line="408"/>
1672        <return-value transfer-ownership="none">
1673          <doc xml:space="preserve"
1674               filename="gsk/gskrendernodeimpl.c"
1675               line="4530">the number of children of the `GskRenderNode`</doc>
1676          <type name="guint" c:type="guint"/>
1677        </return-value>
1678        <parameters>
1679          <instance-parameter name="node" transfer-ownership="none">
1680            <doc xml:space="preserve"
1681                 filename="gsk/gskrendernodeimpl.c"
1682                 line="4526">a container `GskRenderNode`</doc>
1683            <type name="ContainerNode" c:type="const GskRenderNode*"/>
1684          </instance-parameter>
1685        </parameters>
1686      </method>
1687    </class>
1688    <enumeration name="Corner"
1689                 glib:type-name="GskCorner"
1690                 glib:get-type="gsk_corner_get_type"
1691                 c:type="GskCorner">
1692      <doc xml:space="preserve"
1693           filename="gsk/gskenums.h"
1694           line="208">The corner indices used by `GskRoundedRect`.</doc>
1695      <member name="top_left"
1696              value="0"
1697              c:identifier="GSK_CORNER_TOP_LEFT"
1698              glib:nick="top-left"
1699              glib:name="GSK_CORNER_TOP_LEFT">
1700        <doc xml:space="preserve"
1701             filename="gsk/gskenums.h"
1702             line="210">The top left corner</doc>
1703      </member>
1704      <member name="top_right"
1705              value="1"
1706              c:identifier="GSK_CORNER_TOP_RIGHT"
1707              glib:nick="top-right"
1708              glib:name="GSK_CORNER_TOP_RIGHT">
1709        <doc xml:space="preserve"
1710             filename="gsk/gskenums.h"
1711             line="211">The top right corner</doc>
1712      </member>
1713      <member name="bottom_right"
1714              value="2"
1715              c:identifier="GSK_CORNER_BOTTOM_RIGHT"
1716              glib:nick="bottom-right"
1717              glib:name="GSK_CORNER_BOTTOM_RIGHT">
1718        <doc xml:space="preserve"
1719             filename="gsk/gskenums.h"
1720             line="212">The bottom right corner</doc>
1721      </member>
1722      <member name="bottom_left"
1723              value="3"
1724              c:identifier="GSK_CORNER_BOTTOM_LEFT"
1725              glib:nick="bottom-left"
1726              glib:name="GSK_CORNER_BOTTOM_LEFT">
1727        <doc xml:space="preserve"
1728             filename="gsk/gskenums.h"
1729             line="213">The bottom left corner</doc>
1730      </member>
1731    </enumeration>
1732    <class name="CrossFadeNode"
1733           c:symbol-prefix="cross_fade_node"
1734           c:type="GskCrossFadeNode"
1735           parent="RenderNode"
1736           glib:type-name="GskCrossFadeNode"
1737           glib:get-type="gsk_cross_fade_node_get_type"
1738           glib:fundamental="1">
1739      <doc xml:space="preserve"
1740           filename="gsk/gskrendernodeimpl.c"
1741           line="6884">A render node cross fading between two child nodes.</doc>
1742      <constructor name="new" c:identifier="gsk_cross_fade_node_new">
1743        <doc xml:space="preserve"
1744             filename="gsk/gskrendernodeimpl.c"
1745             line="6980">Creates a `GskRenderNode` that will do a cross-fade between @start and @end.</doc>
1746        <source-position filename="gsk/gskrendernode.h" line="534"/>
1747        <return-value transfer-ownership="full">
1748          <doc xml:space="preserve"
1749               filename="gsk/gskrendernodeimpl.c"
1750               line="6989">A new `GskRenderNode`</doc>
1751          <type name="CrossFadeNode" c:type="GskRenderNode*"/>
1752        </return-value>
1753        <parameters>
1754          <parameter name="start" transfer-ownership="none">
1755            <doc xml:space="preserve"
1756                 filename="gsk/gskrendernodeimpl.c"
1757                 line="6982">The start node to be drawn</doc>
1758            <type name="RenderNode" c:type="GskRenderNode*"/>
1759          </parameter>
1760          <parameter name="end" transfer-ownership="none">
1761            <doc xml:space="preserve"
1762                 filename="gsk/gskrendernodeimpl.c"
1763                 line="6983">The node to be cross_fadeed onto the @start node</doc>
1764            <type name="RenderNode" c:type="GskRenderNode*"/>
1765          </parameter>
1766          <parameter name="progress" transfer-ownership="none">
1767            <doc xml:space="preserve"
1768                 filename="gsk/gskrendernodeimpl.c"
1769                 line="6984">How far the fade has progressed from start to end. The value will
1770    be clamped to the range [0 ... 1]</doc>
1771            <type name="gfloat" c:type="float"/>
1772          </parameter>
1773        </parameters>
1774      </constructor>
1775      <method name="get_end_child"
1776              c:identifier="gsk_cross_fade_node_get_end_child">
1777        <doc xml:space="preserve"
1778             filename="gsk/gskrendernodeimpl.c"
1779             line="7037">Retrieves the child `GskRenderNode` at the end of the cross-fade.</doc>
1780        <source-position filename="gsk/gskrendernode.h" line="540"/>
1781        <return-value transfer-ownership="none">
1782          <doc xml:space="preserve"
1783               filename="gsk/gskrendernodeimpl.c"
1784               line="7043">a `GskRenderNode`</doc>
1785          <type name="RenderNode" c:type="GskRenderNode*"/>
1786        </return-value>
1787        <parameters>
1788          <instance-parameter name="node" transfer-ownership="none">
1789            <doc xml:space="preserve"
1790                 filename="gsk/gskrendernodeimpl.c"
1791                 line="7039">a cross-fading `GskRenderNode`</doc>
1792            <type name="CrossFadeNode" c:type="const GskRenderNode*"/>
1793          </instance-parameter>
1794        </parameters>
1795      </method>
1796      <method name="get_progress"
1797              c:identifier="gsk_cross_fade_node_get_progress">
1798        <doc xml:space="preserve"
1799             filename="gsk/gskrendernodeimpl.c"
1800             line="7053">Retrieves the progress value of the cross fade.</doc>
1801        <source-position filename="gsk/gskrendernode.h" line="542"/>
1802        <return-value transfer-ownership="none">
1803          <doc xml:space="preserve"
1804               filename="gsk/gskrendernodeimpl.c"
1805               line="7059">the progress value, between 0 and 1</doc>
1806          <type name="gfloat" c:type="float"/>
1807        </return-value>
1808        <parameters>
1809          <instance-parameter name="node" transfer-ownership="none">
1810            <doc xml:space="preserve"
1811                 filename="gsk/gskrendernodeimpl.c"
1812                 line="7055">a cross-fading `GskRenderNode`</doc>
1813            <type name="CrossFadeNode" c:type="const GskRenderNode*"/>
1814          </instance-parameter>
1815        </parameters>
1816      </method>
1817      <method name="get_start_child"
1818              c:identifier="gsk_cross_fade_node_get_start_child">
1819        <doc xml:space="preserve"
1820             filename="gsk/gskrendernodeimpl.c"
1821             line="7021">Retrieves the child `GskRenderNode` at the beginning of the cross-fade.</doc>
1822        <source-position filename="gsk/gskrendernode.h" line="538"/>
1823        <return-value transfer-ownership="none">
1824          <doc xml:space="preserve"
1825               filename="gsk/gskrendernodeimpl.c"
1826               line="7027">a `GskRenderNode`</doc>
1827          <type name="RenderNode" c:type="GskRenderNode*"/>
1828        </return-value>
1829        <parameters>
1830          <instance-parameter name="node" transfer-ownership="none">
1831            <doc xml:space="preserve"
1832                 filename="gsk/gskrendernodeimpl.c"
1833                 line="7023">a cross-fading `GskRenderNode`</doc>
1834            <type name="CrossFadeNode" c:type="const GskRenderNode*"/>
1835          </instance-parameter>
1836        </parameters>
1837      </method>
1838    </class>
1839    <class name="DebugNode"
1840           c:symbol-prefix="debug_node"
1841           c:type="GskDebugNode"
1842           parent="RenderNode"
1843           glib:type-name="GskDebugNode"
1844           glib:get-type="gsk_debug_node_get_type"
1845           glib:fundamental="1">
1846      <doc xml:space="preserve"
1847           filename="gsk/gskrendernodeimpl.c"
1848           line="8031">A render node that emits a debugging message when drawing its
1849child node.</doc>
1850      <constructor name="new" c:identifier="gsk_debug_node_new">
1851        <doc xml:space="preserve"
1852             filename="gsk/gskrendernodeimpl.c"
1853             line="8112">Creates a `GskRenderNode` that will add debug information about
1854the given @child.
1855
1856Adding this node has no visual effect.</doc>
1857        <source-position filename="gsk/gskrendernode.h" line="216"/>
1858        <return-value transfer-ownership="full">
1859          <doc xml:space="preserve"
1860               filename="gsk/gskrendernodeimpl.c"
1861               line="8122">A new `GskRenderNode`</doc>
1862          <type name="DebugNode" c:type="GskRenderNode*"/>
1863        </return-value>
1864        <parameters>
1865          <parameter name="child" transfer-ownership="none">
1866            <doc xml:space="preserve"
1867                 filename="gsk/gskrendernodeimpl.c"
1868                 line="8114">The child to add debug info for</doc>
1869            <type name="RenderNode" c:type="GskRenderNode*"/>
1870          </parameter>
1871          <parameter name="message" transfer-ownership="full">
1872            <doc xml:space="preserve"
1873                 filename="gsk/gskrendernodeimpl.c"
1874                 line="8115">The debug message</doc>
1875            <type name="utf8" c:type="char*"/>
1876          </parameter>
1877        </parameters>
1878      </constructor>
1879      <method name="get_child" c:identifier="gsk_debug_node_get_child">
1880        <doc xml:space="preserve"
1881             filename="gsk/gskrendernodeimpl.c"
1882             line="8148">Gets the child node that is getting drawn by the given @node.</doc>
1883        <source-position filename="gsk/gskrendernode.h" line="219"/>
1884        <return-value transfer-ownership="none">
1885          <doc xml:space="preserve"
1886               filename="gsk/gskrendernodeimpl.c"
1887               line="8154">the child `GskRenderNode`</doc>
1888          <type name="RenderNode" c:type="GskRenderNode*"/>
1889        </return-value>
1890        <parameters>
1891          <instance-parameter name="node" transfer-ownership="none">
1892            <doc xml:space="preserve"
1893                 filename="gsk/gskrendernodeimpl.c"
1894                 line="8150">a debug `GskRenderNode`</doc>
1895            <type name="DebugNode" c:type="const GskRenderNode*"/>
1896          </instance-parameter>
1897        </parameters>
1898      </method>
1899      <method name="get_message" c:identifier="gsk_debug_node_get_message">
1900        <doc xml:space="preserve"
1901             filename="gsk/gskrendernodeimpl.c"
1902             line="8164">Gets the debug message that was set on this node</doc>
1903        <source-position filename="gsk/gskrendernode.h" line="221"/>
1904        <return-value transfer-ownership="none">
1905          <doc xml:space="preserve"
1906               filename="gsk/gskrendernodeimpl.c"
1907               line="8170">The debug message</doc>
1908          <type name="utf8" c:type="const char*"/>
1909        </return-value>
1910        <parameters>
1911          <instance-parameter name="node" transfer-ownership="none">
1912            <doc xml:space="preserve"
1913                 filename="gsk/gskrendernodeimpl.c"
1914                 line="8166">a debug `GskRenderNode`</doc>
1915            <type name="DebugNode" c:type="const GskRenderNode*"/>
1916          </instance-parameter>
1917        </parameters>
1918      </method>
1919    </class>
1920    <class name="FillNode"
1921           c:symbol-prefix="fill_node"
1922           c:type="GskFillNode"
1923           version="4.14"
1924           parent="RenderNode"
1925           glib:type-name="GskFillNode"
1926           glib:get-type="gsk_fill_node_get_type"
1927           glib:fundamental="1">
1928      <doc xml:space="preserve"
1929           filename="gsk/gskrendernodeimpl.c"
1930           line="5897">A render node filling the area given by [struct@Gsk.Path]
1931and [enum@Gsk.FillRule] with the child node.</doc>
1932      <constructor name="new" c:identifier="gsk_fill_node_new" version="4.14">
1933        <doc xml:space="preserve"
1934             filename="gsk/gskrendernodeimpl.c"
1935             line="5999">Creates a `GskRenderNode` that will fill the @child in the area
1936given by @path and @fill_rule.</doc>
1937        <source-position filename="gsk/gskrendernode.h" line="481"/>
1938        <return-value transfer-ownership="none">
1939          <doc xml:space="preserve"
1940               filename="gsk/gskrendernodeimpl.c"
1941               line="6008">A new `GskRenderNode`</doc>
1942          <type name="FillNode" c:type="GskRenderNode*"/>
1943        </return-value>
1944        <parameters>
1945          <parameter name="child" transfer-ownership="none">
1946            <doc xml:space="preserve"
1947                 filename="gsk/gskrendernodeimpl.c"
1948                 line="6001">The node to fill the area with</doc>
1949            <type name="RenderNode" c:type="GskRenderNode*"/>
1950          </parameter>
1951          <parameter name="path" transfer-ownership="none">
1952            <doc xml:space="preserve"
1953                 filename="gsk/gskrendernodeimpl.c"
1954                 line="6002">The path describing the area to fill</doc>
1955            <type name="Path" c:type="GskPath*"/>
1956          </parameter>
1957          <parameter name="fill_rule" transfer-ownership="none">
1958            <doc xml:space="preserve"
1959                 filename="gsk/gskrendernodeimpl.c"
1960                 line="6003">The fill rule to use</doc>
1961            <type name="FillRule" c:type="GskFillRule"/>
1962          </parameter>
1963        </parameters>
1964      </constructor>
1965      <method name="get_child"
1966              c:identifier="gsk_fill_node_get_child"
1967              version="4.14">
1968        <doc xml:space="preserve"
1969             filename="gsk/gskrendernodeimpl.c"
1970             line="6041">Gets the child node that is getting drawn by the given @node.</doc>
1971        <source-position filename="gsk/gskrendernode.h" line="485"/>
1972        <return-value transfer-ownership="none">
1973          <doc xml:space="preserve"
1974               filename="gsk/gskrendernodeimpl.c"
1975               line="6047">The child that is getting drawn</doc>
1976          <type name="RenderNode" c:type="GskRenderNode*"/>
1977        </return-value>
1978        <parameters>
1979          <instance-parameter name="node" transfer-ownership="none">
1980            <doc xml:space="preserve"
1981                 filename="gsk/gskrendernodeimpl.c"
1982                 line="6043">a fill `GskRenderNode`</doc>
1983            <type name="FillNode" c:type="const GskRenderNode*"/>
1984          </instance-parameter>
1985        </parameters>
1986      </method>
1987      <method name="get_fill_rule"
1988              c:identifier="gsk_fill_node_get_fill_rule"
1989              version="4.14">
1990        <doc xml:space="preserve"
1991             filename="gsk/gskrendernodeimpl.c"
1992             line="6082">Retrieves the fill rule used to determine how the path is filled.</doc>
1993        <source-position filename="gsk/gskrendernode.h" line="489"/>
1994        <return-value transfer-ownership="none">
1995          <doc xml:space="preserve"
1996               filename="gsk/gskrendernodeimpl.c"
1997               line="6088">a `GskFillRule`</doc>
1998          <type name="FillRule" c:type="GskFillRule"/>
1999        </return-value>
2000        <parameters>
2001          <instance-parameter name="node" transfer-ownership="none">
2002            <doc xml:space="preserve"
2003                 filename="gsk/gskrendernodeimpl.c"
2004                 line="6084">a fill `GskRenderNode`</doc>
2005            <type name="FillNode" c:type="const GskRenderNode*"/>
2006          </instance-parameter>
2007        </parameters>
2008      </method>
2009      <method name="get_path"
2010              c:identifier="gsk_fill_node_get_path"
2011              version="4.14">
2012        <doc xml:space="preserve"
2013             filename="gsk/gskrendernodeimpl.c"
2014             line="6061">Retrieves the path used to describe the area filled with the contents of
2015the @node.</doc>
2016        <source-position filename="gsk/gskrendernode.h" line="487"/>
2017        <return-value transfer-ownership="none">
2018          <doc xml:space="preserve"
2019               filename="gsk/gskrendernodeimpl.c"
2020               line="6068">a `GskPath`</doc>
2021          <type name="Path" c:type="GskPath*"/>
2022        </return-value>
2023        <parameters>
2024          <instance-parameter name="node" transfer-ownership="none">
2025            <doc xml:space="preserve"
2026                 filename="gsk/gskrendernodeimpl.c"
2027                 line="6063">a fill `GskRenderNode`</doc>
2028            <type name="FillNode" c:type="const GskRenderNode*"/>
2029          </instance-parameter>
2030        </parameters>
2031      </method>
2032    </class>
2033    <enumeration name="FillRule"
2034                 version="4.14"
2035                 glib:type-name="GskFillRule"
2036                 glib:get-type="gsk_fill_rule_get_type"
2037                 c:type="GskFillRule">
2038      <doc xml:space="preserve"
2039           filename="gsk/gskenums.h"
2040           line="224">Specifies how paths are filled.
2041
2042Whether or not a point is included in the fill is determined by taking
2043a ray from that point to infinity and looking at intersections with the
2044path. The ray can be in any direction, as long as it doesn't pass through
2045the end point of a segment or have a tricky intersection such as
2046intersecting tangent to the path.
2047
2048(Note that filling is not actually implemented in this way. This
2049is just a description of the rule that is applied.)
2050
2051New entries may be added in future versions.</doc>
2052      <member name="winding"
2053              value="0"
2054              c:identifier="GSK_FILL_RULE_WINDING"
2055              glib:nick="winding"
2056              glib:name="GSK_FILL_RULE_WINDING">
2057        <doc xml:space="preserve"
2058             filename="gsk/gskenums.h"
2059             line="226">If the path crosses the ray from
2060  left-to-right, counts +1. If the path crosses the ray
2061  from right to left, counts -1. (Left and right are determined
2062  from the perspective of looking along the ray from the starting
2063  point.) If the total count is non-zero, the point will be filled.</doc>
2064      </member>
2065      <member name="even_odd"
2066              value="1"
2067              c:identifier="GSK_FILL_RULE_EVEN_ODD"
2068              glib:nick="even-odd"
2069              glib:name="GSK_FILL_RULE_EVEN_ODD">
2070        <doc xml:space="preserve"
2071             filename="gsk/gskenums.h"
2072             line="231">Counts the total number of
2073  intersections, without regard to the orientation of the contour. If
2074  the total number of intersections is odd, the point will be
2075  filled.</doc>
2076      </member>
2077    </enumeration>
2078    <class name="GLRenderer"
2079           c:symbol-prefix="gl_renderer"
2080           c:type="GskGLRenderer"
2081           version="4.2"
2082           parent="Renderer"
2083           glib:type-name="GskGLRenderer"
2084           glib:get-type="gsk_gl_renderer_get_type"
2085           glib:type-struct="GLRendererClass">
2086      <doc xml:space="preserve"
2087           filename="gsk/gpu/gskglrenderer.c"
2088           line="17">Renders a GSK rendernode tree with OpenGL.
2089
2090See [class@Gsk.Renderer].</doc>
2091      <source-position filename="gsk/gpu/gskglrenderer.h" line="34"/>
2092      <constructor name="new" c:identifier="gsk_gl_renderer_new">
2093        <doc xml:space="preserve"
2094             filename="gsk/gpu/gskglrenderer.c"
2095             line="155">Creates an instance of the GL renderer.</doc>
2096        <source-position filename="gsk/gpu/gskglrenderer.h" line="37"/>
2097        <return-value transfer-ownership="full">
2098          <doc xml:space="preserve"
2099               filename="gsk/gpu/gskglrenderer.c"
2100               line="160">a GL renderer</doc>
2101          <type name="Renderer" c:type="GskRenderer*"/>
2102        </return-value>
2103      </constructor>
2104    </class>
2105    <record name="GLRendererClass"
2106            c:type="GskGLRendererClass"
2107            disguised="1"
2108            opaque="1"
2109            glib:is-gtype-struct-for="GLRenderer">
2110      <source-position filename="gsk/gpu/gskglrenderer.h" line="34"/>
2111    </record>
2112    <class name="GLShader"
2113           c:symbol-prefix="gl_shader"
2114           c:type="GskGLShader"
2115           deprecated="1"
2116           deprecated-version="4.16"
2117           parent="GObject.Object"
2118           glib:type-name="GskGLShader"
2119           glib:get-type="gsk_gl_shader_get_type"
2120           glib:type-struct="GLShaderClass">
2121      <doc xml:space="preserve"
2122           filename="gsk/gskglshader.c"
2123           line="19">Implements a fragment shader using GLSL.
2124
2125A fragment shader gets the coordinates being rendered as input and
2126produces the pixel values for that particular pixel. Additionally,
2127the shader can declare a set of other input arguments, called
2128uniforms (as they are uniform over all the calls to your shader in
2129each instance of use). A shader can also receive up to 4
2130textures that it can use as input when producing the pixel data.
2131
2132`GskGLShader` is usually used with gtk_snapshot_push_gl_shader()
2133to produce a [class@Gsk.GLShaderNode] in the rendering hierarchy,
2134and then its input textures are constructed by rendering the child
2135nodes to textures before rendering the shader node itself. (You can
2136pass texture nodes as children if you want to directly use a texture
2137as input).
2138
2139The actual shader code is GLSL code that gets combined with
2140some other code into the fragment shader. Since the exact
2141capabilities of the GPU driver differs between different OpenGL
2142drivers and hardware, GTK adds some defines that you can use
2143to ensure your GLSL code runs on as many drivers as it can.
2144
2145If the OpenGL driver is GLES, then the shader language version
2146is set to 100, and GSK_GLES will be defined in the shader.
2147
2148Otherwise, if the OpenGL driver does not support the 3.2 core profile,
2149then the shader will run with language version 110 for GL2 and 130 for GL3,
2150and GSK_LEGACY will be defined in the shader.
2151
2152If the OpenGL driver supports the 3.2 code profile, it will be used,
2153the shader language version is set to 150, and GSK_GL3 will be defined
2154in the shader.
2155
2156The main function the shader must implement is:
2157
2158```glsl
2159 void mainImage(out vec4 fragColor,
2160                in vec2 fragCoord,
2161                in vec2 resolution,
2162                in vec2 uv)
2163```
2164
2165Where the input @fragCoord is the coordinate of the pixel we're
2166currently rendering, relative to the boundary rectangle that was
2167specified in the `GskGLShaderNode`, and @resolution is the width and
2168height of that rectangle. This is in the typical GTK coordinate
2169system with the origin in the top left. @uv contains the u and v
2170coordinates that can be used to index a texture at the
2171corresponding point. These coordinates are in the [0..1]x[0..1]
2172region, with 0, 0 being in the lower left corder (which is typical
2173for OpenGL).
2174
2175The output @fragColor should be a RGBA color (with
2176premultiplied alpha) that will be used as the output for the
2177specified pixel location. Note that this output will be
2178automatically clipped to the clip region of the glshader node.
2179
2180In addition to the function arguments the shader can define
2181up to 4 uniforms for textures which must be called u_textureN
2182(i.e. u_texture1 to u_texture4) as well as any custom uniforms
2183you want of types int, uint, bool, float, vec2, vec3 or vec4.
2184
2185All textures sources contain premultiplied alpha colors, but if some
2186there are outer sources of colors there is a gsk_premultiply() helper
2187to compute premultiplication when needed.
2188
2189Note that GTK parses the uniform declarations, so each uniform has to
2190be on a line by itself with no other code, like so:
2191
2192```glsl
2193uniform float u_time;
2194uniform vec3 u_color;
2195uniform sampler2D u_texture1;
2196uniform sampler2D u_texture2;
2197```
2198
2199GTK uses the "gsk" namespace in the symbols it uses in the
2200shader, so your code should not use any symbols with the prefix gsk
2201or GSK. There are some helper functions declared that you can use:
2202
2203```glsl
2204vec4 GskTexture(sampler2D sampler, vec2 texCoords);
2205```
2206
2207This samples a texture (e.g. u_texture1) at the specified
2208coordinates, and contains some helper ifdefs to ensure that
2209it works on all OpenGL versions.
2210
2211You can compile the shader yourself using [method@Gsk.GLShader.compile],
2212otherwise the GSK renderer will do it when it handling the glshader
2213node. If errors occurs, the returned @error will include the glsl
2214sources, so you can see what GSK was passing to the compiler. You
2215can also set GSK_DEBUG=shaders in the environment to see the sources
2216and other relevant information about all shaders that GSK is handling.
2217
2218# An example shader
2219
2220```glsl
2221uniform float position;
2222uniform sampler2D u_texture1;
2223uniform sampler2D u_texture2;
2224
2225void mainImage(out vec4 fragColor,
2226               in vec2 fragCoord,
2227               in vec2 resolution,
2228               in vec2 uv) {
2229  vec4 source1 = GskTexture(u_texture1, uv);
2230  vec4 source2 = GskTexture(u_texture2, uv);
2231
2232  fragColor = position * source1 + (1.0 - position) * source2;
2233}
2234```</doc>
2235      <doc-deprecated xml:space="preserve">This feature was deprecated in GTK 4.16 after the new
2236rendering infrastructure introduced in 4.14 did not support it. The lack
2237of Vulkan integration would have made it a very hard feature to support.
2238If you want to use OpenGL directly, you should look at
2239[GtkGLArea](../gtk4/class.GLArea.html), which uses a different approach
2240and is still well-supported.</doc-deprecated>
2241      <source-position filename="gsk/gskglshader.h" line="49"/>
2242      <constructor name="new_from_bytes"
2243                   c:identifier="gsk_gl_shader_new_from_bytes"
2244                   deprecated="1"
2245                   deprecated-version="4.16">
2246        <doc xml:space="preserve"
2247             filename="gsk/gskglshader.c"
2248             line="483">Creates a `GskGLShader` that will render pixels using the specified code.</doc>
2249        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2250  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2251  for OpenGL rendering.</doc-deprecated>
2252        <source-position filename="gsk/gskglshader.h" line="52"/>
2253        <return-value transfer-ownership="full">
2254          <doc xml:space="preserve"
2255               filename="gsk/gskglshader.c"
2256               line="489">A new `GskGLShader`</doc>
2257          <type name="GLShader" c:type="GskGLShader*"/>
2258        </return-value>
2259        <parameters>
2260          <parameter name="sourcecode" transfer-ownership="none">
2261            <doc xml:space="preserve"
2262                 filename="gsk/gskglshader.c"
2263                 line="485">GLSL sourcecode for the shader, as a `GBytes`</doc>
2264            <type name="GLib.Bytes" c:type="GBytes*"/>
2265          </parameter>
2266        </parameters>
2267      </constructor>
2268      <constructor name="new_from_resource"
2269                   c:identifier="gsk_gl_shader_new_from_resource"
2270                   deprecated="1"
2271                   deprecated-version="4.16">
2272        <doc xml:space="preserve"
2273             filename="gsk/gskglshader.c"
2274             line="505">Creates a `GskGLShader` that will render pixels using the specified code.</doc>
2275        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2276  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2277  for OpenGL rendering.</doc-deprecated>
2278        <source-position filename="gsk/gskglshader.h" line="54"/>
2279        <return-value transfer-ownership="full">
2280          <doc xml:space="preserve"
2281               filename="gsk/gskglshader.c"
2282               line="512">A new `GskGLShader`</doc>
2283          <type name="GLShader" c:type="GskGLShader*"/>
2284        </return-value>
2285        <parameters>
2286          <parameter name="resource_path" transfer-ownership="none">
2287            <doc xml:space="preserve"
2288                 filename="gsk/gskglshader.c"
2289                 line="507">path to a resource that contains the GLSL sourcecode for
2290    the shader</doc>
2291            <type name="utf8" c:type="const char*"/>
2292          </parameter>
2293        </parameters>
2294      </constructor>
2295      <method name="compile"
2296              c:identifier="gsk_gl_shader_compile"
2297              deprecated="1"
2298              deprecated-version="4.16"
2299              throws="1">
2300        <doc xml:space="preserve"
2301             filename="gsk/gskglshader.c"
2302             line="528">Tries to compile the @shader for the given @renderer.
2303
2304If there is a problem, this function returns %FALSE and reports
2305an error. You should use this function before relying on the shader
2306for rendering and use a fallback with a simpler shader or without
2307shaders if it fails.
2308
2309Note that this will modify the rendering state (for example
2310change the current GL context) and requires the renderer to be
2311set up. This means that the widget has to be realized. Commonly you
2312want to call this from the realize signal of a widget, or during
2313widget snapshot.</doc>
2314        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2315  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2316  for OpenGL rendering.</doc-deprecated>
2317        <source-position filename="gsk/gskglshader.h" line="56"/>
2318        <return-value transfer-ownership="none">
2319          <doc xml:space="preserve"
2320               filename="gsk/gskglshader.c"
2321               line="547">%TRUE on success, %FALSE if an error occurred</doc>
2322          <type name="gboolean" c:type="gboolean"/>
2323        </return-value>
2324        <parameters>
2325          <instance-parameter name="shader" transfer-ownership="none">
2326            <doc xml:space="preserve"
2327                 filename="gsk/gskglshader.c"
2328                 line="530">a `GskGLShader`</doc>
2329            <type name="GLShader" c:type="GskGLShader*"/>
2330          </instance-parameter>
2331          <parameter name="renderer" transfer-ownership="none">
2332            <doc xml:space="preserve"
2333                 filename="gsk/gskglshader.c"
2334                 line="531">a `GskRenderer`</doc>
2335            <type name="Renderer" c:type="GskRenderer*"/>
2336          </parameter>
2337        </parameters>
2338      </method>
2339      <method name="find_uniform_by_name"
2340              c:identifier="gsk_gl_shader_find_uniform_by_name"
2341              deprecated="1"
2342              deprecated-version="4.16">
2343        <doc xml:space="preserve"
2344             filename="gsk/gskglshader.c"
2345             line="674">Looks for a uniform by the name @name, and returns the index
2346of the uniform, or -1 if it was not found.</doc>
2347        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2348  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2349  for OpenGL rendering.</doc-deprecated>
2350        <source-position filename="gsk/gskglshader.h" line="71"/>
2351        <return-value transfer-ownership="none">
2352          <doc xml:space="preserve"
2353               filename="gsk/gskglshader.c"
2354               line="682">The index of the uniform, or -1</doc>
2355          <type name="gint" c:type="int"/>
2356        </return-value>
2357        <parameters>
2358          <instance-parameter name="shader" transfer-ownership="none">
2359            <doc xml:space="preserve"
2360                 filename="gsk/gskglshader.c"
2361                 line="676">a `GskGLShader`</doc>
2362            <type name="GLShader" c:type="GskGLShader*"/>
2363          </instance-parameter>
2364          <parameter name="name" transfer-ownership="none">
2365            <doc xml:space="preserve"
2366                 filename="gsk/gskglshader.c"
2367                 line="677">uniform name</doc>
2368            <type name="utf8" c:type="const char*"/>
2369          </parameter>
2370        </parameters>
2371      </method>
2372      <method name="format_args"
2373              c:identifier="gsk_gl_shader_format_args"
2374              introspectable="0"
2375              deprecated="1"
2376              deprecated-version="4.16">
2377        <doc xml:space="preserve"
2378             filename="gsk/gskglshader.c"
2379             line="1141">Formats the uniform data as needed for feeding the named uniforms
2380values into the shader.
2381
2382The argument list is a list of pairs of names, and values for the types
2383that match the declared uniforms (i.e. double/int/guint/gboolean for
2384primitive values and `graphene_vecN_t *` for vecN uniforms).
2385
2386Any uniforms of the shader that are not included in the argument list
2387are zero-initialized.</doc>
2388        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2389  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2390  for OpenGL rendering.</doc-deprecated>
2391        <source-position filename="gsk/gskglshader.h" line="89"/>
2392        <return-value transfer-ownership="full">
2393          <doc xml:space="preserve"
2394               filename="gsk/gskglshader.c"
2395               line="1157">A newly allocated block of data which can be
2396    passed to [ctor@Gsk.GLShaderNode.new].</doc>
2397          <type name="GLib.Bytes" c:type="GBytes*"/>
2398        </return-value>
2399        <parameters>
2400          <instance-parameter name="shader" transfer-ownership="none">
2401            <doc xml:space="preserve"
2402                 filename="gsk/gskglshader.c"
2403                 line="1143">a `GskGLShader`</doc>
2404            <type name="GLShader" c:type="GskGLShader*"/>
2405          </instance-parameter>
2406          <parameter name="..." transfer-ownership="none">
2407            <doc xml:space="preserve"
2408                 filename="gsk/gskglshader.c"
2409                 line="1144">name-Value pairs for the uniforms of @shader, ending with
2410    a %NULL name</doc>
2411            <varargs/>
2412          </parameter>
2413        </parameters>
2414      </method>
2415      <method name="format_args_va"
2416              c:identifier="gsk_gl_shader_format_args_va"
2417              introspectable="0"
2418              deprecated="1"
2419              deprecated-version="4.16">
2420        <doc xml:space="preserve"
2421             filename="gsk/gskglshader.c"
2422             line="1051">Formats the uniform data as needed for feeding the named uniforms
2423values into the shader.
2424
2425The argument list is a list of pairs of names, and values for the
2426types that match the declared uniforms (i.e. double/int/guint/gboolean
2427for primitive values and `graphene_vecN_t *` for vecN uniforms).
2428
2429It is an error to pass a uniform name that is not declared by the shader.
2430
2431Any uniforms of the shader that are not included in the argument list
2432are zero-initialized.</doc>
2433        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2434  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2435  for OpenGL rendering.</doc-deprecated>
2436        <source-position filename="gsk/gskglshader.h" line="86"/>
2437        <return-value transfer-ownership="full">
2438          <doc xml:space="preserve"
2439               filename="gsk/gskglshader.c"
2440               line="1069">A newly allocated block of data which can be
2441    passed to [ctor@Gsk.GLShaderNode.new].</doc>
2442          <type name="GLib.Bytes" c:type="GBytes*"/>
2443        </return-value>
2444        <parameters>
2445          <instance-parameter name="shader" transfer-ownership="none">
2446            <doc xml:space="preserve"
2447                 filename="gsk/gskglshader.c"
2448                 line="1053">a `GskGLShader`</doc>
2449            <type name="GLShader" c:type="GskGLShader*"/>
2450          </instance-parameter>
2451          <parameter name="uniforms" transfer-ownership="none">
2452            <doc xml:space="preserve"
2453                 filename="gsk/gskglshader.c"
2454                 line="1054">name-Value pairs for the uniforms of @shader, ending
2455    with a %NULL name</doc>
2456            <type name="va_list" c:type="va_list"/>
2457          </parameter>
2458        </parameters>
2459      </method>
2460      <method name="get_arg_bool"
2461              c:identifier="gsk_gl_shader_get_arg_bool"
2462              deprecated="1"
2463              deprecated-version="4.16">
2464        <doc xml:space="preserve"
2465             filename="gsk/gskglshader.c"
2466             line="903">Gets the value of the uniform @idx in the @args block.
2467
2468The uniform must be of bool type.</doc>
2469        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2470  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2471  for OpenGL rendering.</doc-deprecated>
2472        <source-position filename="gsk/gskglshader.h" line="105"/>
2473        <return-value transfer-ownership="none">
2474          <doc xml:space="preserve"
2475               filename="gsk/gskglshader.c"
2476               line="913">The value</doc>
2477          <type name="gboolean" c:type="gboolean"/>
2478        </return-value>
2479        <parameters>
2480          <instance-parameter name="shader" transfer-ownership="none">
2481            <doc xml:space="preserve"
2482                 filename="gsk/gskglshader.c"
2483                 line="905">a `GskGLShader`</doc>
2484            <type name="GLShader" c:type="GskGLShader*"/>
2485          </instance-parameter>
2486          <parameter name="args" transfer-ownership="none">
2487            <doc xml:space="preserve"
2488                 filename="gsk/gskglshader.c"
2489                 line="906">uniform arguments</doc>
2490            <type name="GLib.Bytes" c:type="GBytes*"/>
2491          </parameter>
2492          <parameter name="idx" transfer-ownership="none">
2493            <doc xml:space="preserve"
2494                 filename="gsk/gskglshader.c"
2495                 line="907">index of the uniform</doc>
2496            <type name="gint" c:type="int"/>
2497          </parameter>
2498        </parameters>
2499      </method>
2500      <method name="get_arg_float"
2501              c:identifier="gsk_gl_shader_get_arg_float"
2502              deprecated="1"
2503              deprecated-version="4.16">
2504        <doc xml:space="preserve"
2505             filename="gsk/gskglshader.c"
2506             line="792">Gets the value of the uniform @idx in the @args block.
2507
2508The uniform must be of float type.</doc>
2509        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2510  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2511  for OpenGL rendering.</doc-deprecated>
2512        <source-position filename="gsk/gskglshader.h" line="93"/>
2513        <return-value transfer-ownership="none">
2514          <doc xml:space="preserve"
2515               filename="gsk/gskglshader.c"
2516               line="802">The value</doc>
2517          <type name="gfloat" c:type="float"/>
2518        </return-value>
2519        <parameters>
2520          <instance-parameter name="shader" transfer-ownership="none">
2521            <doc xml:space="preserve"
2522                 filename="gsk/gskglshader.c"
2523                 line="794">a `GskGLShader`</doc>
2524            <type name="GLShader" c:type="GskGLShader*"/>
2525          </instance-parameter>
2526          <parameter name="args" transfer-ownership="none">
2527            <doc xml:space="preserve"
2528                 filename="gsk/gskglshader.c"
2529                 line="795">uniform arguments</doc>
2530            <type name="GLib.Bytes" c:type="GBytes*"/>
2531          </parameter>
2532          <parameter name="idx" transfer-ownership="none">
2533            <doc xml:space="preserve"
2534                 filename="gsk/gskglshader.c"
2535                 line="796">index of the uniform</doc>
2536            <type name="gint" c:type="int"/>
2537          </parameter>
2538        </parameters>
2539      </method>
2540      <method name="get_arg_int"
2541              c:identifier="gsk_gl_shader_get_arg_int"
2542              deprecated="1"
2543              deprecated-version="4.16">
2544        <doc xml:space="preserve"
2545             filename="gsk/gskglshader.c"
2546             line="829">Gets the value of the uniform @idx in the @args block.
2547
2548The uniform must be of int type.</doc>
2549        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2550  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2551  for OpenGL rendering.</doc-deprecated>
2552        <source-position filename="gsk/gskglshader.h" line="97"/>
2553        <return-value transfer-ownership="none">
2554          <doc xml:space="preserve"
2555               filename="gsk/gskglshader.c"
2556               line="839">The value</doc>
2557          <type name="gint32" c:type="gint32"/>
2558        </return-value>
2559        <parameters>
2560          <instance-parameter name="shader" transfer-ownership="none">
2561            <doc xml:space="preserve"
2562                 filename="gsk/gskglshader.c"
2563                 line="831">a `GskGLShader`</doc>
2564            <type name="GLShader" c:type="GskGLShader*"/>
2565          </instance-parameter>
2566          <parameter name="args" transfer-ownership="none">
2567            <doc xml:space="preserve"
2568                 filename="gsk/gskglshader.c"
2569                 line="832">uniform arguments</doc>
2570            <type name="GLib.Bytes" c:type="GBytes*"/>
2571          </parameter>
2572          <parameter name="idx" transfer-ownership="none">
2573            <doc xml:space="preserve"
2574                 filename="gsk/gskglshader.c"
2575                 line="833">index of the uniform</doc>
2576            <type name="gint" c:type="int"/>
2577          </parameter>
2578        </parameters>
2579      </method>
2580      <method name="get_arg_uint"
2581              c:identifier="gsk_gl_shader_get_arg_uint"
2582              deprecated="1"
2583              deprecated-version="4.16">
2584        <doc xml:space="preserve"
2585             filename="gsk/gskglshader.c"
2586             line="866">Gets the value of the uniform @idx in the @args block.
2587
2588The uniform must be of uint type.</doc>
2589        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2590  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2591  for OpenGL rendering.</doc-deprecated>
2592        <source-position filename="gsk/gskglshader.h" line="101"/>
2593        <return-value transfer-ownership="none">
2594          <doc xml:space="preserve"
2595               filename="gsk/gskglshader.c"
2596               line="876">The value</doc>
2597          <type name="guint32" c:type="guint32"/>
2598        </return-value>
2599        <parameters>
2600          <instance-parameter name="shader" transfer-ownership="none">
2601            <doc xml:space="preserve"
2602                 filename="gsk/gskglshader.c"
2603                 line="868">a `GskGLShader`</doc>
2604            <type name="GLShader" c:type="GskGLShader*"/>
2605          </instance-parameter>
2606          <parameter name="args" transfer-ownership="none">
2607            <doc xml:space="preserve"
2608                 filename="gsk/gskglshader.c"
2609                 line="869">uniform arguments</doc>
2610            <type name="GLib.Bytes" c:type="GBytes*"/>
2611          </parameter>
2612          <parameter name="idx" transfer-ownership="none">
2613            <doc xml:space="preserve"
2614                 filename="gsk/gskglshader.c"
2615                 line="870">index of the uniform</doc>
2616            <type name="gint" c:type="int"/>
2617          </parameter>
2618        </parameters>
2619      </method>
2620      <method name="get_arg_vec2"
2621              c:identifier="gsk_gl_shader_get_arg_vec2"
2622              deprecated="1"
2623              deprecated-version="4.16">
2624        <doc xml:space="preserve"
2625             filename="gsk/gskglshader.c"
2626             line="940">Gets the value of the uniform @idx in the @args block.
2627
2628The uniform must be of vec2 type.</doc>
2629        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2630  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2631  for OpenGL rendering.</doc-deprecated>
2632        <source-position filename="gsk/gskglshader.h" line="109"/>
2633        <return-value transfer-ownership="none">
2634          <type name="none" c:type="void"/>
2635        </return-value>
2636        <parameters>
2637          <instance-parameter name="shader" transfer-ownership="none">
2638            <doc xml:space="preserve"
2639                 filename="gsk/gskglshader.c"
2640                 line="942">a `GskGLShader`</doc>
2641            <type name="GLShader" c:type="GskGLShader*"/>
2642          </instance-parameter>
2643          <parameter name="args" transfer-ownership="none">
2644            <doc xml:space="preserve"
2645                 filename="gsk/gskglshader.c"
2646                 line="943">uniform arguments</doc>
2647            <type name="GLib.Bytes" c:type="GBytes*"/>
2648          </parameter>
2649          <parameter name="idx" transfer-ownership="none">
2650            <doc xml:space="preserve"
2651                 filename="gsk/gskglshader.c"
2652                 line="944">index of the uniform</doc>
2653            <type name="gint" c:type="int"/>
2654          </parameter>
2655          <parameter name="out_value" transfer-ownership="none">
2656            <doc xml:space="preserve"
2657                 filename="gsk/gskglshader.c"
2658                 line="945">location to store the uniform value in</doc>
2659            <type name="Graphene.Vec2" c:type="graphene_vec2_t*"/>
2660          </parameter>
2661        </parameters>
2662      </method>
2663      <method name="get_arg_vec3"
2664              c:identifier="gsk_gl_shader_get_arg_vec3"
2665              deprecated="1"
2666              deprecated-version="4.16">
2667        <doc xml:space="preserve"
2668             filename="gsk/gskglshader.c"
2669             line="977">Gets the value of the uniform @idx in the @args block.
2670
2671The uniform must be of vec3 type.</doc>
2672        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2673  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2674  for OpenGL rendering.</doc-deprecated>
2675        <source-position filename="gsk/gskglshader.h" line="114"/>
2676        <return-value transfer-ownership="none">
2677          <type name="none" c:type="void"/>
2678        </return-value>
2679        <parameters>
2680          <instance-parameter name="shader" transfer-ownership="none">
2681            <doc xml:space="preserve"
2682                 filename="gsk/gskglshader.c"
2683                 line="979">a `GskGLShader`</doc>
2684            <type name="GLShader" c:type="GskGLShader*"/>
2685          </instance-parameter>
2686          <parameter name="args" transfer-ownership="none">
2687            <doc xml:space="preserve"
2688                 filename="gsk/gskglshader.c"
2689                 line="980">uniform arguments</doc>
2690            <type name="GLib.Bytes" c:type="GBytes*"/>
2691          </parameter>
2692          <parameter name="idx" transfer-ownership="none">
2693            <doc xml:space="preserve"
2694                 filename="gsk/gskglshader.c"
2695                 line="981">index of the uniform</doc>
2696            <type name="gint" c:type="int"/>
2697          </parameter>
2698          <parameter name="out_value" transfer-ownership="none">
2699            <doc xml:space="preserve"
2700                 filename="gsk/gskglshader.c"
2701                 line="982">location to store the uniform value in</doc>
2702            <type name="Graphene.Vec3" c:type="graphene_vec3_t*"/>
2703          </parameter>
2704        </parameters>
2705      </method>
2706      <method name="get_arg_vec4"
2707              c:identifier="gsk_gl_shader_get_arg_vec4"
2708              deprecated="1"
2709              deprecated-version="4.16">
2710        <doc xml:space="preserve"
2711             filename="gsk/gskglshader.c"
2712             line="1014">Gets the value of the uniform @idx in the @args block.
2713
2714The uniform must be of vec4 type.</doc>
2715        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2716  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2717  for OpenGL rendering.</doc-deprecated>
2718        <source-position filename="gsk/gskglshader.h" line="119"/>
2719        <return-value transfer-ownership="none">
2720          <type name="none" c:type="void"/>
2721        </return-value>
2722        <parameters>
2723          <instance-parameter name="shader" transfer-ownership="none">
2724            <doc xml:space="preserve"
2725                 filename="gsk/gskglshader.c"
2726                 line="1016">a `GskGLShader`</doc>
2727            <type name="GLShader" c:type="GskGLShader*"/>
2728          </instance-parameter>
2729          <parameter name="args" transfer-ownership="none">
2730            <doc xml:space="preserve"
2731                 filename="gsk/gskglshader.c"
2732                 line="1017">uniform arguments</doc>
2733            <type name="GLib.Bytes" c:type="GBytes*"/>
2734          </parameter>
2735          <parameter name="idx" transfer-ownership="none">
2736            <doc xml:space="preserve"
2737                 filename="gsk/gskglshader.c"
2738                 line="1018">index of the uniform</doc>
2739            <type name="gint" c:type="int"/>
2740          </parameter>
2741          <parameter name="out_value" transfer-ownership="none">
2742            <doc xml:space="preserve"
2743                 filename="gsk/gskglshader.c"
2744                 line="1019">location to store set the uniform value in</doc>
2745            <type name="Graphene.Vec4" c:type="graphene_vec4_t*"/>
2746          </parameter>
2747        </parameters>
2748      </method>
2749      <method name="get_args_size"
2750              c:identifier="gsk_gl_shader_get_args_size"
2751              deprecated="1"
2752              deprecated-version="4.16">
2753        <doc xml:space="preserve"
2754             filename="gsk/gskglshader.c"
2755             line="758">Get the size of the data block used to specify arguments for this shader.</doc>
2756        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2757  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2758  for OpenGL rendering.</doc-deprecated>
2759        <source-position filename="gsk/gskglshader.h" line="80"/>
2760        <return-value transfer-ownership="none">
2761          <doc xml:space="preserve"
2762               filename="gsk/gskglshader.c"
2763               line="764">The size of the data block</doc>
2764          <type name="gsize" c:type="gsize"/>
2765        </return-value>
2766        <parameters>
2767          <instance-parameter name="shader" transfer-ownership="none">
2768            <doc xml:space="preserve"
2769                 filename="gsk/gskglshader.c"
2770                 line="760">a `GskGLShader`</doc>
2771            <type name="GLShader" c:type="GskGLShader*"/>
2772          </instance-parameter>
2773        </parameters>
2774      </method>
2775      <method name="get_n_textures"
2776              c:identifier="gsk_gl_shader_get_n_textures"
2777              deprecated="1"
2778              deprecated-version="4.16">
2779        <doc xml:space="preserve"
2780             filename="gsk/gskglshader.c"
2781             line="607">Returns the number of textures that the shader requires.
2782
2783This can be used to check that the a passed shader works
2784in your usecase. It is determined by looking at the highest
2785u_textureN value that the shader defines.</doc>
2786        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2787  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2788  for OpenGL rendering.</doc-deprecated>
2789        <source-position filename="gsk/gskglshader.h" line="64"/>
2790        <return-value transfer-ownership="none">
2791          <doc xml:space="preserve"
2792               filename="gsk/gskglshader.c"
2793               line="617">The number of texture inputs required by @shader</doc>
2794          <type name="gint" c:type="int"/>
2795        </return-value>
2796        <parameters>
2797          <instance-parameter name="shader" transfer-ownership="none">
2798            <doc xml:space="preserve"
2799                 filename="gsk/gskglshader.c"
2800                 line="609">a `GskGLShader`</doc>
2801            <type name="GLShader" c:type="GskGLShader*"/>
2802          </instance-parameter>
2803        </parameters>
2804      </method>
2805      <method name="get_n_uniforms"
2806              c:identifier="gsk_gl_shader_get_n_uniforms"
2807              deprecated="1"
2808              deprecated-version="4.16">
2809        <doc xml:space="preserve"
2810             filename="gsk/gskglshader.c"
2811             line="631">Get the number of declared uniforms for this shader.</doc>
2812        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2813  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2814  for OpenGL rendering.</doc-deprecated>
2815        <source-position filename="gsk/gskglshader.h" line="66"/>
2816        <return-value transfer-ownership="none">
2817          <doc xml:space="preserve"
2818               filename="gsk/gskglshader.c"
2819               line="637">The number of declared uniforms</doc>
2820          <type name="gint" c:type="int"/>
2821        </return-value>
2822        <parameters>
2823          <instance-parameter name="shader" transfer-ownership="none">
2824            <doc xml:space="preserve"
2825                 filename="gsk/gskglshader.c"
2826                 line="633">a `GskGLShader`</doc>
2827            <type name="GLShader" c:type="GskGLShader*"/>
2828          </instance-parameter>
2829        </parameters>
2830      </method>
2831      <method name="get_resource"
2832              c:identifier="gsk_gl_shader_get_resource"
2833              glib:get-property="resource"
2834              deprecated="1"
2835              deprecated-version="4.16">
2836        <doc xml:space="preserve"
2837             filename="gsk/gskglshader.c"
2838             line="586">Gets the resource path for the GLSL sourcecode being used
2839to render this shader.</doc>
2840        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2841  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2842  for OpenGL rendering.</doc-deprecated>
2843        <source-position filename="gsk/gskglshader.h" line="62"/>
2844        <return-value transfer-ownership="none" nullable="1">
2845          <doc xml:space="preserve"
2846               filename="gsk/gskglshader.c"
2847               line="593">The resource path for the shader</doc>
2848          <type name="utf8" c:type="const char*"/>
2849        </return-value>
2850        <parameters>
2851          <instance-parameter name="shader" transfer-ownership="none">
2852            <doc xml:space="preserve"
2853                 filename="gsk/gskglshader.c"
2854                 line="588">a `GskGLShader`</doc>
2855            <type name="GLShader" c:type="GskGLShader*"/>
2856          </instance-parameter>
2857        </parameters>
2858      </method>
2859      <method name="get_source"
2860              c:identifier="gsk_gl_shader_get_source"
2861              glib:get-property="source"
2862              deprecated="1"
2863              deprecated-version="4.16">
2864        <doc xml:space="preserve"
2865             filename="gsk/gskglshader.c"
2866             line="566">Gets the GLSL sourcecode being used to render this shader.</doc>
2867        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2868  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2869  for OpenGL rendering.</doc-deprecated>
2870        <source-position filename="gsk/gskglshader.h" line="60"/>
2871        <return-value transfer-ownership="none">
2872          <doc xml:space="preserve"
2873               filename="gsk/gskglshader.c"
2874               line="572">The source code for the shader</doc>
2875          <type name="GLib.Bytes" c:type="GBytes*"/>
2876        </return-value>
2877        <parameters>
2878          <instance-parameter name="shader" transfer-ownership="none">
2879            <doc xml:space="preserve"
2880                 filename="gsk/gskglshader.c"
2881                 line="568">a `GskGLShader`</doc>
2882            <type name="GLShader" c:type="GskGLShader*"/>
2883          </instance-parameter>
2884        </parameters>
2885      </method>
2886      <method name="get_uniform_name"
2887              c:identifier="gsk_gl_shader_get_uniform_name"
2888              deprecated="1"
2889              deprecated-version="4.16">
2890        <doc xml:space="preserve"
2891             filename="gsk/gskglshader.c"
2892             line="651">Get the name of the declared uniform for this shader at index @idx.</doc>
2893        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2894  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2895  for OpenGL rendering.</doc-deprecated>
2896        <source-position filename="gsk/gskglshader.h" line="68"/>
2897        <return-value transfer-ownership="none">
2898          <doc xml:space="preserve"
2899               filename="gsk/gskglshader.c"
2900               line="658">The name of the declared uniform</doc>
2901          <type name="utf8" c:type="const char*"/>
2902        </return-value>
2903        <parameters>
2904          <instance-parameter name="shader" transfer-ownership="none">
2905            <doc xml:space="preserve"
2906                 filename="gsk/gskglshader.c"
2907                 line="653">a `GskGLShader`</doc>
2908            <type name="GLShader" c:type="GskGLShader*"/>
2909          </instance-parameter>
2910          <parameter name="idx" transfer-ownership="none">
2911            <doc xml:space="preserve"
2912                 filename="gsk/gskglshader.c"
2913                 line="654">index of the uniform</doc>
2914            <type name="gint" c:type="int"/>
2915          </parameter>
2916        </parameters>
2917      </method>
2918      <method name="get_uniform_offset"
2919              c:identifier="gsk_gl_shader_get_uniform_offset"
2920              deprecated="1"
2921              deprecated-version="4.16">
2922        <doc xml:space="preserve"
2923             filename="gsk/gskglshader.c"
2924             line="727">Get the offset into the data block where data for this uniforms is stored.</doc>
2925        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2926  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2927  for OpenGL rendering.</doc-deprecated>
2928        <source-position filename="gsk/gskglshader.h" line="77"/>
2929        <return-value transfer-ownership="none">
2930          <doc xml:space="preserve"
2931               filename="gsk/gskglshader.c"
2932               line="734">The data offset</doc>
2933          <type name="gint" c:type="int"/>
2934        </return-value>
2935        <parameters>
2936          <instance-parameter name="shader" transfer-ownership="none">
2937            <doc xml:space="preserve"
2938                 filename="gsk/gskglshader.c"
2939                 line="729">a `GskGLShader`</doc>
2940            <type name="GLShader" c:type="GskGLShader*"/>
2941          </instance-parameter>
2942          <parameter name="idx" transfer-ownership="none">
2943            <doc xml:space="preserve"
2944                 filename="gsk/gskglshader.c"
2945                 line="730">index of the uniform</doc>
2946            <type name="gint" c:type="int"/>
2947          </parameter>
2948        </parameters>
2949      </method>
2950      <method name="get_uniform_type"
2951              c:identifier="gsk_gl_shader_get_uniform_type"
2952              deprecated="1"
2953              deprecated-version="4.16">
2954        <doc xml:space="preserve"
2955             filename="gsk/gskglshader.c"
2956             line="704">Get the type of the declared uniform for this shader at index @idx.</doc>
2957        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
2958  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
2959  for OpenGL rendering.</doc-deprecated>
2960        <source-position filename="gsk/gskglshader.h" line="74"/>
2961        <return-value transfer-ownership="none">
2962          <doc xml:space="preserve"
2963               filename="gsk/gskglshader.c"
2964               line="711">The type of the declared uniform</doc>
2965          <type name="GLUniformType" c:type="GskGLUniformType"/>
2966        </return-value>
2967        <parameters>
2968          <instance-parameter name="shader" transfer-ownership="none">
2969            <doc xml:space="preserve"
2970                 filename="gsk/gskglshader.c"
2971                 line="706">a `GskGLShader`</doc>
2972            <type name="GLShader" c:type="GskGLShader*"/>
2973          </instance-parameter>
2974          <parameter name="idx" transfer-ownership="none">
2975            <doc xml:space="preserve"
2976                 filename="gsk/gskglshader.c"
2977                 line="707">index of the uniform</doc>
2978            <type name="gint" c:type="int"/>
2979          </parameter>
2980        </parameters>
2981      </method>
2982      <property name="resource"
2983                writable="1"
2984                construct-only="1"
2985                transfer-ownership="none"
2986                getter="get_resource"
2987                default-value="NULL">
2988        <doc xml:space="preserve"
2989             filename="gsk/gskglshader.c"
2990             line="459">Resource containing the source code for the shader.
2991
2992If the shader source is not coming from a resource, this
2993will be %NULL.</doc>
2994        <type name="utf8" c:type="gchar*"/>
2995      </property>
2996      <property name="source"
2997                writable="1"
2998                construct-only="1"
2999                transfer-ownership="none"
3000                getter="get_source">
3001        <doc xml:space="preserve"
3002             filename="gsk/gskglshader.c"
3003             line="447">The source code for the shader, as a `GBytes`.</doc>
3004        <type name="GLib.Bytes"/>
3005      </property>
3006    </class>
3007    <record name="GLShaderClass"
3008            c:type="GskGLShaderClass"
3009            glib:is-gtype-struct-for="GLShader">
3010      <source-position filename="gsk/gskglshader.h" line="49"/>
3011      <field name="parent_class">
3012        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
3013      </field>
3014    </record>
3015    <class name="GLShaderNode"
3016           c:symbol-prefix="gl_shader_node"
3017           c:type="GskGLShaderNode"
3018           parent="RenderNode"
3019           glib:type-name="GskGLShaderNode"
3020           glib:get-type="gsk_gl_shader_node_get_type"
3021           glib:fundamental="1">
3022      <doc xml:space="preserve"
3023           filename="gsk/gskrendernodeimpl.c"
3024           line="8184">A render node using a GL shader when drawing its children nodes.</doc>
3025      <constructor name="new"
3026                   c:identifier="gsk_gl_shader_node_new"
3027                   deprecated="1"
3028                   deprecated-version="4.16">
3029        <doc xml:space="preserve"
3030             filename="gsk/gskrendernodeimpl.c"
3031             line="8267">Creates a `GskRenderNode` that will render the given @shader into the
3032area given by @bounds.
3033
3034The @args is a block of data to use for uniform input, as per types and
3035offsets defined by the @shader. Normally this is generated by
3036[method@Gsk.GLShader.format_args] or [struct@Gsk.ShaderArgsBuilder].
3037
3038See [class@Gsk.GLShader] for details about how the shader should be written.
3039
3040All the children will be rendered into textures (if they aren't already
3041`GskTextureNodes`, which will be used directly). These textures will be
3042sent as input to the shader.
3043
3044If the renderer doesn't support GL shaders, or if there is any problem
3045when compiling the shader, then the node will draw pink. You should use
3046[method@Gsk.GLShader.compile] to ensure the @shader will work for the
3047renderer before using it.</doc>
3048        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
3049  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
3050  for OpenGL rendering.</doc-deprecated>
3051        <source-position filename="gsk/gskrendernode.h" line="593"/>
3052        <return-value transfer-ownership="full">
3053          <doc xml:space="preserve"
3054               filename="gsk/gskrendernodeimpl.c"
3055               line="8295">A new `GskRenderNode`</doc>
3056          <type name="GLShaderNode" c:type="GskRenderNode*"/>
3057        </return-value>
3058        <parameters>
3059          <parameter name="shader" transfer-ownership="none">
3060            <doc xml:space="preserve"
3061                 filename="gsk/gskrendernodeimpl.c"
3062                 line="8269">the `GskGLShader`</doc>
3063            <type name="GLShader" c:type="GskGLShader*"/>
3064          </parameter>
3065          <parameter name="bounds" transfer-ownership="none">
3066            <doc xml:space="preserve"
3067                 filename="gsk/gskrendernodeimpl.c"
3068                 line="8270">the rectangle to render the shader into</doc>
3069            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
3070          </parameter>
3071          <parameter name="args" transfer-ownership="none">
3072            <doc xml:space="preserve"
3073                 filename="gsk/gskrendernodeimpl.c"
3074                 line="8271">Arguments for the uniforms</doc>
3075            <type name="GLib.Bytes" c:type="GBytes*"/>
3076          </parameter>
3077          <parameter name="children"
3078                     transfer-ownership="none"
3079                     nullable="1"
3080                     allow-none="1">
3081            <doc xml:space="preserve"
3082                 filename="gsk/gskrendernodeimpl.c"
3083                 line="8272">array of child nodes,
3084  these will be rendered to textures and used as input.</doc>
3085            <array length="4" zero-terminated="0" c:type="GskRenderNode**">
3086              <type name="RenderNode" c:type="GskRenderNode*"/>
3087            </array>
3088          </parameter>
3089          <parameter name="n_children" transfer-ownership="none">
3090            <doc xml:space="preserve"
3091                 filename="gsk/gskrendernodeimpl.c"
3092                 line="8274">Length of @children (currently the GL backend supports
3093  up to 4 children)</doc>
3094            <type name="guint" c:type="guint"/>
3095          </parameter>
3096        </parameters>
3097      </constructor>
3098      <method name="get_args"
3099              c:identifier="gsk_gl_shader_node_get_args"
3100              deprecated="1"
3101              deprecated-version="4.16">
3102        <doc xml:space="preserve"
3103             filename="gsk/gskrendernodeimpl.c"
3104             line="8402">Gets args for the node.</doc>
3105        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
3106  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
3107  for OpenGL rendering.</doc-deprecated>
3108        <source-position filename="gsk/gskrendernode.h" line="604"/>
3109        <return-value transfer-ownership="none">
3110          <doc xml:space="preserve"
3111               filename="gsk/gskrendernodeimpl.c"
3112               line="8408">A `GBytes` with the uniform arguments</doc>
3113          <type name="GLib.Bytes" c:type="GBytes*"/>
3114        </return-value>
3115        <parameters>
3116          <instance-parameter name="node" transfer-ownership="none">
3117            <doc xml:space="preserve"
3118                 filename="gsk/gskrendernodeimpl.c"
3119                 line="8404">a `GskRenderNode` for a gl shader</doc>
3120            <type name="GLShaderNode" c:type="const GskRenderNode*"/>
3121          </instance-parameter>
3122        </parameters>
3123      </method>
3124      <method name="get_child"
3125              c:identifier="gsk_gl_shader_node_get_child"
3126              deprecated="1"
3127              deprecated-version="4.16">
3128        <doc xml:space="preserve"
3129             filename="gsk/gskrendernodeimpl.c"
3130             line="8364">Gets one of the children.</doc>
3131        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
3132  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
3133  for OpenGL rendering.</doc-deprecated>
3134        <source-position filename="gsk/gskrendernode.h" line="601"/>
3135        <return-value transfer-ownership="none">
3136          <doc xml:space="preserve"
3137               filename="gsk/gskrendernodeimpl.c"
3138               line="8371">the @idx'th child of @node</doc>
3139          <type name="RenderNode" c:type="GskRenderNode*"/>
3140        </return-value>
3141        <parameters>
3142          <instance-parameter name="node" transfer-ownership="none">
3143            <doc xml:space="preserve"
3144                 filename="gsk/gskrendernodeimpl.c"
3145                 line="8366">a `GskRenderNode` for a gl shader</doc>
3146            <type name="GLShaderNode" c:type="const GskRenderNode*"/>
3147          </instance-parameter>
3148          <parameter name="idx" transfer-ownership="none">
3149            <doc xml:space="preserve"
3150                 filename="gsk/gskrendernodeimpl.c"
3151                 line="8367">the position of the child to get</doc>
3152            <type name="guint" c:type="guint"/>
3153          </parameter>
3154        </parameters>
3155      </method>
3156      <method name="get_n_children"
3157              c:identifier="gsk_gl_shader_node_get_n_children"
3158              deprecated="1"
3159              deprecated-version="4.16">
3160        <doc xml:space="preserve"
3161             filename="gsk/gskrendernodeimpl.c"
3162             line="8344">Returns the number of children</doc>
3163        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
3164  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
3165  for OpenGL rendering.</doc-deprecated>
3166        <source-position filename="gsk/gskrendernode.h" line="599"/>
3167        <return-value transfer-ownership="none">
3168          <doc xml:space="preserve"
3169               filename="gsk/gskrendernodeimpl.c"
3170               line="8350">The number of children</doc>
3171          <type name="guint" c:type="guint"/>
3172        </return-value>
3173        <parameters>
3174          <instance-parameter name="node" transfer-ownership="none">
3175            <doc xml:space="preserve"
3176                 filename="gsk/gskrendernodeimpl.c"
3177                 line="8346">a `GskRenderNode` for a gl shader</doc>
3178            <type name="GLShaderNode" c:type="const GskRenderNode*"/>
3179          </instance-parameter>
3180        </parameters>
3181      </method>
3182      <method name="get_shader" c:identifier="gsk_gl_shader_node_get_shader">
3183        <doc xml:space="preserve"
3184             filename="gsk/gskrendernodeimpl.c"
3185             line="8386">Gets shader code for the node.</doc>
3186        <source-position filename="gsk/gskrendernode.h" line="606"/>
3187        <return-value transfer-ownership="none">
3188          <doc xml:space="preserve"
3189               filename="gsk/gskrendernodeimpl.c"
3190               line="8392">the `GskGLShader` shader</doc>
3191          <type name="GLShader" c:type="GskGLShader*"/>
3192        </return-value>
3193        <parameters>
3194          <instance-parameter name="node" transfer-ownership="none">
3195            <doc xml:space="preserve"
3196                 filename="gsk/gskrendernodeimpl.c"
3197                 line="8388">a `GskRenderNode` for a gl shader</doc>
3198            <type name="GLShaderNode" c:type="const GskRenderNode*"/>
3199          </instance-parameter>
3200        </parameters>
3201      </method>
3202    </class>
3203    <enumeration name="GLUniformType"
3204                 deprecated="1"
3205                 deprecated-version="4.16"
3206                 glib:type-name="GskGLUniformType"
3207                 glib:get-type="gsk_gl_uniform_type_get_type"
3208                 c:type="GskGLUniformType">
3209      <doc xml:space="preserve"
3210           filename="gsk/gskenums.h"
3211           line="436">Defines the types of the uniforms that `GskGLShaders` declare.
3212
3213It defines both what the type is called in the GLSL shader
3214code, and what the corresponding C type is on the Gtk side.</doc>
3215      <member name="none"
3216              value="0"
3217              c:identifier="GSK_GL_UNIFORM_TYPE_NONE"
3218              glib:nick="none"
3219              glib:name="GSK_GL_UNIFORM_TYPE_NONE">
3220        <doc xml:space="preserve"
3221             filename="gsk/gskenums.h"
3222             line="438">No type, used for uninitialized or unspecified values.</doc>
3223      </member>
3224      <member name="float"
3225              value="1"
3226              c:identifier="GSK_GL_UNIFORM_TYPE_FLOAT"
3227              glib:nick="float"
3228              glib:name="GSK_GL_UNIFORM_TYPE_FLOAT">
3229        <doc xml:space="preserve"
3230             filename="gsk/gskenums.h"
3231             line="439">A float uniform</doc>
3232      </member>
3233      <member name="int"
3234              value="2"
3235              c:identifier="GSK_GL_UNIFORM_TYPE_INT"
3236              glib:nick="int"
3237              glib:name="GSK_GL_UNIFORM_TYPE_INT">
3238        <doc xml:space="preserve"
3239             filename="gsk/gskenums.h"
3240             line="440">A GLSL int / gint32 uniform</doc>
3241      </member>
3242      <member name="uint"
3243              value="3"
3244              c:identifier="GSK_GL_UNIFORM_TYPE_UINT"
3245              glib:nick="uint"
3246              glib:name="GSK_GL_UNIFORM_TYPE_UINT">
3247        <doc xml:space="preserve"
3248             filename="gsk/gskenums.h"
3249             line="441">A GLSL uint / guint32 uniform</doc>
3250      </member>
3251      <member name="bool"
3252              value="4"
3253              c:identifier="GSK_GL_UNIFORM_TYPE_BOOL"
3254              glib:nick="bool"
3255              glib:name="GSK_GL_UNIFORM_TYPE_BOOL">
3256        <doc xml:space="preserve"
3257             filename="gsk/gskenums.h"
3258             line="442">A GLSL bool / gboolean uniform</doc>
3259      </member>
3260      <member name="vec2"
3261              value="5"
3262              c:identifier="GSK_GL_UNIFORM_TYPE_VEC2"
3263              glib:nick="vec2"
3264              glib:name="GSK_GL_UNIFORM_TYPE_VEC2">
3265        <doc xml:space="preserve"
3266             filename="gsk/gskenums.h"
3267             line="443">A GLSL vec2 / graphene_vec2_t uniform</doc>
3268      </member>
3269      <member name="vec3"
3270              value="6"
3271              c:identifier="GSK_GL_UNIFORM_TYPE_VEC3"
3272              glib:nick="vec3"
3273              glib:name="GSK_GL_UNIFORM_TYPE_VEC3">
3274        <doc xml:space="preserve"
3275             filename="gsk/gskenums.h"
3276             line="444">A GLSL vec3 / graphene_vec3_t uniform</doc>
3277      </member>
3278      <member name="vec4"
3279              value="7"
3280              c:identifier="GSK_GL_UNIFORM_TYPE_VEC4"
3281              glib:nick="vec4"
3282              glib:name="GSK_GL_UNIFORM_TYPE_VEC4">
3283        <doc xml:space="preserve"
3284             filename="gsk/gskenums.h"
3285             line="445">A GLSL vec4 / graphene_vec4_t uniform</doc>
3286      </member>
3287    </enumeration>
3288    <function-macro name="GL_RENDERER"
3289                    c:identifier="GSK_GL_RENDERER"
3290                    introspectable="0">
3291      <source-position filename="gsk/gpu/gskglrenderer.h" line="27"/>
3292      <parameters>
3293        <parameter name="obj">
3294        </parameter>
3295      </parameters>
3296    </function-macro>
3297    <function-macro name="GL_RENDERER_CLASS"
3298                    c:identifier="GSK_GL_RENDERER_CLASS"
3299                    introspectable="0">
3300      <source-position filename="gsk/gpu/gskglrenderer.h" line="29"/>
3301      <parameters>
3302        <parameter name="klass">
3303        </parameter>
3304      </parameters>
3305    </function-macro>
3306    <function-macro name="GL_RENDERER_GET_CLASS"
3307                    c:identifier="GSK_GL_RENDERER_GET_CLASS"
3308                    introspectable="0">
3309      <source-position filename="gsk/gpu/gskglrenderer.h" line="31"/>
3310      <parameters>
3311        <parameter name="obj">
3312        </parameter>
3313      </parameters>
3314    </function-macro>
3315    <function-macro name="IS_BROADWAY_RENDERER"
3316                    c:identifier="GSK_IS_BROADWAY_RENDERER"
3317                    introspectable="0">
3318      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
3319                       line="32"/>
3320      <parameters>
3321        <parameter name="obj">
3322        </parameter>
3323      </parameters>
3324    </function-macro>
3325    <function-macro name="IS_BROADWAY_RENDERER_CLASS"
3326                    c:identifier="GSK_IS_BROADWAY_RENDERER_CLASS"
3327                    introspectable="0">
3328      <source-position filename="gsk/broadway/gskbroadwayrenderer.h"
3329                       line="34"/>
3330      <parameters>
3331        <parameter name="klass">
3332        </parameter>
3333      </parameters>
3334    </function-macro>
3335    <function-macro name="IS_CAIRO_RENDERER"
3336                    c:identifier="GSK_IS_CAIRO_RENDERER"
3337                    introspectable="0">
3338      <source-position filename="gsk/gskcairorenderer.h" line="35"/>
3339      <parameters>
3340        <parameter name="obj">
3341        </parameter>
3342      </parameters>
3343    </function-macro>
3344    <function-macro name="IS_CAIRO_RENDERER_CLASS"
3345                    c:identifier="GSK_IS_CAIRO_RENDERER_CLASS"
3346                    introspectable="0">
3347      <source-position filename="gsk/gskcairorenderer.h" line="37"/>
3348      <parameters>
3349        <parameter name="klass">
3350        </parameter>
3351      </parameters>
3352    </function-macro>
3353    <function-macro name="IS_GL_RENDERER"
3354                    c:identifier="GSK_IS_GL_RENDERER"
3355                    introspectable="0">
3356      <source-position filename="gsk/gpu/gskglrenderer.h" line="28"/>
3357      <parameters>
3358        <parameter name="obj">
3359        </parameter>
3360      </parameters>
3361    </function-macro>
3362    <function-macro name="IS_GL_RENDERER_CLASS"
3363                    c:identifier="GSK_IS_GL_RENDERER_CLASS"
3364                    introspectable="0">
3365      <source-position filename="gsk/gpu/gskglrenderer.h" line="30"/>
3366      <parameters>
3367        <parameter name="klass">
3368        </parameter>
3369      </parameters>
3370    </function-macro>
3371    <function-macro name="IS_RENDERER"
3372                    c:identifier="GSK_IS_RENDERER"
3373                    introspectable="0">
3374      <source-position filename="gsk/gskrenderer.h" line="33"/>
3375      <parameters>
3376        <parameter name="obj">
3377        </parameter>
3378      </parameters>
3379    </function-macro>
3380    <function-macro name="IS_RENDER_NODE"
3381                    c:identifier="GSK_IS_RENDER_NODE"
3382                    introspectable="0">
3383      <source-position filename="gsk/gskrendernode.h" line="34"/>
3384      <parameters>
3385        <parameter name="obj">
3386        </parameter>
3387      </parameters>
3388    </function-macro>
3389    <function-macro name="IS_VULKAN_RENDERER"
3390                    c:identifier="GSK_IS_VULKAN_RENDERER"
3391                    introspectable="0">
3392      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="28"/>
3393      <parameters>
3394        <parameter name="obj">
3395        </parameter>
3396      </parameters>
3397    </function-macro>
3398    <function-macro name="IS_VULKAN_RENDERER_CLASS"
3399                    c:identifier="GSK_IS_VULKAN_RENDERER_CLASS"
3400                    introspectable="0">
3401      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="30"/>
3402      <parameters>
3403        <parameter name="klass">
3404        </parameter>
3405      </parameters>
3406    </function-macro>
3407    <class name="InsetShadowNode"
3408           c:symbol-prefix="inset_shadow_node"
3409           c:type="GskInsetShadowNode"
3410           parent="RenderNode"
3411           glib:type-name="GskInsetShadowNode"
3412           glib:get-type="gsk_inset_shadow_node_get_type"
3413           glib:fundamental="1">
3414      <doc xml:space="preserve"
3415           filename="gsk/gskrendernodeimpl.c"
3416           line="3050">A render node for an inset shadow.</doc>
3417      <constructor name="new" c:identifier="gsk_inset_shadow_node_new">
3418        <doc xml:space="preserve"
3419             filename="gsk/gskrendernodeimpl.c"
3420             line="3489">Creates a `GskRenderNode` that will render an inset shadow
3421into the box given by @outline.</doc>
3422        <source-position filename="gsk/gskrendernode.h" line="352"/>
3423        <return-value transfer-ownership="full">
3424          <doc xml:space="preserve"
3425               filename="gsk/gskrendernodeimpl.c"
3426               line="3501">A new `GskRenderNode`</doc>
3427          <type name="InsetShadowNode" c:type="GskRenderNode*"/>
3428        </return-value>
3429        <parameters>
3430          <parameter name="outline" transfer-ownership="none">
3431            <doc xml:space="preserve"
3432                 filename="gsk/gskrendernodeimpl.c"
3433                 line="3491">outline of the region containing the shadow</doc>
3434            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
3435          </parameter>
3436          <parameter name="color" transfer-ownership="none">
3437            <doc xml:space="preserve"
3438                 filename="gsk/gskrendernodeimpl.c"
3439                 line="3492">color of the shadow</doc>
3440            <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
3441          </parameter>
3442          <parameter name="dx" transfer-ownership="none">
3443            <doc xml:space="preserve"
3444                 filename="gsk/gskrendernodeimpl.c"
3445                 line="3493">horizontal offset of shadow</doc>
3446            <type name="gfloat" c:type="float"/>
3447          </parameter>
3448          <parameter name="dy" transfer-ownership="none">
3449            <doc xml:space="preserve"
3450                 filename="gsk/gskrendernodeimpl.c"
3451                 line="3494">vertical offset of shadow</doc>
3452            <type name="gfloat" c:type="float"/>
3453          </parameter>
3454          <parameter name="spread" transfer-ownership="none">
3455            <doc xml:space="preserve"
3456                 filename="gsk/gskrendernodeimpl.c"
3457                 line="3495">how far the shadow spreads towards the inside</doc>
3458            <type name="gfloat" c:type="float"/>
3459          </parameter>
3460          <parameter name="blur_radius" transfer-ownership="none">
3461            <doc xml:space="preserve"
3462                 filename="gsk/gskrendernodeimpl.c"
3463                 line="3496">how much blur to apply to the shadow</doc>
3464            <type name="gfloat" c:type="float"/>
3465          </parameter>
3466        </parameters>
3467      </constructor>
3468      <method name="get_blur_radius"
3469              c:identifier="gsk_inset_shadow_node_get_blur_radius">
3470        <doc xml:space="preserve"
3471             filename="gsk/gskrendernodeimpl.c"
3472             line="3683">Retrieves the blur radius to apply to the shadow.</doc>
3473        <source-position filename="gsk/gskrendernode.h" line="369"/>
3474        <return-value transfer-ownership="none">
3475          <doc xml:space="preserve"
3476               filename="gsk/gskrendernodeimpl.c"
3477               line="3689">the blur radius, in pixels</doc>
3478          <type name="gfloat" c:type="float"/>
3479        </return-value>
3480        <parameters>
3481          <instance-parameter name="node" transfer-ownership="none">
3482            <doc xml:space="preserve"
3483                 filename="gsk/gskrendernodeimpl.c"
3484                 line="3685">a `GskRenderNode` for an inset shadow</doc>
3485            <type name="InsetShadowNode" c:type="const GskRenderNode*"/>
3486          </instance-parameter>
3487        </parameters>
3488      </method>
3489      <method name="get_color" c:identifier="gsk_inset_shadow_node_get_color">
3490        <doc xml:space="preserve"
3491             filename="gsk/gskrendernodeimpl.c"
3492             line="3583">Retrieves the color of the inset shadow.
3493
3494The value returned by this function will not be correct
3495if the render node was created for a non-sRGB color.</doc>
3496        <source-position filename="gsk/gskrendernode.h" line="361"/>
3497        <return-value transfer-ownership="none">
3498          <doc xml:space="preserve"
3499               filename="gsk/gskrendernodeimpl.c"
3500               line="3592">the color of the shadow</doc>
3501          <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
3502        </return-value>
3503        <parameters>
3504          <instance-parameter name="node" transfer-ownership="none">
3505            <doc xml:space="preserve"
3506                 filename="gsk/gskrendernodeimpl.c"
3507                 line="3585">a `GskRenderNode` for an inset shadow</doc>
3508            <type name="InsetShadowNode" c:type="const GskRenderNode*"/>
3509          </instance-parameter>
3510        </parameters>
3511      </method>
3512      <method name="get_dx" c:identifier="gsk_inset_shadow_node_get_dx">
3513        <doc xml:space="preserve"
3514             filename="gsk/gskrendernodeimpl.c"
3515             line="3619">Retrieves the horizontal offset of the inset shadow.</doc>
3516        <source-position filename="gsk/gskrendernode.h" line="363"/>
3517        <return-value transfer-ownership="none">
3518          <doc xml:space="preserve"
3519               filename="gsk/gskrendernodeimpl.c"
3520               line="3625">an offset, in pixels</doc>
3521          <type name="gfloat" c:type="float"/>
3522        </return-value>
3523        <parameters>
3524          <instance-parameter name="node" transfer-ownership="none">
3525            <doc xml:space="preserve"
3526                 filename="gsk/gskrendernodeimpl.c"
3527                 line="3621">a `GskRenderNode` for an inset shadow</doc>
3528            <type name="InsetShadowNode" c:type="const GskRenderNode*"/>
3529          </instance-parameter>
3530        </parameters>
3531      </method>
3532      <method name="get_dy" c:identifier="gsk_inset_shadow_node_get_dy">
3533        <doc xml:space="preserve"
3534             filename="gsk/gskrendernodeimpl.c"
3535             line="3635">Retrieves the vertical offset of the inset shadow.</doc>
3536        <source-position filename="gsk/gskrendernode.h" line="365"/>
3537        <return-value transfer-ownership="none">
3538          <doc xml:space="preserve"
3539               filename="gsk/gskrendernodeimpl.c"
3540               line="3641">an offset, in pixels</doc>
3541          <type name="gfloat" c:type="float"/>
3542        </return-value>
3543        <parameters>
3544          <instance-parameter name="node" transfer-ownership="none">
3545            <doc xml:space="preserve"
3546                 filename="gsk/gskrendernodeimpl.c"
3547                 line="3637">a `GskRenderNode` for an inset shadow</doc>
3548            <type name="InsetShadowNode" c:type="const GskRenderNode*"/>
3549          </instance-parameter>
3550        </parameters>
3551      </method>
3552      <method name="get_outline"
3553              c:identifier="gsk_inset_shadow_node_get_outline">
3554        <doc xml:space="preserve"
3555             filename="gsk/gskrendernodeimpl.c"
3556             line="3567">Retrieves the outline rectangle of the inset shadow.</doc>
3557        <source-position filename="gsk/gskrendernode.h" line="359"/>
3558        <return-value transfer-ownership="none">
3559          <doc xml:space="preserve"
3560               filename="gsk/gskrendernodeimpl.c"
3561               line="3573">a rounded rectangle</doc>
3562          <type name="RoundedRect" c:type="const GskRoundedRect*"/>
3563        </return-value>
3564        <parameters>
3565          <instance-parameter name="node" transfer-ownership="none">
3566            <doc xml:space="preserve"
3567                 filename="gsk/gskrendernodeimpl.c"
3568                 line="3569">a `GskRenderNode` for an inset shadow</doc>
3569            <type name="InsetShadowNode" c:type="const GskRenderNode*"/>
3570          </instance-parameter>
3571        </parameters>
3572      </method>
3573      <method name="get_spread"
3574              c:identifier="gsk_inset_shadow_node_get_spread">
3575        <doc xml:space="preserve"
3576             filename="gsk/gskrendernodeimpl.c"
3577             line="3667">Retrieves how much the shadow spreads inwards.</doc>
3578        <source-position filename="gsk/gskrendernode.h" line="367"/>
3579        <return-value transfer-ownership="none">
3580          <doc xml:space="preserve"
3581               filename="gsk/gskrendernodeimpl.c"
3582               line="3673">the size of the shadow, in pixels</doc>
3583          <type name="gfloat" c:type="float"/>
3584        </return-value>
3585        <parameters>
3586          <instance-parameter name="node" transfer-ownership="none">
3587            <doc xml:space="preserve"
3588                 filename="gsk/gskrendernodeimpl.c"
3589                 line="3669">a `GskRenderNode` for an inset shadow</doc>
3590            <type name="InsetShadowNode" c:type="const GskRenderNode*"/>
3591          </instance-parameter>
3592        </parameters>
3593      </method>
3594    </class>
3595    <enumeration name="LineCap"
3596                 version="4.14"
3597                 glib:type-name="GskLineCap"
3598                 glib:get-type="gsk_line_cap_get_type"
3599                 c:type="GskLineCap">
3600      <doc xml:space="preserve"
3601           filename="gsk/gskenums.h"
3602           line="256">Specifies how to render the start and end points of contours or
3603dashes when stroking.
3604
3605The default line cap style is `GSK_LINE_CAP_BUTT`.
3606
3607New entries may be added in future versions.
3608
3609&lt;figure&gt;
3610  &lt;picture&gt;
3611    &lt;source srcset="caps-dark.png" media="(prefers-color-scheme: dark)"&gt;
3612    &lt;img alt="Line Cap Styles" src="caps-light.png"&gt;
3613  &lt;/picture&gt;
3614  &lt;figcaption&gt;GSK_LINE_CAP_BUTT, GSK_LINE_CAP_ROUND, GSK_LINE_CAP_SQUARE&lt;/figcaption&gt;
3615&lt;/figure&gt;</doc>
3616      <member name="butt"
3617              value="0"
3618              c:identifier="GSK_LINE_CAP_BUTT"
3619              glib:nick="butt"
3620              glib:name="GSK_LINE_CAP_BUTT">
3621        <doc xml:space="preserve"
3622             filename="gsk/gskenums.h"
3623             line="258">Start and stop the line exactly at the start
3624  and end point</doc>
3625      </member>
3626      <member name="round"
3627              value="1"
3628              c:identifier="GSK_LINE_CAP_ROUND"
3629              glib:nick="round"
3630              glib:name="GSK_LINE_CAP_ROUND">
3631        <doc xml:space="preserve"
3632             filename="gsk/gskenums.h"
3633             line="260">Use a round ending, the center of the circle
3634  is the start or end point</doc>
3635      </member>
3636      <member name="square"
3637              value="2"
3638              c:identifier="GSK_LINE_CAP_SQUARE"
3639              glib:nick="square"
3640              glib:name="GSK_LINE_CAP_SQUARE">
3641        <doc xml:space="preserve"
3642             filename="gsk/gskenums.h"
3643             line="262">use squared ending, the center of the square
3644  is the start or end point</doc>
3645      </member>
3646    </enumeration>
3647    <enumeration name="LineJoin"
3648                 version="4.14"
3649                 glib:type-name="GskLineJoin"
3650                 glib:get-type="gsk_line_join_get_type"
3651                 c:type="GskLineJoin">
3652      <doc xml:space="preserve"
3653           filename="gsk/gskenums.h"
3654           line="288">Specifies how to render the junction of two lines when stroking.
3655
3656The default line join style is `GSK_LINE_JOIN_MITER`.
3657
3658New entries may be added in future versions.
3659
3660&lt;figure&gt;
3661  &lt;picture&gt;
3662    &lt;source srcset="join-dark.png" media="(prefers-color-scheme: dark)"&gt;
3663    &lt;img alt="Line Join Styles" src="join-light.png"&gt;
3664  &lt;/picture&gt;
3665  &lt;figcaption&gt;GSK_LINE_JOINT_MITER, GSK_LINE_JOINT_ROUND, GSK_LINE_JOIN_BEVEL&lt;/figcaption&gt;
3666&lt;/figure&gt;</doc>
3667      <member name="miter"
3668              value="0"
3669              c:identifier="GSK_LINE_JOIN_MITER"
3670              glib:nick="miter"
3671              glib:name="GSK_LINE_JOIN_MITER">
3672        <doc xml:space="preserve"
3673             filename="gsk/gskenums.h"
3674             line="290">Use a sharp angled corner</doc>
3675      </member>
3676      <member name="round"
3677              value="1"
3678              c:identifier="GSK_LINE_JOIN_ROUND"
3679              glib:nick="round"
3680              glib:name="GSK_LINE_JOIN_ROUND">
3681        <doc xml:space="preserve"
3682             filename="gsk/gskenums.h"
3683             line="291">Use a round join, the center of the circle is
3684  the join point</doc>
3685      </member>
3686      <member name="bevel"
3687              value="2"
3688              c:identifier="GSK_LINE_JOIN_BEVEL"
3689              glib:nick="bevel"
3690              glib:name="GSK_LINE_JOIN_BEVEL">
3691        <doc xml:space="preserve"
3692             filename="gsk/gskenums.h"
3693             line="293">use a cut-off join, the join is cut off at half
3694  the line width from the joint point</doc>
3695      </member>
3696    </enumeration>
3697    <class name="LinearGradientNode"
3698           c:symbol-prefix="linear_gradient_node"
3699           c:type="GskLinearGradientNode"
3700           parent="RenderNode"
3701           glib:type-name="GskLinearGradientNode"
3702           glib:get-type="gsk_linear_gradient_node_get_type"
3703           glib:fundamental="1">
3704      <doc xml:space="preserve"
3705           filename="gsk/gskrendernodeimpl.c"
3706           line="432">A render node for a linear gradient.</doc>
3707      <constructor name="new" c:identifier="gsk_linear_gradient_node_new">
3708        <doc xml:space="preserve"
3709             filename="gsk/gskrendernodeimpl.c"
3710             line="725">Creates a `GskRenderNode` that will create a linear gradient from the given
3711points and color stops, and render that into the area given by @bounds.</doc>
3712        <source-position filename="gsk/gskrendernode.h" line="253"/>
3713        <return-value transfer-ownership="full">
3714          <doc xml:space="preserve"
3715               filename="gsk/gskrendernodeimpl.c"
3716               line="739">A new `GskRenderNode`</doc>
3717          <type name="LinearGradientNode" c:type="GskRenderNode*"/>
3718        </return-value>
3719        <parameters>
3720          <parameter name="bounds" transfer-ownership="none">
3721            <doc xml:space="preserve"
3722                 filename="gsk/gskrendernodeimpl.c"
3723                 line="727">the rectangle to render the linear gradient into</doc>
3724            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
3725          </parameter>
3726          <parameter name="start" transfer-ownership="none">
3727            <doc xml:space="preserve"
3728                 filename="gsk/gskrendernodeimpl.c"
3729                 line="728">the point at which the linear gradient will begin</doc>
3730            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
3731          </parameter>
3732          <parameter name="end" transfer-ownership="none">
3733            <doc xml:space="preserve"
3734                 filename="gsk/gskrendernodeimpl.c"
3735                 line="729">the point at which the linear gradient will finish</doc>
3736            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
3737          </parameter>
3738          <parameter name="color_stops" transfer-ownership="none">
3739            <doc xml:space="preserve"
3740                 filename="gsk/gskrendernodeimpl.c"
3741                 line="730">a pointer to an array of
3742  `GskColorStop` defining the gradient. The offsets of all color stops
3743  must be increasing. The first stop's offset must be &gt;= 0 and the last
3744  stop's offset must be &lt;= 1.</doc>
3745            <array length="4" zero-terminated="0" c:type="const GskColorStop*">
3746              <type name="ColorStop" c:type="GskColorStop"/>
3747            </array>
3748          </parameter>
3749          <parameter name="n_color_stops" transfer-ownership="none">
3750            <doc xml:space="preserve"
3751                 filename="gsk/gskrendernodeimpl.c"
3752                 line="734">the number of elements in @color_stops</doc>
3753            <type name="gsize" c:type="gsize"/>
3754          </parameter>
3755        </parameters>
3756      </constructor>
3757      <method name="get_color_stops"
3758              c:identifier="gsk_linear_gradient_node_get_color_stops">
3759        <doc xml:space="preserve"
3760             filename="gsk/gskrendernodeimpl.c"
3761             line="1007">Retrieves the color stops in the gradient.</doc>
3762        <source-position filename="gsk/gskrendernode.h" line="265"/>
3763        <return-value transfer-ownership="none">
3764          <doc xml:space="preserve"
3765               filename="gsk/gskrendernodeimpl.c"
3766               line="1014">the color stops in the gradient</doc>
3767          <array length="0" zero-terminated="0" c:type="const GskColorStop*">
3768            <type name="ColorStop" c:type="GskColorStop"/>
3769          </array>
3770        </return-value>
3771        <parameters>
3772          <instance-parameter name="node" transfer-ownership="none">
3773            <doc xml:space="preserve"
3774                 filename="gsk/gskrendernodeimpl.c"
3775                 line="1009">a `GskRenderNode` for a linear gradient</doc>
3776            <type name="LinearGradientNode" c:type="const GskRenderNode*"/>
3777          </instance-parameter>
3778          <parameter name="n_stops"
3779                     direction="out"
3780                     caller-allocates="0"
3781                     transfer-ownership="full"
3782                     optional="1"
3783                     allow-none="1">
3784            <doc xml:space="preserve"
3785                 filename="gsk/gskrendernodeimpl.c"
3786                 line="1010">the number of color stops in the returned array</doc>
3787            <type name="gsize" c:type="gsize*"/>
3788          </parameter>
3789        </parameters>
3790      </method>
3791      <method name="get_end" c:identifier="gsk_linear_gradient_node_get_end">
3792        <doc xml:space="preserve"
3793             filename="gsk/gskrendernodeimpl.c"
3794             line="975">Retrieves the final point of the linear gradient.</doc>
3795        <source-position filename="gsk/gskrendernode.h" line="261"/>
3796        <return-value transfer-ownership="none">
3797          <doc xml:space="preserve"
3798               filename="gsk/gskrendernodeimpl.c"
3799               line="981">the final point</doc>
3800          <type name="Graphene.Point" c:type="const graphene_point_t*"/>
3801        </return-value>
3802        <parameters>
3803          <instance-parameter name="node" transfer-ownership="none">
3804            <doc xml:space="preserve"
3805                 filename="gsk/gskrendernodeimpl.c"
3806                 line="977">a `GskRenderNode` for a linear gradient</doc>
3807            <type name="LinearGradientNode" c:type="const GskRenderNode*"/>
3808          </instance-parameter>
3809        </parameters>
3810      </method>
3811      <method name="get_n_color_stops"
3812              c:identifier="gsk_linear_gradient_node_get_n_color_stops">
3813        <doc xml:space="preserve"
3814             filename="gsk/gskrendernodeimpl.c"
3815             line="991">Retrieves the number of color stops in the gradient.</doc>
3816        <source-position filename="gsk/gskrendernode.h" line="263"/>
3817        <return-value transfer-ownership="none">
3818          <doc xml:space="preserve"
3819               filename="gsk/gskrendernodeimpl.c"
3820               line="997">the number of color stops</doc>
3821          <type name="gsize" c:type="gsize"/>
3822        </return-value>
3823        <parameters>
3824          <instance-parameter name="node" transfer-ownership="none">
3825            <doc xml:space="preserve"
3826                 filename="gsk/gskrendernodeimpl.c"
3827                 line="993">a `GskRenderNode` for a linear gradient</doc>
3828            <type name="LinearGradientNode" c:type="const GskRenderNode*"/>
3829          </instance-parameter>
3830        </parameters>
3831      </method>
3832      <method name="get_start"
3833              c:identifier="gsk_linear_gradient_node_get_start">
3834        <doc xml:space="preserve"
3835             filename="gsk/gskrendernodeimpl.c"
3836             line="959">Retrieves the initial point of the linear gradient.</doc>
3837        <source-position filename="gsk/gskrendernode.h" line="259"/>
3838        <return-value transfer-ownership="none">
3839          <doc xml:space="preserve"
3840               filename="gsk/gskrendernodeimpl.c"
3841               line="965">the initial point</doc>
3842          <type name="Graphene.Point" c:type="const graphene_point_t*"/>
3843        </return-value>
3844        <parameters>
3845          <instance-parameter name="node" transfer-ownership="none">
3846            <doc xml:space="preserve"
3847                 filename="gsk/gskrendernodeimpl.c"
3848                 line="961">a `GskRenderNode` for a linear gradient</doc>
3849            <type name="LinearGradientNode" c:type="const GskRenderNode*"/>
3850          </instance-parameter>
3851        </parameters>
3852      </method>
3853    </class>
3854    <enumeration name="MaskMode"
3855                 version="4.10"
3856                 glib:type-name="GskMaskMode"
3857                 glib:get-type="gsk_mask_mode_get_type"
3858                 c:type="GskMaskMode">
3859      <doc xml:space="preserve"
3860           filename="gsk/gskenums.h"
3861           line="466">The mask modes available for mask nodes.</doc>
3862      <member name="alpha"
3863              value="0"
3864              c:identifier="GSK_MASK_MODE_ALPHA"
3865              glib:nick="alpha"
3866              glib:name="GSK_MASK_MODE_ALPHA">
3867        <doc xml:space="preserve"
3868             filename="gsk/gskenums.h"
3869             line="468">Use the alpha channel of the mask</doc>
3870      </member>
3871      <member name="inverted_alpha"
3872              value="1"
3873              c:identifier="GSK_MASK_MODE_INVERTED_ALPHA"
3874              glib:nick="inverted-alpha"
3875              glib:name="GSK_MASK_MODE_INVERTED_ALPHA">
3876        <doc xml:space="preserve"
3877             filename="gsk/gskenums.h"
3878             line="469">Use the inverted alpha channel of the mask</doc>
3879      </member>
3880      <member name="luminance"
3881              value="2"
3882              c:identifier="GSK_MASK_MODE_LUMINANCE"
3883              glib:nick="luminance"
3884              glib:name="GSK_MASK_MODE_LUMINANCE">
3885        <doc xml:space="preserve"
3886             filename="gsk/gskenums.h"
3887             line="470">Use the luminance of the mask,
3888    multiplied by mask alpha</doc>
3889      </member>
3890      <member name="inverted_luminance"
3891              value="3"
3892              c:identifier="GSK_MASK_MODE_INVERTED_LUMINANCE"
3893              glib:nick="inverted-luminance"
3894              glib:name="GSK_MASK_MODE_INVERTED_LUMINANCE">
3895        <doc xml:space="preserve"
3896             filename="gsk/gskenums.h"
3897             line="472">Use the inverted luminance of the mask,
3898    multiplied by mask alpha</doc>
3899      </member>
3900    </enumeration>
3901    <class name="MaskNode"
3902           c:symbol-prefix="mask_node"
3903           c:type="GskMaskNode"
3904           version="4.10"
3905           parent="RenderNode"
3906           glib:type-name="GskMaskNode"
3907           glib:get-type="gsk_mask_node_get_type"
3908           glib:fundamental="1">
3909      <doc xml:space="preserve"
3910           filename="gsk/gskrendernodeimpl.c"
3911           line="7770">A render node masking one child node with another.</doc>
3912      <constructor name="new" c:identifier="gsk_mask_node_new" version="4.10">
3913        <doc xml:space="preserve"
3914             filename="gsk/gskrendernodeimpl.c"
3915             line="7927">Creates a `GskRenderNode` that will mask a given node by another.
3916
3917The @mask_mode determines how the 'mask values' are derived from
3918the colors of the @mask. Applying the mask consists of multiplying
3919the 'mask value' with the alpha of the source.</doc>
3920        <source-position filename="gsk/gskrendernode.h" line="578"/>
3921        <return-value transfer-ownership="full">
3922          <doc xml:space="preserve"
3923               filename="gsk/gskrendernodeimpl.c"
3924               line="7939">A new `GskRenderNode`</doc>
3925          <type name="MaskNode" c:type="GskRenderNode*"/>
3926        </return-value>
3927        <parameters>
3928          <parameter name="source" transfer-ownership="none">
3929            <doc xml:space="preserve"
3930                 filename="gsk/gskrendernodeimpl.c"
3931                 line="7929">The source node to be drawn</doc>
3932            <type name="RenderNode" c:type="GskRenderNode*"/>
3933          </parameter>
3934          <parameter name="mask" transfer-ownership="none">
3935            <doc xml:space="preserve"
3936                 filename="gsk/gskrendernodeimpl.c"
3937                 line="7930">The node to be used as mask</doc>
3938            <type name="RenderNode" c:type="GskRenderNode*"/>
3939          </parameter>
3940          <parameter name="mask_mode" transfer-ownership="none">
3941            <doc xml:space="preserve"
3942                 filename="gsk/gskrendernodeimpl.c"
3943                 line="7931">The mask mode to use</doc>
3944            <type name="MaskMode" c:type="GskMaskMode"/>
3945          </parameter>
3946        </parameters>
3947      </constructor>
3948      <method name="get_mask"
3949              c:identifier="gsk_mask_node_get_mask"
3950              version="4.10">
3951        <doc xml:space="preserve"
3952             filename="gsk/gskrendernodeimpl.c"
3953             line="7990">Retrieves the mask `GskRenderNode` child of the @node.</doc>
3954        <source-position filename="gsk/gskrendernode.h" line="584"/>
3955        <return-value transfer-ownership="none">
3956          <doc xml:space="preserve"
3957               filename="gsk/gskrendernodeimpl.c"
3958               line="7996">the mask child node</doc>
3959          <type name="RenderNode" c:type="GskRenderNode*"/>
3960        </return-value>
3961        <parameters>
3962          <instance-parameter name="node" transfer-ownership="none">
3963            <doc xml:space="preserve"
3964                 filename="gsk/gskrendernodeimpl.c"
3965                 line="7992">a mask `GskRenderNode`</doc>
3966            <type name="MaskNode" c:type="const GskRenderNode*"/>
3967          </instance-parameter>
3968        </parameters>
3969      </method>
3970      <method name="get_mask_mode"
3971              c:identifier="gsk_mask_node_get_mask_mode"
3972              version="4.10">
3973        <doc xml:space="preserve"
3974             filename="gsk/gskrendernodeimpl.c"
3975             line="8010">Retrieves the mask mode used by @node.</doc>
3976        <source-position filename="gsk/gskrendernode.h" line="586"/>
3977        <return-value transfer-ownership="none">
3978          <doc xml:space="preserve"
3979               filename="gsk/gskrendernodeimpl.c"
3980               line="8016">the mask mode</doc>
3981          <type name="MaskMode" c:type="GskMaskMode"/>
3982        </return-value>
3983        <parameters>
3984          <instance-parameter name="node" transfer-ownership="none">
3985            <doc xml:space="preserve"
3986                 filename="gsk/gskrendernodeimpl.c"
3987                 line="8012">a blending `GskRenderNode`</doc>
3988            <type name="MaskNode" c:type="const GskRenderNode*"/>
3989          </instance-parameter>
3990        </parameters>
3991      </method>
3992      <method name="get_source"
3993              c:identifier="gsk_mask_node_get_source"
3994              version="4.10">
3995        <doc xml:space="preserve"
3996             filename="gsk/gskrendernodeimpl.c"
3997             line="7970">Retrieves the source `GskRenderNode` child of the @node.</doc>
3998        <source-position filename="gsk/gskrendernode.h" line="582"/>
3999        <return-value transfer-ownership="none">
4000          <doc xml:space="preserve"
4001               filename="gsk/gskrendernodeimpl.c"
4002               line="7976">the source child node</doc>
4003          <type name="RenderNode" c:type="GskRenderNode*"/>
4004        </return-value>
4005        <parameters>
4006          <instance-parameter name="node" transfer-ownership="none">
4007            <doc xml:space="preserve"
4008                 filename="gsk/gskrendernodeimpl.c"
4009                 line="7972">a mask `GskRenderNode`</doc>
4010            <type name="MaskNode" c:type="const GskRenderNode*"/>
4011          </instance-parameter>
4012        </parameters>
4013      </method>
4014    </class>
4015    <class name="NglRenderer"
4016           c:symbol-prefix="ngl_renderer"
4017           parent="Renderer"
4018           glib:type-name="GskNglRenderer"
4019           glib:get-type="gsk_ngl_renderer_get_type">
4020      <doc xml:space="preserve"
4021           filename="gsk/gpu/gskglrenderer.c"
4022           line="168">A GL based renderer.
4023
4024See [class@Gsk.Renderer].</doc>
4025      <constructor name="new"
4026                   c:identifier="gsk_ngl_renderer_new"
4027                   deprecated="1"
4028                   deprecated-version="4.18">
4029        <doc xml:space="preserve"
4030             filename="gsk/gpu/gskglrenderer.c"
4031             line="209">Same as gsk_gl_renderer_new().</doc>
4032        <doc-deprecated xml:space="preserve">Use gsk_gl_renderer_new()</doc-deprecated>
4033        <source-position filename="gsk/gpu/gskglrenderer.h" line="46"/>
4034        <return-value transfer-ownership="full">
4035          <doc xml:space="preserve"
4036               filename="gsk/gpu/gskglrenderer.c"
4037               line="214">a GL renderer</doc>
4038          <type name="Renderer" c:type="GskRenderer*"/>
4039        </return-value>
4040      </constructor>
4041    </class>
4042    <class name="OpacityNode"
4043           c:symbol-prefix="opacity_node"
4044           c:type="GskOpacityNode"
4045           parent="RenderNode"
4046           glib:type-name="GskOpacityNode"
4047           glib:get-type="gsk_opacity_node_get_type"
4048           glib:fundamental="1">
4049      <doc xml:space="preserve"
4050           filename="gsk/gskrendernodeimpl.c"
4051           line="4864">A render node controlling the opacity of its single child node.</doc>
4052      <constructor name="new" c:identifier="gsk_opacity_node_new">
4053        <doc xml:space="preserve"
4054             filename="gsk/gskrendernodeimpl.c"
4055             line="4937">Creates a `GskRenderNode` that will drawn the @child with reduced
4056@opacity.</doc>
4057        <source-position filename="gsk/gskrendernode.h" line="426"/>
4058        <return-value transfer-ownership="full">
4059          <doc xml:space="preserve"
4060               filename="gsk/gskrendernodeimpl.c"
4061               line="4945">A new `GskRenderNode`</doc>
4062          <type name="OpacityNode" c:type="GskRenderNode*"/>
4063        </return-value>
4064        <parameters>
4065          <parameter name="child" transfer-ownership="none">
4066            <doc xml:space="preserve"
4067                 filename="gsk/gskrendernodeimpl.c"
4068                 line="4939">The node to draw</doc>
4069            <type name="RenderNode" c:type="GskRenderNode*"/>
4070          </parameter>
4071          <parameter name="opacity" transfer-ownership="none">
4072            <doc xml:space="preserve"
4073                 filename="gsk/gskrendernodeimpl.c"
4074                 line="4940">The opacity to apply</doc>
4075            <type name="gfloat" c:type="float"/>
4076          </parameter>
4077        </parameters>
4078      </constructor>
4079      <method name="get_child" c:identifier="gsk_opacity_node_get_child">
4080        <doc xml:space="preserve"
4081             filename="gsk/gskrendernodeimpl.c"
4082             line="4970">Gets the child node that is getting opacityed by the given @node.</doc>
4083        <source-position filename="gsk/gskrendernode.h" line="429"/>
4084        <return-value transfer-ownership="none">
4085          <doc xml:space="preserve"
4086               filename="gsk/gskrendernodeimpl.c"
4087               line="4976">The child that is getting opacityed</doc>
4088          <type name="RenderNode" c:type="GskRenderNode*"/>
4089        </return-value>
4090        <parameters>
4091          <instance-parameter name="node" transfer-ownership="none">
4092            <doc xml:space="preserve"
4093                 filename="gsk/gskrendernodeimpl.c"
4094                 line="4972">a `GskRenderNode` for an opacity</doc>
4095            <type name="OpacityNode" c:type="const GskRenderNode*"/>
4096          </instance-parameter>
4097        </parameters>
4098      </method>
4099      <method name="get_opacity" c:identifier="gsk_opacity_node_get_opacity">
4100        <doc xml:space="preserve"
4101             filename="gsk/gskrendernodeimpl.c"
4102             line="4986">Gets the transparency factor for an opacity node.</doc>
4103        <source-position filename="gsk/gskrendernode.h" line="431"/>
4104        <return-value transfer-ownership="none">
4105          <doc xml:space="preserve"
4106               filename="gsk/gskrendernodeimpl.c"
4107               line="4992">the opacity factor</doc>
4108          <type name="gfloat" c:type="float"/>
4109        </return-value>
4110        <parameters>
4111          <instance-parameter name="node" transfer-ownership="none">
4112            <doc xml:space="preserve"
4113                 filename="gsk/gskrendernodeimpl.c"
4114                 line="4988">a `GskRenderNode` for an opacity</doc>
4115            <type name="OpacityNode" c:type="const GskRenderNode*"/>
4116          </instance-parameter>
4117        </parameters>
4118      </method>
4119    </class>
4120    <class name="OutsetShadowNode"
4121           c:symbol-prefix="outset_shadow_node"
4122           c:type="GskOutsetShadowNode"
4123           parent="RenderNode"
4124           glib:type-name="GskOutsetShadowNode"
4125           glib:get-type="gsk_outset_shadow_node_get_type"
4126           glib:fundamental="1">
4127      <doc xml:space="preserve"
4128           filename="gsk/gskrendernodeimpl.c"
4129           line="3702">A render node for an outset shadow.</doc>
4130      <constructor name="new" c:identifier="gsk_outset_shadow_node_new">
4131        <doc xml:space="preserve"
4132             filename="gsk/gskrendernodeimpl.c"
4133             line="3884">Creates a `GskRenderNode` that will render an outset shadow
4134around the box given by @outline.</doc>
4135        <source-position filename="gsk/gskrendernode.h" line="374"/>
4136        <return-value transfer-ownership="full">
4137          <doc xml:space="preserve"
4138               filename="gsk/gskrendernodeimpl.c"
4139               line="3896">A new `GskRenderNode`</doc>
4140          <type name="OutsetShadowNode" c:type="GskRenderNode*"/>
4141        </return-value>
4142        <parameters>
4143          <parameter name="outline" transfer-ownership="none">
4144            <doc xml:space="preserve"
4145                 filename="gsk/gskrendernodeimpl.c"
4146                 line="3886">outline of the region surrounded by shadow</doc>
4147            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
4148          </parameter>
4149          <parameter name="color" transfer-ownership="none">
4150            <doc xml:space="preserve"
4151                 filename="gsk/gskrendernodeimpl.c"
4152                 line="3887">color of the shadow</doc>
4153            <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
4154          </parameter>
4155          <parameter name="dx" transfer-ownership="none">
4156            <doc xml:space="preserve"
4157                 filename="gsk/gskrendernodeimpl.c"
4158                 line="3888">horizontal offset of shadow</doc>
4159            <type name="gfloat" c:type="float"/>
4160          </parameter>
4161          <parameter name="dy" transfer-ownership="none">
4162            <doc xml:space="preserve"
4163                 filename="gsk/gskrendernodeimpl.c"
4164                 line="3889">vertical offset of shadow</doc>
4165            <type name="gfloat" c:type="float"/>
4166          </parameter>
4167          <parameter name="spread" transfer-ownership="none">
4168            <doc xml:space="preserve"
4169                 filename="gsk/gskrendernodeimpl.c"
4170                 line="3890">how far the shadow spreads towards the inside</doc>
4171            <type name="gfloat" c:type="float"/>
4172          </parameter>
4173          <parameter name="blur_radius" transfer-ownership="none">
4174            <doc xml:space="preserve"
4175                 filename="gsk/gskrendernodeimpl.c"
4176                 line="3891">how much blur to apply to the shadow</doc>
4177            <type name="gfloat" c:type="float"/>
4178          </parameter>
4179        </parameters>
4180      </constructor>
4181      <method name="get_blur_radius"
4182              c:identifier="gsk_outset_shadow_node_get_blur_radius">
4183        <doc xml:space="preserve"
4184             filename="gsk/gskrendernodeimpl.c"
4185             line="4084">Retrieves the blur radius of the shadow.</doc>
4186        <source-position filename="gsk/gskrendernode.h" line="391"/>
4187        <return-value transfer-ownership="none">
4188          <doc xml:space="preserve"
4189               filename="gsk/gskrendernodeimpl.c"
4190               line="4090">the blur radius, in pixels</doc>
4191          <type name="gfloat" c:type="float"/>
4192        </return-value>
4193        <parameters>
4194          <instance-parameter name="node" transfer-ownership="none">
4195            <doc xml:space="preserve"
4196                 filename="gsk/gskrendernodeimpl.c"
4197                 line="4086">a `GskRenderNode` for an outset shadow</doc>
4198            <type name="OutsetShadowNode" c:type="const GskRenderNode*"/>
4199          </instance-parameter>
4200        </parameters>
4201      </method>
4202      <method name="get_color" c:identifier="gsk_outset_shadow_node_get_color">
4203        <doc xml:space="preserve"
4204             filename="gsk/gskrendernodeimpl.c"
4205             line="3984">Retrieves the color of the outset shadow.
4206
4207The value returned by this function will not be correct
4208if the render node was created for a non-sRGB color.</doc>
4209        <source-position filename="gsk/gskrendernode.h" line="383"/>
4210        <return-value transfer-ownership="none">
4211          <doc xml:space="preserve"
4212               filename="gsk/gskrendernodeimpl.c"
4213               line="3993">a color</doc>
4214          <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
4215        </return-value>
4216        <parameters>
4217          <instance-parameter name="node" transfer-ownership="none">
4218            <doc xml:space="preserve"
4219                 filename="gsk/gskrendernodeimpl.c"
4220                 line="3986">a `GskRenderNode` for an outset shadow</doc>
4221            <type name="OutsetShadowNode" c:type="const GskRenderNode*"/>
4222          </instance-parameter>
4223        </parameters>
4224      </method>
4225      <method name="get_dx" c:identifier="gsk_outset_shadow_node_get_dx">
4226        <doc xml:space="preserve"
4227             filename="gsk/gskrendernodeimpl.c"
4228             line="4020">Retrieves the horizontal offset of the outset shadow.</doc>
4229        <source-position filename="gsk/gskrendernode.h" line="385"/>
4230        <return-value transfer-ownership="none">
4231          <doc xml:space="preserve"
4232               filename="gsk/gskrendernodeimpl.c"
4233               line="4026">an offset, in pixels</doc>
4234          <type name="gfloat" c:type="float"/>
4235        </return-value>
4236        <parameters>
4237          <instance-parameter name="node" transfer-ownership="none">
4238            <doc xml:space="preserve"
4239                 filename="gsk/gskrendernodeimpl.c"
4240                 line="4022">a `GskRenderNode` for an outset shadow</doc>
4241            <type name="OutsetShadowNode" c:type="const GskRenderNode*"/>
4242          </instance-parameter>
4243        </parameters>
4244      </method>
4245      <method name="get_dy" c:identifier="gsk_outset_shadow_node_get_dy">
4246        <doc xml:space="preserve"
4247             filename="gsk/gskrendernodeimpl.c"
4248             line="4036">Retrieves the vertical offset of the outset shadow.</doc>
4249        <source-position filename="gsk/gskrendernode.h" line="387"/>
4250        <return-value transfer-ownership="none">
4251          <doc xml:space="preserve"
4252               filename="gsk/gskrendernodeimpl.c"
4253               line="4042">an offset, in pixels</doc>
4254          <type name="gfloat" c:type="float"/>
4255        </return-value>
4256        <parameters>
4257          <instance-parameter name="node" transfer-ownership="none">
4258            <doc xml:space="preserve"
4259                 filename="gsk/gskrendernodeimpl.c"
4260                 line="4038">a `GskRenderNode` for an outset shadow</doc>
4261            <type name="OutsetShadowNode" c:type="const GskRenderNode*"/>
4262          </instance-parameter>
4263        </parameters>
4264      </method>
4265      <method name="get_outline"
4266              c:identifier="gsk_outset_shadow_node_get_outline">
4267        <doc xml:space="preserve"
4268             filename="gsk/gskrendernodeimpl.c"
4269             line="3968">Retrieves the outline rectangle of the outset shadow.</doc>
4270        <source-position filename="gsk/gskrendernode.h" line="381"/>
4271        <return-value transfer-ownership="none">
4272          <doc xml:space="preserve"
4273               filename="gsk/gskrendernodeimpl.c"
4274               line="3974">a rounded rectangle</doc>
4275          <type name="RoundedRect" c:type="const GskRoundedRect*"/>
4276        </return-value>
4277        <parameters>
4278          <instance-parameter name="node" transfer-ownership="none">
4279            <doc xml:space="preserve"
4280                 filename="gsk/gskrendernodeimpl.c"
4281                 line="3970">a `GskRenderNode` for an outset shadow</doc>
4282            <type name="OutsetShadowNode" c:type="const GskRenderNode*"/>
4283          </instance-parameter>
4284        </parameters>
4285      </method>
4286      <method name="get_spread"
4287              c:identifier="gsk_outset_shadow_node_get_spread">
4288        <doc xml:space="preserve"
4289             filename="gsk/gskrendernodeimpl.c"
4290             line="4068">Retrieves how much the shadow spreads outwards.</doc>
4291        <source-position filename="gsk/gskrendernode.h" line="389"/>
4292        <return-value transfer-ownership="none">
4293          <doc xml:space="preserve"
4294               filename="gsk/gskrendernodeimpl.c"
4295               line="4074">the size of the shadow, in pixels</doc>
4296          <type name="gfloat" c:type="float"/>
4297        </return-value>
4298        <parameters>
4299          <instance-parameter name="node" transfer-ownership="none">
4300            <doc xml:space="preserve"
4301                 filename="gsk/gskrendernodeimpl.c"
4302                 line="4070">a `GskRenderNode` for an outset shadow</doc>
4303            <type name="OutsetShadowNode" c:type="const GskRenderNode*"/>
4304          </instance-parameter>
4305        </parameters>
4306      </method>
4307    </class>
4308    <callback name="ParseErrorFunc" c:type="GskParseErrorFunc">
4309      <doc xml:space="preserve"
4310           filename="gsk/gskrendernode.h"
4311           line="92">Type of callback that is called when an error occurs
4312during node deserialization.</doc>
4313      <source-position filename="gsk/gskrendernode.h" line="102"/>
4314      <return-value transfer-ownership="none">
4315        <type name="none" c:type="void"/>
4316      </return-value>
4317      <parameters>
4318        <parameter name="start" transfer-ownership="none">
4319          <doc xml:space="preserve"
4320               filename="gsk/gskrendernode.h"
4321               line="94">start of the error location</doc>
4322          <type name="ParseLocation" c:type="const GskParseLocation*"/>
4323        </parameter>
4324        <parameter name="end" transfer-ownership="none">
4325          <doc xml:space="preserve"
4326               filename="gsk/gskrendernode.h"
4327               line="95">end of the error location</doc>
4328          <type name="ParseLocation" c:type="const GskParseLocation*"/>
4329        </parameter>
4330        <parameter name="error" transfer-ownership="none">
4331          <doc xml:space="preserve"
4332               filename="gsk/gskrendernode.h"
4333               line="96">the error</doc>
4334          <type name="GLib.Error" c:type="const GError*"/>
4335        </parameter>
4336        <parameter name="user_data"
4337                   transfer-ownership="none"
4338                   nullable="1"
4339                   allow-none="1"
4340                   closure="3">
4341          <doc xml:space="preserve"
4342               filename="gsk/gskrendernode.h"
4343               line="97">user data</doc>
4344          <type name="gpointer" c:type="gpointer"/>
4345        </parameter>
4346      </parameters>
4347    </callback>
4348    <record name="ParseLocation" c:type="GskParseLocation">
4349      <doc xml:space="preserve"
4350           filename="gsk/gskrendernode.h"
4351           line="73">A location in a parse buffer.</doc>
4352      <source-position filename="gsk/gskrendernode.h" line="90"/>
4353      <field name="bytes" writable="1">
4354        <doc xml:space="preserve"
4355             filename="gsk/gskrendernode.h"
4356             line="75">the offset of the location in the parse buffer, as bytes</doc>
4357        <type name="gsize" c:type="gsize"/>
4358      </field>
4359      <field name="chars" writable="1">
4360        <doc xml:space="preserve"
4361             filename="gsk/gskrendernode.h"
4362             line="76">the offset of the location in the parse buffer, as characters</doc>
4363        <type name="gsize" c:type="gsize"/>
4364      </field>
4365      <field name="lines" writable="1">
4366        <doc xml:space="preserve"
4367             filename="gsk/gskrendernode.h"
4368             line="77">the line of the location in the parse buffer</doc>
4369        <type name="gsize" c:type="gsize"/>
4370      </field>
4371      <field name="line_bytes" writable="1">
4372        <doc xml:space="preserve"
4373             filename="gsk/gskrendernode.h"
4374             line="78">the position in the line, as bytes</doc>
4375        <type name="gsize" c:type="gsize"/>
4376      </field>
4377      <field name="line_chars" writable="1">
4378        <doc xml:space="preserve"
4379             filename="gsk/gskrendernode.h"
4380             line="79">the position in the line, as characters</doc>
4381        <type name="gsize" c:type="gsize"/>
4382      </field>
4383    </record>
4384    <record name="Path"
4385            c:type="GskPath"
4386            opaque="1"
4387            version="4.14"
4388            glib:type-name="GskPath"
4389            glib:get-type="gsk_path_get_type"
4390            c:symbol-prefix="path">
4391      <doc xml:space="preserve"
4392           filename="gsk/gskpath.c"
4393           line="29">Describes lines and curves that are more complex than simple rectangles.
4394
4395Paths can used for rendering (filling or stroking) and for animations
4396(e.g. as trajectories).
4397
4398`GskPath` is an immutable, opaque, reference-counted struct.
4399After creation, you cannot change the types it represents. Instead,
4400new `GskPath` objects have to be created. The [struct@Gsk.PathBuilder]
4401structure is meant to help in this endeavor.
4402
4403Conceptually, a path consists of zero or more contours (continuous, connected
4404curves), each of which may or may not be closed. Contours are typically
4405constructed from Bézier segments.
4406
4407&lt;picture&gt;
4408  &lt;source srcset="path-dark.png" media="(prefers-color-scheme: dark)"&gt;
4409  &lt;img alt="A Path" src="path-light.png"&gt;
4410&lt;/picture&gt;</doc>
4411      <source-position filename="gsk/gsktypes.h" line="28"/>
4412      <method name="foreach" c:identifier="gsk_path_foreach" version="4.14">
4413        <doc xml:space="preserve"
4414             filename="gsk/gskpath.c"
4415             line="609">Calls @func for every operation of the path.
4416
4417Note that this may only approximate @self, because paths can contain
4418optimizations for various specialized contours, and depending on the
4419@flags, the path may be decomposed into simpler curves than the ones
4420that it contained originally.
4421
4422This function serves two purposes:
4423
4424- When the @flags allow everything, it provides access to the raw,
4425  unmodified data of the path.
4426- When the @flags disallow certain operations, it provides
4427  an approximation of the path using just the allowed operations.</doc>
4428        <source-position filename="gsk/gskpath.h" line="141"/>
4429        <return-value transfer-ownership="none">
4430          <doc xml:space="preserve"
4431               filename="gsk/gskpath.c"
4432               line="630">false if @func returned false, true otherwise.</doc>
4433          <type name="gboolean" c:type="gboolean"/>
4434        </return-value>
4435        <parameters>
4436          <instance-parameter name="self" transfer-ownership="none">
4437            <doc xml:space="preserve"
4438                 filename="gsk/gskpath.c"
4439                 line="611">a path</doc>
4440            <type name="Path" c:type="GskPath*"/>
4441          </instance-parameter>
4442          <parameter name="flags" transfer-ownership="none">
4443            <doc xml:space="preserve"
4444                 filename="gsk/gskpath.c"
4445                 line="612">flags to pass to the foreach function</doc>
4446            <type name="PathForeachFlags" c:type="GskPathForeachFlags"/>
4447          </parameter>
4448          <parameter name="func"
4449                     transfer-ownership="none"
4450                     scope="call"
4451                     closure="2">
4452            <doc xml:space="preserve"
4453                 filename="gsk/gskpath.c"
4454                 line="613">the function to call for operations</doc>
4455            <type name="PathForeachFunc" c:type="GskPathForeachFunc"/>
4456          </parameter>
4457          <parameter name="user_data"
4458                     transfer-ownership="none"
4459                     nullable="1"
4460                     allow-none="1">
4461            <doc xml:space="preserve"
4462                 filename="gsk/gskpath.c"
4463                 line="614">user data passed to @func</doc>
4464            <type name="gpointer" c:type="gpointer"/>
4465          </parameter>
4466        </parameters>
4467      </method>
4468      <method name="foreach_intersection"
4469              c:identifier="gsk_path_foreach_intersection"
4470              version="4.20">
4471        <doc xml:space="preserve"
4472             filename="gsk/gskpathintersect.c"
4473             line="696">Finds intersections between two paths.
4474
4475This function finds intersections between @path1 and @path2,
4476and calls @func for each of them, in increasing order for @path1.
4477
4478If @path2 is not provided or equal to @path1, the function finds
4479non-trivial self-intersections of @path1.
4480
4481When segments of the paths coincide, the callback is called once
4482for the start of the segment, with @GSK_PATH_INTERSECTION_START, and
4483once for the end of the segment, with @GSK_PATH_INTERSECTION_END.
4484Note that other intersections may occur between the start and end
4485of such a segment.
4486
4487If @func returns `FALSE`, the iteration is stopped.</doc>
4488        <source-position filename="gsk/gskpath.h" line="192"/>
4489        <return-value transfer-ownership="none">
4490          <doc xml:space="preserve"
4491               filename="gsk/gskpathintersect.c"
4492               line="719">`FALSE` if @func returned FALSE`, `TRUE` otherwise.</doc>
4493          <type name="gboolean" c:type="gboolean"/>
4494        </return-value>
4495        <parameters>
4496          <instance-parameter name="path1" transfer-ownership="none">
4497            <doc xml:space="preserve"
4498                 filename="gsk/gskpathintersect.c"
4499                 line="698">the first path</doc>
4500            <type name="Path" c:type="GskPath*"/>
4501          </instance-parameter>
4502          <parameter name="path2"
4503                     transfer-ownership="none"
4504                     nullable="1"
4505                     allow-none="1">
4506            <doc xml:space="preserve"
4507                 filename="gsk/gskpathintersect.c"
4508                 line="699">the second path</doc>
4509            <type name="Path" c:type="GskPath*"/>
4510          </parameter>
4511          <parameter name="func"
4512                     transfer-ownership="none"
4513                     scope="call"
4514                     closure="2">
4515            <doc xml:space="preserve"
4516                 filename="gsk/gskpathintersect.c"
4517                 line="700">the function to call for intersections</doc>
4518            <type name="PathIntersectionFunc"
4519                  c:type="GskPathIntersectionFunc"/>
4520          </parameter>
4521          <parameter name="user_data"
4522                     transfer-ownership="none"
4523                     nullable="1"
4524                     allow-none="1">
4525            <doc xml:space="preserve"
4526                 filename="gsk/gskpathintersect.c"
4527                 line="701">user data passed to @func</doc>
4528            <type name="gpointer" c:type="gpointer"/>
4529          </parameter>
4530        </parameters>
4531      </method>
4532      <method name="get_bounds"
4533              c:identifier="gsk_path_get_bounds"
4534              version="4.14">
4535        <doc xml:space="preserve"
4536             filename="gsk/gskpath.c"
4537             line="346">Computes the bounds of the given path.
4538
4539The returned bounds may be larger than necessary, because this
4540function aims to be fast, not accurate. The bounds are guaranteed
4541to contain the path.
4542
4543It is possible that the returned rectangle has 0 width and/or height.
4544This can happen when the path only describes a point or an
4545axis-aligned line.
4546
4547If the path is empty, false is returned and @bounds are set to
4548graphene_rect_zero(). This is different from the case where the path
4549is a single point at the origin, where the @bounds will also be set to
4550the zero rectangle but true will be returned.</doc>
4551        <source-position filename="gsk/gskpath.h" line="113"/>
4552        <return-value transfer-ownership="none">
4553          <doc xml:space="preserve"
4554               filename="gsk/gskpath.c"
4555               line="366">true if the path has bounds, false if the path is known
4556  to be empty and have no bounds</doc>
4557          <type name="gboolean" c:type="gboolean"/>
4558        </return-value>
4559        <parameters>
4560          <instance-parameter name="self" transfer-ownership="none">
4561            <doc xml:space="preserve"
4562                 filename="gsk/gskpath.c"
4563                 line="348">a path</doc>
4564            <type name="Path" c:type="GskPath*"/>
4565          </instance-parameter>
4566          <parameter name="bounds"
4567                     direction="out"
4568                     caller-allocates="1"
4569                     transfer-ownership="none">
4570            <doc xml:space="preserve"
4571                 filename="gsk/gskpath.c"
4572                 line="349">return location for the bounds</doc>
4573            <type name="Graphene.Rect" c:type="graphene_rect_t*"/>
4574          </parameter>
4575        </parameters>
4576      </method>
4577      <method name="get_closest_point"
4578              c:identifier="gsk_path_get_closest_point"
4579              version="4.14">
4580        <doc xml:space="preserve"
4581             filename="gsk/gskpath.c"
4582             line="553">Computes the closest point on the path to the given point.
4583
4584If there is no point closer than the given threshold,
4585false is returned.</doc>
4586        <source-position filename="gsk/gskpath.h" line="134"/>
4587        <return-value transfer-ownership="none">
4588          <doc xml:space="preserve"
4589               filename="gsk/gskpath.c"
4590               line="566">true if @point was set to the closest point
4591  on @self, false if no point is closer than @threshold</doc>
4592          <type name="gboolean" c:type="gboolean"/>
4593        </return-value>
4594        <parameters>
4595          <instance-parameter name="self" transfer-ownership="none">
4596            <doc xml:space="preserve"
4597                 filename="gsk/gskpath.c"
4598                 line="555">a path</doc>
4599            <type name="Path" c:type="GskPath*"/>
4600          </instance-parameter>
4601          <parameter name="point" transfer-ownership="none">
4602            <doc xml:space="preserve"
4603                 filename="gsk/gskpath.c"
4604                 line="556">the point</doc>
4605            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
4606          </parameter>
4607          <parameter name="threshold" transfer-ownership="none">
4608            <doc xml:space="preserve"
4609                 filename="gsk/gskpath.c"
4610                 line="557">maximum allowed distance</doc>
4611            <type name="gfloat" c:type="float"/>
4612          </parameter>
4613          <parameter name="result"
4614                     direction="out"
4615                     caller-allocates="1"
4616                     transfer-ownership="none">
4617            <doc xml:space="preserve"
4618                 filename="gsk/gskpath.c"
4619                 line="558">return location for the closest point</doc>
4620            <type name="PathPoint" c:type="GskPathPoint*"/>
4621          </parameter>
4622          <parameter name="distance"
4623                     direction="out"
4624                     caller-allocates="0"
4625                     transfer-ownership="full"
4626                     optional="1"
4627                     allow-none="1">
4628            <doc xml:space="preserve"
4629                 filename="gsk/gskpath.c"
4630                 line="559">return location for the distance</doc>
4631            <type name="gfloat" c:type="float*"/>
4632          </parameter>
4633        </parameters>
4634      </method>
4635      <method name="get_end_point"
4636              c:identifier="gsk_path_get_end_point"
4637              version="4.14">
4638        <doc xml:space="preserve"
4639             filename="gsk/gskpath.c"
4640             line="522">Gets the end point of the path.
4641
4642An empty path has no points, so false
4643is returned in this case.</doc>
4644        <source-position filename="gsk/gskpath.h" line="130"/>
4645        <return-value transfer-ownership="none">
4646          <doc xml:space="preserve"
4647               filename="gsk/gskpath.c"
4648               line="532">true if @result was filled</doc>
4649          <type name="gboolean" c:type="gboolean"/>
4650        </return-value>
4651        <parameters>
4652          <instance-parameter name="self" transfer-ownership="none">
4653            <doc xml:space="preserve"
4654                 filename="gsk/gskpath.c"
4655                 line="524">a path</doc>
4656            <type name="Path" c:type="GskPath*"/>
4657          </instance-parameter>
4658          <parameter name="result"
4659                     direction="out"
4660                     caller-allocates="1"
4661                     transfer-ownership="none">
4662            <doc xml:space="preserve"
4663                 filename="gsk/gskpath.c"
4664                 line="525">return location for point</doc>
4665            <type name="PathPoint" c:type="GskPathPoint*"/>
4666          </parameter>
4667        </parameters>
4668      </method>
4669      <method name="get_start_point"
4670              c:identifier="gsk_path_get_start_point"
4671              version="4.14">
4672        <doc xml:space="preserve"
4673             filename="gsk/gskpath.c"
4674             line="487">Gets the start point of the path.
4675
4676An empty path has no points, so false
4677is returned in this case.</doc>
4678        <source-position filename="gsk/gskpath.h" line="127"/>
4679        <return-value transfer-ownership="none">
4680          <doc xml:space="preserve"
4681               filename="gsk/gskpath.c"
4682               line="497">true if @result was filled</doc>
4683          <type name="gboolean" c:type="gboolean"/>
4684        </return-value>
4685        <parameters>
4686          <instance-parameter name="self" transfer-ownership="none">
4687            <doc xml:space="preserve"
4688                 filename="gsk/gskpath.c"
4689                 line="489">a path</doc>
4690            <type name="Path" c:type="GskPath*"/>
4691          </instance-parameter>
4692          <parameter name="result"
4693                     direction="out"
4694                     caller-allocates="1"
4695                     transfer-ownership="none">
4696            <doc xml:space="preserve"
4697                 filename="gsk/gskpath.c"
4698                 line="490">return location for point</doc>
4699            <type name="PathPoint" c:type="GskPathPoint*"/>
4700          </parameter>
4701        </parameters>
4702      </method>
4703      <method name="get_stroke_bounds"
4704              c:identifier="gsk_path_get_stroke_bounds"
4705              version="4.14">
4706        <doc xml:space="preserve"
4707             filename="gsk/gskpath.c"
4708             line="401">Computes the bounds for stroking the given path with the
4709given parameters.
4710
4711The returned bounds may be larger than necessary, because this
4712function aims to be fast, not accurate. The bounds are guaranteed
4713to contain the area affected by the stroke, including protrusions
4714like miters.</doc>
4715        <source-position filename="gsk/gskpath.h" line="117"/>
4716        <return-value transfer-ownership="none">
4717          <doc xml:space="preserve"
4718               filename="gsk/gskpath.c"
4719               line="415">true if the path has bounds, false if the path is known
4720  to be empty and have no bounds.</doc>
4721          <type name="gboolean" c:type="gboolean"/>
4722        </return-value>
4723        <parameters>
4724          <instance-parameter name="self" transfer-ownership="none">
4725            <doc xml:space="preserve"
4726                 filename="gsk/gskpath.c"
4727                 line="403">a path</doc>
4728            <type name="Path" c:type="GskPath*"/>
4729          </instance-parameter>
4730          <parameter name="stroke" transfer-ownership="none">
4731            <doc xml:space="preserve"
4732                 filename="gsk/gskpath.c"
4733                 line="404">stroke parameters</doc>
4734            <type name="Stroke" c:type="const GskStroke*"/>
4735          </parameter>
4736          <parameter name="bounds"
4737                     direction="out"
4738                     caller-allocates="1"
4739                     transfer-ownership="none">
4740            <doc xml:space="preserve"
4741                 filename="gsk/gskpath.c"
4742                 line="405">the bounds to fill in</doc>
4743            <type name="Graphene.Rect" c:type="graphene_rect_t*"/>
4744          </parameter>
4745        </parameters>
4746      </method>
4747      <method name="in_fill" c:identifier="gsk_path_in_fill" version="4.14">
4748        <doc xml:space="preserve"
4749             filename="gsk/gskpath.c"
4750             line="451">Returns whether a point is inside the fill area of a path.
4751
4752Note that this function assumes that filling a contour
4753implicitly closes it.</doc>
4754        <source-position filename="gsk/gskpath.h" line="122"/>
4755        <return-value transfer-ownership="none">
4756          <doc xml:space="preserve"
4757               filename="gsk/gskpath.c"
4758               line="462">true if @point is inside</doc>
4759          <type name="gboolean" c:type="gboolean"/>
4760        </return-value>
4761        <parameters>
4762          <instance-parameter name="self" transfer-ownership="none">
4763            <doc xml:space="preserve"
4764                 filename="gsk/gskpath.c"
4765                 line="453">a path</doc>
4766            <type name="Path" c:type="GskPath*"/>
4767          </instance-parameter>
4768          <parameter name="point" transfer-ownership="none">
4769            <doc xml:space="preserve"
4770                 filename="gsk/gskpath.c"
4771                 line="454">the point to test</doc>
4772            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
4773          </parameter>
4774          <parameter name="fill_rule" transfer-ownership="none">
4775            <doc xml:space="preserve"
4776                 filename="gsk/gskpath.c"
4777                 line="455">the fill rule to follow</doc>
4778            <type name="FillRule" c:type="GskFillRule"/>
4779          </parameter>
4780        </parameters>
4781      </method>
4782      <method name="is_closed"
4783              c:identifier="gsk_path_is_closed"
4784              version="4.14">
4785        <doc xml:space="preserve"
4786             filename="gsk/gskpath.c"
4787             line="324">Returns if the path represents a single closed contour.</doc>
4788        <source-position filename="gsk/gskpath.h" line="110"/>
4789        <return-value transfer-ownership="none">
4790          <doc xml:space="preserve"
4791               filename="gsk/gskpath.c"
4792               line="330">true if the path is closed</doc>
4793          <type name="gboolean" c:type="gboolean"/>
4794        </return-value>
4795        <parameters>
4796          <instance-parameter name="self" transfer-ownership="none">
4797            <doc xml:space="preserve"
4798                 filename="gsk/gskpath.c"
4799                 line="326">a path</doc>
4800            <type name="Path" c:type="GskPath*"/>
4801          </instance-parameter>
4802        </parameters>
4803      </method>
4804      <method name="is_empty" c:identifier="gsk_path_is_empty" version="4.14">
4805        <doc xml:space="preserve"
4806             filename="gsk/gskpath.c"
4807             line="306">Checks if the path is empty, i.e. contains no lines or curves.</doc>
4808        <source-position filename="gsk/gskpath.h" line="107"/>
4809        <return-value transfer-ownership="none">
4810          <doc xml:space="preserve"
4811               filename="gsk/gskpath.c"
4812               line="312">true if the path is empty</doc>
4813          <type name="gboolean" c:type="gboolean"/>
4814        </return-value>
4815        <parameters>
4816          <instance-parameter name="self" transfer-ownership="none">
4817            <doc xml:space="preserve"
4818                 filename="gsk/gskpath.c"
4819                 line="308">a path</doc>
4820            <type name="Path" c:type="GskPath*"/>
4821          </instance-parameter>
4822        </parameters>
4823      </method>
4824      <method name="print" c:identifier="gsk_path_print" version="4.14">
4825        <doc xml:space="preserve"
4826             filename="gsk/gskpath.c"
4827             line="182">Converts the path into a human-readable representation.
4828
4829The string is compatible with (a superset of)
4830[SVG path syntax](https://www.w3.org/TR/SVG11/paths.html#PathData),
4831see [func@Gsk.Path.parse] for a summary of the syntax.</doc>
4832        <source-position filename="gsk/gskpath.h" line="94"/>
4833        <return-value transfer-ownership="none">
4834          <type name="none" c:type="void"/>
4835        </return-value>
4836        <parameters>
4837          <instance-parameter name="self" transfer-ownership="none">
4838            <doc xml:space="preserve"
4839                 filename="gsk/gskpath.c"
4840                 line="184">a path</doc>
4841            <type name="Path" c:type="GskPath*"/>
4842          </instance-parameter>
4843          <parameter name="string" transfer-ownership="none">
4844            <doc xml:space="preserve"
4845                 filename="gsk/gskpath.c"
4846                 line="185">the string to print into</doc>
4847            <type name="GLib.String" c:type="GString*"/>
4848          </parameter>
4849        </parameters>
4850      </method>
4851      <method name="ref" c:identifier="gsk_path_ref" version="4.14">
4852        <doc xml:space="preserve"
4853             filename="gsk/gskpath.c"
4854             line="139">Increases the reference count of a path by one.</doc>
4855        <source-position filename="gsk/gskpath.h" line="89"/>
4856        <return-value transfer-ownership="full">
4857          <doc xml:space="preserve"
4858               filename="gsk/gskpath.c"
4859               line="145">the passed in `GskPath`</doc>
4860          <type name="Path" c:type="GskPath*"/>
4861        </return-value>
4862        <parameters>
4863          <instance-parameter name="self" transfer-ownership="none">
4864            <doc xml:space="preserve"
4865                 filename="gsk/gskpath.c"
4866                 line="141">a path</doc>
4867            <type name="Path" c:type="GskPath*"/>
4868          </instance-parameter>
4869        </parameters>
4870      </method>
4871      <method name="to_cairo" c:identifier="gsk_path_to_cairo" version="4.14">
4872        <doc xml:space="preserve"
4873             filename="gsk/gskpath.c"
4874             line="277">Appends the path to a cairo context for drawing with Cairo.
4875
4876This may cause some suboptimal conversions to be performed as
4877Cairo does not support all features of `GskPath`.
4878
4879This function does not clear the existing Cairo path. Call
4880cairo_new_path() if you want this.</doc>
4881        <source-position filename="gsk/gskpath.h" line="103"/>
4882        <return-value transfer-ownership="none">
4883          <type name="none" c:type="void"/>
4884        </return-value>
4885        <parameters>
4886          <instance-parameter name="self" transfer-ownership="none">
4887            <doc xml:space="preserve"
4888                 filename="gsk/gskpath.c"
4889                 line="279">a path</doc>
4890            <type name="Path" c:type="GskPath*"/>
4891          </instance-parameter>
4892          <parameter name="cr" transfer-ownership="none">
4893            <doc xml:space="preserve"
4894                 filename="gsk/gskpath.c"
4895                 line="280">a cairo context</doc>
4896            <type name="cairo.Context" c:type="cairo_t*"/>
4897          </parameter>
4898        </parameters>
4899      </method>
4900      <method name="to_string"
4901              c:identifier="gsk_path_to_string"
4902              version="4.14">
4903        <doc xml:space="preserve"
4904             filename="gsk/gskpath.c"
4905             line="212">Converts the path into a human-readable string.
4906
4907You can use this function in a debugger to get a quick overview
4908of the path.
4909
4910This is a wrapper around [method@Gsk.Path.print], see that function
4911for details.</doc>
4912        <source-position filename="gsk/gskpath.h" line="97"/>
4913        <return-value transfer-ownership="full">
4914          <doc xml:space="preserve"
4915               filename="gsk/gskpath.c"
4916               line="224">a new string for @self</doc>
4917          <type name="utf8" c:type="char*"/>
4918        </return-value>
4919        <parameters>
4920          <instance-parameter name="self" transfer-ownership="none">
4921            <doc xml:space="preserve"
4922                 filename="gsk/gskpath.c"
4923                 line="214">a path</doc>
4924            <type name="Path" c:type="GskPath*"/>
4925          </instance-parameter>
4926        </parameters>
4927      </method>
4928      <method name="unref" c:identifier="gsk_path_unref" version="4.14">
4929        <doc xml:space="preserve"
4930             filename="gsk/gskpath.c"
4931             line="159">Decreases the reference count of a path by one.
4932
4933If the resulting reference count is zero, frees the path.</doc>
4934        <source-position filename="gsk/gskpath.h" line="91"/>
4935        <return-value transfer-ownership="none">
4936          <type name="none" c:type="void"/>
4937        </return-value>
4938        <parameters>
4939          <instance-parameter name="self" transfer-ownership="none">
4940            <doc xml:space="preserve"
4941                 filename="gsk/gskpath.c"
4942                 line="161">a path</doc>
4943            <type name="Path" c:type="GskPath*"/>
4944          </instance-parameter>
4945        </parameters>
4946      </method>
4947      <function name="parse" c:identifier="gsk_path_parse" version="4.14">
4948        <doc xml:space="preserve"
4949             filename="gsk/gskpathparser.c"
4950             line="358">Constructs a path from a serialized form.
4951
4952The string is expected to be in (a superset of)
4953[SVG path syntax](https://www.w3.org/TR/SVG11/paths.html#PathData),
4954as e.g. produced by [method@Gsk.Path.to_string].
4955
4956A high-level summary of the syntax:
4957
4958- `M x y` Move to `(x, y)`
4959- `L x y` Add a line from the current point to `(x, y)`
4960- `Q x1 y1 x2 y2` Add a quadratic Bézier from the current point to `(x2, y2)`, with control point `(x1, y1)`
4961- `C x1 y1 x2 y2 x3 y3` Add a cubic Bézier from the current point to `(x3, y3)`, with control points `(x1, y1)` and `(x2, y2)`
4962- `Z` Close the contour by drawing a line back to the start point
4963- `H x` Add a horizontal line from the current point to the given x value
4964- `V y` Add a vertical line from the current point to the given y value
4965- `T x2 y2` Add a quadratic Bézier, using the reflection of the previous segments' control point as control point
4966- `S x2 y2 x3 y3` Add a cubic Bézier, using the reflection of the previous segments' second control point as first control point
4967- `A rx ry r l s x y` Add an elliptical arc from the current point to `(x, y)` with radii rx and ry. See the SVG documentation for how the other parameters influence the arc.
4968- `O x1 y1 x2 y2 w` Add a rational quadratic Bézier from the current point to `(x2, y2)` with control point `(x1, y1)` and weight `w`.
4969
4970All the commands have lowercase variants that interpret coordinates
4971relative to the current point.
4972
4973The `O` command is an extension that is not supported in SVG.</doc>
4974        <source-position filename="gsk/gskpath.h" line="100"/>
4975        <return-value transfer-ownership="full" nullable="1">
4976          <doc xml:space="preserve"
4977               filename="gsk/gskpathparser.c"
4978               line="387">a new `GskPath`, or `NULL` if @string could not be parsed</doc>
4979          <type name="Path" c:type="GskPath*"/>
4980        </return-value>
4981        <parameters>
4982          <parameter name="string" transfer-ownership="none">
4983            <doc xml:space="preserve"
4984                 filename="gsk/gskpathparser.c"
4985                 line="360">a string</doc>
4986            <type name="utf8" c:type="const char*"/>
4987          </parameter>
4988        </parameters>
4989      </function>
4990    </record>
4991    <record name="PathBuilder"
4992            c:type="GskPathBuilder"
4993            opaque="1"
4994            version="4.14"
4995            glib:type-name="GskPathBuilder"
4996            glib:get-type="gsk_path_builder_get_type"
4997            c:symbol-prefix="path_builder">
4998      <doc xml:space="preserve"
4999           filename="gsk/gskpathbuilder.c"
5000           line="31">Constructs `GskPath` objects.
5001
5002A path is constructed like this:
5003
5004```c
5005GskPath *
5006construct_path (void)
5007{
5008  GskPathBuilder *builder;
5009
5010  builder = gsk_path_builder_new ();
5011
5012  // add contours to the path here
5013
5014  return gsk_path_builder_free_to_path (builder);
5015```
5016
5017Adding contours to the path can be done in two ways.
5018The easiest option is to use the `gsk_path_builder_add_*` group
5019of functions that add predefined contours to the current path,
5020either common shapes like [method@Gsk.PathBuilder.add_circle]
5021or by adding from other paths like [method@Gsk.PathBuilder.add_path].
5022
5023The `gsk_path_builder_add_*` methods always add complete contours,
5024and do not use or modify the current point.
5025
5026The other option is to define each line and curve manually with
5027the `gsk_path_builder_*_to` group of functions. You start with
5028a call to [method@Gsk.PathBuilder.move_to] to set the starting point
5029and then use multiple calls to any of the drawing functions to
5030move the pen along the plane. Once you are done, you can call
5031[method@Gsk.PathBuilder.close] to close the path by connecting it
5032back with a line to the starting point.
5033
5034This is similar to how paths are drawn in Cairo.
5035
5036Note that `GskPathBuilder` will reduce the degree of added Bézier
5037curves as much as possible, to simplify rendering.</doc>
5038      <source-position filename="gsk/gsktypes.h" line="29"/>
5039      <constructor name="new"
5040                   c:identifier="gsk_path_builder_new"
5041                   version="4.14">
5042        <doc xml:space="preserve"
5043             filename="gsk/gskpathbuilder.c"
5044             line="94">Create a new `GskPathBuilder` object.
5045
5046The resulting builder would create an empty `GskPath`.
5047Use addition functions to add types to it.</doc>
5048        <source-position filename="gsk/gskpathbuilder.h" line="38"/>
5049        <return-value transfer-ownership="full">
5050          <doc xml:space="preserve"
5051               filename="gsk/gskpathbuilder.c"
5052               line="102">a new `GskPathBuilder`</doc>
5053          <type name="PathBuilder" c:type="GskPathBuilder*"/>
5054        </return-value>
5055      </constructor>
5056      <method name="add_cairo_path"
5057              c:identifier="gsk_path_builder_add_cairo_path"
5058              version="4.14">
5059        <doc xml:space="preserve"
5060             filename="gsk/gskpathbuilder.c"
5061             line="386">Adds a Cairo path to the builder.
5062
5063You can use cairo_copy_path() to access the path
5064from a Cairo context.</doc>
5065        <source-position filename="gsk/gskpathbuilder.h" line="58"/>
5066        <return-value transfer-ownership="none">
5067          <type name="none" c:type="void"/>
5068        </return-value>
5069        <parameters>
5070          <instance-parameter name="self" transfer-ownership="none">
5071            <doc xml:space="preserve"
5072                 filename="gsk/gskpathbuilder.c"
5073                 line="388">a path builder</doc>
5074            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5075          </instance-parameter>
5076          <parameter name="path" transfer-ownership="none">
5077            <doc xml:space="preserve"
5078                 filename="gsk/gskpathbuilder.c"
5079                 line="389">a path</doc>
5080            <type name="cairo.Path" c:type="const cairo_path_t*"/>
5081          </parameter>
5082        </parameters>
5083      </method>
5084      <method name="add_circle"
5085              c:identifier="gsk_path_builder_add_circle"
5086              version="4.14">
5087        <doc xml:space="preserve"
5088             filename="gsk/gskpathbuilder.c"
5089             line="492">Adds a circle as a new contour.
5090
5091The path is going around the circle in clockwise direction.
5092
5093If @radius is zero, the contour will be a closed point.</doc>
5094        <source-position filename="gsk/gskpathbuilder.h" line="71"/>
5095        <return-value transfer-ownership="none">
5096          <type name="none" c:type="void"/>
5097        </return-value>
5098        <parameters>
5099          <instance-parameter name="self" transfer-ownership="none">
5100            <doc xml:space="preserve"
5101                 filename="gsk/gskpathbuilder.c"
5102                 line="494">a path builder</doc>
5103            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5104          </instance-parameter>
5105          <parameter name="center" transfer-ownership="none">
5106            <doc xml:space="preserve"
5107                 filename="gsk/gskpathbuilder.c"
5108                 line="495">the center of the circle</doc>
5109            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
5110          </parameter>
5111          <parameter name="radius" transfer-ownership="none">
5112            <doc xml:space="preserve"
5113                 filename="gsk/gskpathbuilder.c"
5114                 line="496">the radius of the circle</doc>
5115            <type name="gfloat" c:type="float"/>
5116          </parameter>
5117        </parameters>
5118      </method>
5119      <method name="add_layout"
5120              c:identifier="gsk_path_builder_add_layout"
5121              version="4.14">
5122        <doc xml:space="preserve"
5123             filename="gsk/gskpathbuilder.c"
5124             line="1559">Adds the outlines for the glyphs in @layout to the builder.</doc>
5125        <source-position filename="gsk/gskpathbuilder.h" line="61"/>
5126        <return-value transfer-ownership="none">
5127          <type name="none" c:type="void"/>
5128        </return-value>
5129        <parameters>
5130          <instance-parameter name="self" transfer-ownership="none">
5131            <doc xml:space="preserve"
5132                 filename="gsk/gskpathbuilder.c"
5133                 line="1561">a path builder</doc>
5134            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5135          </instance-parameter>
5136          <parameter name="layout" transfer-ownership="none">
5137            <doc xml:space="preserve"
5138                 filename="gsk/gskpathbuilder.c"
5139                 line="1562">the pango layout to add</doc>
5140            <type name="Pango.Layout" c:type="PangoLayout*"/>
5141          </parameter>
5142        </parameters>
5143      </method>
5144      <method name="add_path"
5145              c:identifier="gsk_path_builder_add_path"
5146              version="4.14">
5147        <doc xml:space="preserve"
5148             filename="gsk/gskpathbuilder.c"
5149             line="338">Appends all of @path to the builder.</doc>
5150        <source-position filename="gsk/gskpathbuilder.h" line="52"/>
5151        <return-value transfer-ownership="none">
5152          <type name="none" c:type="void"/>
5153        </return-value>
5154        <parameters>
5155          <instance-parameter name="self" transfer-ownership="none">
5156            <doc xml:space="preserve"
5157                 filename="gsk/gskpathbuilder.c"
5158                 line="340">a path builder</doc>
5159            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5160          </instance-parameter>
5161          <parameter name="path" transfer-ownership="none">
5162            <doc xml:space="preserve"
5163                 filename="gsk/gskpathbuilder.c"
5164                 line="341">the path to append</doc>
5165            <type name="Path" c:type="GskPath*"/>
5166          </parameter>
5167        </parameters>
5168      </method>
5169      <method name="add_rect"
5170              c:identifier="gsk_path_builder_add_rect"
5171              version="4.14">
5172        <doc xml:space="preserve"
5173             filename="gsk/gskpathbuilder.c"
5174             line="444">Adds a rectangle as a new contour.
5175
5176The path is going around the rectangle in clockwise direction.
5177
5178If the the width or height are 0, the path will be a closed
5179horizontal or vertical line. If both are 0, it'll be a closed dot.</doc>
5180        <source-position filename="gsk/gskpathbuilder.h" line="65"/>
5181        <return-value transfer-ownership="none">
5182          <type name="none" c:type="void"/>
5183        </return-value>
5184        <parameters>
5185          <instance-parameter name="self" transfer-ownership="none">
5186            <doc xml:space="preserve"
5187                 filename="gsk/gskpathbuilder.c"
5188                 line="446">a path builder</doc>
5189            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5190          </instance-parameter>
5191          <parameter name="rect" transfer-ownership="none">
5192            <doc xml:space="preserve"
5193                 filename="gsk/gskpathbuilder.c"
5194                 line="447">the rectangle to create a path for</doc>
5195            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
5196          </parameter>
5197        </parameters>
5198      </method>
5199      <method name="add_reverse_path"
5200              c:identifier="gsk_path_builder_add_reverse_path"
5201              version="4.14">
5202        <doc xml:space="preserve"
5203             filename="gsk/gskpathbuilder.c"
5204             line="362">Appends all of @path to the builder, in reverse order.</doc>
5205        <source-position filename="gsk/gskpathbuilder.h" line="55"/>
5206        <return-value transfer-ownership="none">
5207          <type name="none" c:type="void"/>
5208        </return-value>
5209        <parameters>
5210          <instance-parameter name="self" transfer-ownership="none">
5211            <doc xml:space="preserve"
5212                 filename="gsk/gskpathbuilder.c"
5213                 line="364">a path builder</doc>
5214            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5215          </instance-parameter>
5216          <parameter name="path" transfer-ownership="none">
5217            <doc xml:space="preserve"
5218                 filename="gsk/gskpathbuilder.c"
5219                 line="365">the path to append</doc>
5220            <type name="Path" c:type="GskPath*"/>
5221          </parameter>
5222        </parameters>
5223      </method>
5224      <method name="add_rounded_rect"
5225              c:identifier="gsk_path_builder_add_rounded_rect"
5226              version="4.14">
5227        <doc xml:space="preserve"
5228             filename="gsk/gskpathbuilder.c"
5229             line="471">Adds a rounded rectangle as a new contour.
5230
5231The path is going around the rectangle in clockwise direction.</doc>
5232        <source-position filename="gsk/gskpathbuilder.h" line="68"/>
5233        <return-value transfer-ownership="none">
5234          <type name="none" c:type="void"/>
5235        </return-value>
5236        <parameters>
5237          <instance-parameter name="self" transfer-ownership="none">
5238            <doc xml:space="preserve"
5239                 filename="gsk/gskpathbuilder.c"
5240                 line="473">a path builder</doc>
5241            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5242          </instance-parameter>
5243          <parameter name="rect" transfer-ownership="none">
5244            <doc xml:space="preserve"
5245                 filename="gsk/gskpathbuilder.c"
5246                 line="474">the rounded rect</doc>
5247            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
5248          </parameter>
5249        </parameters>
5250      </method>
5251      <method name="add_segment"
5252              c:identifier="gsk_path_builder_add_segment"
5253              version="4.14">
5254        <doc xml:space="preserve"
5255             filename="gsk/gskpathbuilder.c"
5256             line="1589">Adds a segment of a path to the builder.
5257
5258If @start is equal to or after @end, the path will first add the
5259segment from @start to the end of the path, and then add the segment
5260from the beginning to @end. If the path is closed, these segments
5261will be connected.
5262
5263Note that this method always adds a path with the given start point
5264and end point. To add a closed path, use [method@Gsk.PathBuilder.add_path].</doc>
5265        <source-position filename="gsk/gskpathbuilder.h" line="75"/>
5266        <return-value transfer-ownership="none">
5267          <type name="none" c:type="void"/>
5268        </return-value>
5269        <parameters>
5270          <instance-parameter name="self" transfer-ownership="none">
5271            <doc xml:space="preserve"
5272                 filename="gsk/gskpathbuilder.c"
5273                 line="1591">a path builder</doc>
5274            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5275          </instance-parameter>
5276          <parameter name="path" transfer-ownership="none">
5277            <doc xml:space="preserve"
5278                 filename="gsk/gskpathbuilder.c"
5279                 line="1592">the path to take the segment to</doc>
5280            <type name="Path" c:type="GskPath*"/>
5281          </parameter>
5282          <parameter name="start" transfer-ownership="none">
5283            <doc xml:space="preserve"
5284                 filename="gsk/gskpathbuilder.c"
5285                 line="1593">the point on @path to start at</doc>
5286            <type name="PathPoint" c:type="const GskPathPoint*"/>
5287          </parameter>
5288          <parameter name="end" transfer-ownership="none">
5289            <doc xml:space="preserve"
5290                 filename="gsk/gskpathbuilder.c"
5291                 line="1594">the point on @path to end at</doc>
5292            <type name="PathPoint" c:type="const GskPathPoint*"/>
5293          </parameter>
5294        </parameters>
5295      </method>
5296      <method name="arc_to"
5297              c:identifier="gsk_path_builder_arc_to"
5298              version="4.14">
5299        <doc xml:space="preserve"
5300             filename="gsk/gskpathbuilder.c"
5301             line="1087">Adds an elliptical arc from the current point to @x2, @y2
5302with @x1, @y1 determining the tangent directions.
5303
5304After this, @x2, @y2 will be the new current point.
5305
5306Note: Two points and their tangents do not determine
5307a unique ellipse, so GSK just picks one. If you need more
5308precise control, use [method@Gsk.PathBuilder.conic_to]
5309or [method@Gsk.PathBuilder.svg_arc_to].
5310
5311&lt;picture&gt;
5312  &lt;source srcset="arc-dark.png" media="(prefers-color-scheme: dark)"&gt;
5313  &lt;img alt="Arc To" src="arc-light.png"&gt;
5314&lt;/picture&gt;</doc>
5315        <source-position filename="gsk/gskpathbuilder.h" line="140"/>
5316        <return-value transfer-ownership="none">
5317          <type name="none" c:type="void"/>
5318        </return-value>
5319        <parameters>
5320          <instance-parameter name="self" transfer-ownership="none">
5321            <doc xml:space="preserve"
5322                 filename="gsk/gskpathbuilder.c"
5323                 line="1089">a path builder</doc>
5324            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5325          </instance-parameter>
5326          <parameter name="x1" transfer-ownership="none">
5327            <doc xml:space="preserve"
5328                 filename="gsk/gskpathbuilder.c"
5329                 line="1090">x coordinate of first control point</doc>
5330            <type name="gfloat" c:type="float"/>
5331          </parameter>
5332          <parameter name="y1" transfer-ownership="none">
5333            <doc xml:space="preserve"
5334                 filename="gsk/gskpathbuilder.c"
5335                 line="1091">y coordinate of first control point</doc>
5336            <type name="gfloat" c:type="float"/>
5337          </parameter>
5338          <parameter name="x2" transfer-ownership="none">
5339            <doc xml:space="preserve"
5340                 filename="gsk/gskpathbuilder.c"
5341                 line="1092">x coordinate of second control point</doc>
5342            <type name="gfloat" c:type="float"/>
5343          </parameter>
5344          <parameter name="y2" transfer-ownership="none">
5345            <doc xml:space="preserve"
5346                 filename="gsk/gskpathbuilder.c"
5347                 line="1093">y coordinate of second control point</doc>
5348            <type name="gfloat" c:type="float"/>
5349          </parameter>
5350        </parameters>
5351      </method>
5352      <method name="close"
5353              c:identifier="gsk_path_builder_close"
5354              version="4.14">
5355        <doc xml:space="preserve"
5356             filename="gsk/gskpathbuilder.c"
5357             line="1157">Ends the current contour with a line back to the start point.
5358
5359Note that this is different from calling [method@Gsk.PathBuilder.line_to]
5360with the start point in that the contour will be closed. A closed
5361contour behaves differently from an open one. When stroking, its
5362start and end point are considered connected, so they will be
5363joined via the line join, and not ended with line caps.</doc>
5364        <source-position filename="gsk/gskpathbuilder.h" line="188"/>
5365        <return-value transfer-ownership="none">
5366          <type name="none" c:type="void"/>
5367        </return-value>
5368        <parameters>
5369          <instance-parameter name="self" transfer-ownership="none">
5370            <doc xml:space="preserve"
5371                 filename="gsk/gskpathbuilder.c"
5372                 line="1159">a path builder</doc>
5373            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5374          </instance-parameter>
5375        </parameters>
5376      </method>
5377      <method name="conic_to"
5378              c:identifier="gsk_path_builder_conic_to"
5379              version="4.14">
5380        <doc xml:space="preserve"
5381             filename="gsk/gskpathbuilder.c"
5382             line="955">Adds a [conic curve](https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline)
5383from the current point to @x2, @y2 with the given @weight and @x1, @y1 as the
5384control point.
5385
5386The weight determines how strongly the curve is pulled towards the control point.
5387A conic with weight 1 is identical to a quadratic Bézier curve with the same points.
5388
5389Conic curves can be used to draw ellipses and circles. They are also known as
5390rational quadratic Bézier curves.
5391
5392After this, @x2, @y2 will be the new current point.
5393
5394&lt;picture&gt;
5395  &lt;source srcset="conic-dark.png" media="(prefers-color-scheme: dark)"&gt;
5396  &lt;img alt="Conic To" src="conic-light.png"&gt;
5397&lt;/picture&gt;</doc>
5398        <source-position filename="gsk/gskpathbuilder.h" line="125"/>
5399        <return-value transfer-ownership="none">
5400          <type name="none" c:type="void"/>
5401        </return-value>
5402        <parameters>
5403          <instance-parameter name="self" transfer-ownership="none">
5404            <doc xml:space="preserve"
5405                 filename="gsk/gskpathbuilder.c"
5406                 line="957">a path builder</doc>
5407            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5408          </instance-parameter>
5409          <parameter name="x1" transfer-ownership="none">
5410            <doc xml:space="preserve"
5411                 filename="gsk/gskpathbuilder.c"
5412                 line="958">x coordinate of control point</doc>
5413            <type name="gfloat" c:type="float"/>
5414          </parameter>
5415          <parameter name="y1" transfer-ownership="none">
5416            <doc xml:space="preserve"
5417                 filename="gsk/gskpathbuilder.c"
5418                 line="959">y coordinate of control point</doc>
5419            <type name="gfloat" c:type="float"/>
5420          </parameter>
5421          <parameter name="x2" transfer-ownership="none">
5422            <doc xml:space="preserve"
5423                 filename="gsk/gskpathbuilder.c"
5424                 line="960">x coordinate of the end of the curve</doc>
5425            <type name="gfloat" c:type="float"/>
5426          </parameter>
5427          <parameter name="y2" transfer-ownership="none">
5428            <doc xml:space="preserve"
5429                 filename="gsk/gskpathbuilder.c"
5430                 line="961">y coordinate of the end of the curve</doc>
5431            <type name="gfloat" c:type="float"/>
5432          </parameter>
5433          <parameter name="weight" transfer-ownership="none">
5434            <doc xml:space="preserve"
5435                 filename="gsk/gskpathbuilder.c"
5436                 line="962">weight of the control point, must be greater than zero</doc>
5437            <type name="gfloat" c:type="float"/>
5438          </parameter>
5439        </parameters>
5440      </method>
5441      <method name="cubic_to"
5442              c:identifier="gsk_path_builder_cubic_to"
5443              version="4.14">
5444        <doc xml:space="preserve"
5445             filename="gsk/gskpathbuilder.c"
5446             line="802">Adds a [cubic Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
5447from the current point to @x3, @y3 with @x1, @y1 and @x2, @y2 as the control
5448points.
5449
5450After this, @x3, @y3 will be the new current point.
5451
5452&lt;picture&gt;
5453  &lt;source srcset="cubic-dark.png" media="(prefers-color-scheme: dark)"&gt;
5454  &lt;img alt="Cubic To" src="cubic-light.png"&gt;
5455&lt;/picture&gt;</doc>
5456        <source-position filename="gsk/gskpathbuilder.h" line="108"/>
5457        <return-value transfer-ownership="none">
5458          <type name="none" c:type="void"/>
5459        </return-value>
5460        <parameters>
5461          <instance-parameter name="self" transfer-ownership="none">
5462            <doc xml:space="preserve"
5463                 filename="gsk/gskpathbuilder.c"
5464                 line="804">a path builder</doc>
5465            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5466          </instance-parameter>
5467          <parameter name="x1" transfer-ownership="none">
5468            <doc xml:space="preserve"
5469                 filename="gsk/gskpathbuilder.c"
5470                 line="805">x coordinate of first control point</doc>
5471            <type name="gfloat" c:type="float"/>
5472          </parameter>
5473          <parameter name="y1" transfer-ownership="none">
5474            <doc xml:space="preserve"
5475                 filename="gsk/gskpathbuilder.c"
5476                 line="806">y coordinate of first control point</doc>
5477            <type name="gfloat" c:type="float"/>
5478          </parameter>
5479          <parameter name="x2" transfer-ownership="none">
5480            <doc xml:space="preserve"
5481                 filename="gsk/gskpathbuilder.c"
5482                 line="807">x coordinate of second control point</doc>
5483            <type name="gfloat" c:type="float"/>
5484          </parameter>
5485          <parameter name="y2" transfer-ownership="none">
5486            <doc xml:space="preserve"
5487                 filename="gsk/gskpathbuilder.c"
5488                 line="808">y coordinate of second control point</doc>
5489            <type name="gfloat" c:type="float"/>
5490          </parameter>
5491          <parameter name="x3" transfer-ownership="none">
5492            <doc xml:space="preserve"
5493                 filename="gsk/gskpathbuilder.c"
5494                 line="809">x coordinate of the end of the curve</doc>
5495            <type name="gfloat" c:type="float"/>
5496          </parameter>
5497          <parameter name="y3" transfer-ownership="none">
5498            <doc xml:space="preserve"
5499                 filename="gsk/gskpathbuilder.c"
5500                 line="810">y coordinate of the end of the curve</doc>
5501            <type name="gfloat" c:type="float"/>
5502          </parameter>
5503        </parameters>
5504      </method>
5505      <method name="free_to_path"
5506              c:identifier="gsk_path_builder_free_to_path"
5507              version="4.14"
5508              introspectable="0">
5509        <doc xml:space="preserve"
5510             filename="gsk/gskpathbuilder.c"
5511             line="242">Creates a new path from the current state of the
5512builder, and unrefs the builder.</doc>
5513        <source-position filename="gsk/gskpathbuilder.h" line="44"/>
5514        <return-value transfer-ownership="full">
5515          <doc xml:space="preserve"
5516               filename="gsk/gskpathbuilder.c"
5517               line="249">the newly created path
5518  with all the contours added to the builder</doc>
5519          <type name="Path" c:type="GskPath*"/>
5520        </return-value>
5521        <parameters>
5522          <instance-parameter name="self" transfer-ownership="none">
5523            <doc xml:space="preserve"
5524                 filename="gsk/gskpathbuilder.c"
5525                 line="244">a path builder</doc>
5526            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5527          </instance-parameter>
5528        </parameters>
5529      </method>
5530      <method name="get_current_point"
5531              c:identifier="gsk_path_builder_get_current_point"
5532              version="4.14">
5533        <doc xml:space="preserve"
5534             filename="gsk/gskpathbuilder.c"
5535             line="313">Gets the current point.
5536
5537The current point is used for relative drawing commands and
5538updated after every operation.
5539
5540When the builder is created, the default current point is set
5541to `0, 0`. Note that this is different from cairo, which starts
5542out without a current point.</doc>
5543        <source-position filename="gsk/gskpathbuilder.h" line="49"/>
5544        <return-value transfer-ownership="none">
5545          <doc xml:space="preserve"
5546               filename="gsk/gskpathbuilder.c"
5547               line="326">the current point</doc>
5548          <type name="Graphene.Point" c:type="const graphene_point_t*"/>
5549        </return-value>
5550        <parameters>
5551          <instance-parameter name="self" transfer-ownership="none">
5552            <doc xml:space="preserve"
5553                 filename="gsk/gskpathbuilder.c"
5554                 line="315">a path builder</doc>
5555            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5556          </instance-parameter>
5557        </parameters>
5558      </method>
5559      <method name="html_arc_to"
5560              c:identifier="gsk_path_builder_html_arc_to"
5561              version="4.14">
5562        <doc xml:space="preserve"
5563             filename="gsk/gskpathbuilder.c"
5564             line="1461">Implements arc-to according to the HTML Canvas spec.
5565
5566A convenience function that implements the
5567[HTML arc_to](https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-arcto-dev)
5568functionality.
5569
5570After this, the current point will be the point where
5571the circle with the given radius touches the line from
5572@x1, @y1 to @x2, @y2.</doc>
5573        <source-position filename="gsk/gskpathbuilder.h" line="173"/>
5574        <return-value transfer-ownership="none">
5575          <type name="none" c:type="void"/>
5576        </return-value>
5577        <parameters>
5578          <instance-parameter name="self" transfer-ownership="none">
5579            <doc xml:space="preserve"
5580                 filename="gsk/gskpathbuilder.c"
5581                 line="1463">a path builder</doc>
5582            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5583          </instance-parameter>
5584          <parameter name="x1" transfer-ownership="none">
5585            <doc xml:space="preserve"
5586                 filename="gsk/gskpathbuilder.c"
5587                 line="1464">x coordinate of first control point</doc>
5588            <type name="gfloat" c:type="float"/>
5589          </parameter>
5590          <parameter name="y1" transfer-ownership="none">
5591            <doc xml:space="preserve"
5592                 filename="gsk/gskpathbuilder.c"
5593                 line="1465">y coordinate of first control point</doc>
5594            <type name="gfloat" c:type="float"/>
5595          </parameter>
5596          <parameter name="x2" transfer-ownership="none">
5597            <doc xml:space="preserve"
5598                 filename="gsk/gskpathbuilder.c"
5599                 line="1466">x coordinate of second control point</doc>
5600            <type name="gfloat" c:type="float"/>
5601          </parameter>
5602          <parameter name="y2" transfer-ownership="none">
5603            <doc xml:space="preserve"
5604                 filename="gsk/gskpathbuilder.c"
5605                 line="1467">y coordinate of second control point</doc>
5606            <type name="gfloat" c:type="float"/>
5607          </parameter>
5608          <parameter name="radius" transfer-ownership="none">
5609            <doc xml:space="preserve"
5610                 filename="gsk/gskpathbuilder.c"
5611                 line="1468">radius of the circle</doc>
5612            <type name="gfloat" c:type="float"/>
5613          </parameter>
5614        </parameters>
5615      </method>
5616      <method name="line_to"
5617              c:identifier="gsk_path_builder_line_to"
5618              version="4.14">
5619        <doc xml:space="preserve"
5620             filename="gsk/gskpathbuilder.c"
5621             line="571">Draws a line from the current point to @x, @y and makes it
5622the new current point.
5623
5624&lt;picture&gt;
5625  &lt;source srcset="line-dark.png" media="(prefers-color-scheme: dark)"&gt;
5626  &lt;img alt="Line To" src="line-light.png"&gt;
5627&lt;/picture&gt;</doc>
5628        <source-position filename="gsk/gskpathbuilder.h" line="88"/>
5629        <return-value transfer-ownership="none">
5630          <type name="none" c:type="void"/>
5631        </return-value>
5632        <parameters>
5633          <instance-parameter name="self" transfer-ownership="none">
5634            <doc xml:space="preserve"
5635                 filename="gsk/gskpathbuilder.c"
5636                 line="573">a path builder</doc>
5637            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5638          </instance-parameter>
5639          <parameter name="x" transfer-ownership="none">
5640            <doc xml:space="preserve"
5641                 filename="gsk/gskpathbuilder.c"
5642                 line="574">x coordinate</doc>
5643            <type name="gfloat" c:type="float"/>
5644          </parameter>
5645          <parameter name="y" transfer-ownership="none">
5646            <doc xml:space="preserve"
5647                 filename="gsk/gskpathbuilder.c"
5648                 line="575">y coordinate</doc>
5649            <type name="gfloat" c:type="float"/>
5650          </parameter>
5651        </parameters>
5652      </method>
5653      <method name="move_to"
5654              c:identifier="gsk_path_builder_move_to"
5655              version="4.14">
5656        <doc xml:space="preserve"
5657             filename="gsk/gskpathbuilder.c"
5658             line="518">Starts a new contour by placing the pen at @x, @y.
5659
5660If this function is called twice in succession, the first
5661call will result in a contour made up of a single point.
5662The second call will start a new contour.</doc>
5663        <source-position filename="gsk/gskpathbuilder.h" line="80"/>
5664        <return-value transfer-ownership="none">
5665          <type name="none" c:type="void"/>
5666        </return-value>
5667        <parameters>
5668          <instance-parameter name="self" transfer-ownership="none">
5669            <doc xml:space="preserve"
5670                 filename="gsk/gskpathbuilder.c"
5671                 line="520">a path builder</doc>
5672            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5673          </instance-parameter>
5674          <parameter name="x" transfer-ownership="none">
5675            <doc xml:space="preserve"
5676                 filename="gsk/gskpathbuilder.c"
5677                 line="521">x coordinate</doc>
5678            <type name="gfloat" c:type="float"/>
5679          </parameter>
5680          <parameter name="y" transfer-ownership="none">
5681            <doc xml:space="preserve"
5682                 filename="gsk/gskpathbuilder.c"
5683                 line="522">y coordinate</doc>
5684            <type name="gfloat" c:type="float"/>
5685          </parameter>
5686        </parameters>
5687      </method>
5688      <method name="quad_to"
5689              c:identifier="gsk_path_builder_quad_to"
5690              version="4.14">
5691        <doc xml:space="preserve"
5692             filename="gsk/gskpathbuilder.c"
5693             line="665">Adds a [quadratic Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
5694from the current point to @x2, @y2 with @x1, @y1 as the control point.
5695
5696After this, @x2, @y2 will be the new current point.
5697
5698&lt;picture&gt;
5699  &lt;source srcset="quad-dark.png" media="(prefers-color-scheme: dark)"&gt;
5700  &lt;img alt="Quad To" src="quad-light.png"&gt;
5701&lt;/picture&gt;</doc>
5702        <source-position filename="gsk/gskpathbuilder.h" line="96"/>
5703        <return-value transfer-ownership="none">
5704          <type name="none" c:type="void"/>
5705        </return-value>
5706        <parameters>
5707          <instance-parameter name="self" transfer-ownership="none">
5708            <doc xml:space="preserve"
5709                 filename="gsk/gskpathbuilder.c"
5710                 line="667">a path builder</doc>
5711            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5712          </instance-parameter>
5713          <parameter name="x1" transfer-ownership="none">
5714            <doc xml:space="preserve"
5715                 filename="gsk/gskpathbuilder.c"
5716                 line="668">x coordinate of control point</doc>
5717            <type name="gfloat" c:type="float"/>
5718          </parameter>
5719          <parameter name="y1" transfer-ownership="none">
5720            <doc xml:space="preserve"
5721                 filename="gsk/gskpathbuilder.c"
5722                 line="669">y coordinate of control point</doc>
5723            <type name="gfloat" c:type="float"/>
5724          </parameter>
5725          <parameter name="x2" transfer-ownership="none">
5726            <doc xml:space="preserve"
5727                 filename="gsk/gskpathbuilder.c"
5728                 line="670">x coordinate of the end of the curve</doc>
5729            <type name="gfloat" c:type="float"/>
5730          </parameter>
5731          <parameter name="y2" transfer-ownership="none">
5732            <doc xml:space="preserve"
5733                 filename="gsk/gskpathbuilder.c"
5734                 line="671">y coordinate of the end of the curve</doc>
5735            <type name="gfloat" c:type="float"/>
5736          </parameter>
5737        </parameters>
5738      </method>
5739      <method name="ref" c:identifier="gsk_path_builder_ref" version="4.14">
5740        <doc xml:space="preserve"
5741             filename="gsk/gskpathbuilder.c"
5742             line="123">Acquires a reference on the given builder.
5743
5744This function is intended primarily for language bindings.
5745`GskPathBuilder` objects should not be kept around.</doc>
5746        <source-position filename="gsk/gskpathbuilder.h" line="40"/>
5747        <return-value transfer-ownership="none">
5748          <doc xml:space="preserve"
5749               filename="gsk/gskpathbuilder.c"
5750               line="132">the given path builder with
5751  its reference count increased</doc>
5752          <type name="PathBuilder" c:type="GskPathBuilder*"/>
5753        </return-value>
5754        <parameters>
5755          <instance-parameter name="self" transfer-ownership="none">
5756            <doc xml:space="preserve"
5757                 filename="gsk/gskpathbuilder.c"
5758                 line="125">a path builder</doc>
5759            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5760          </instance-parameter>
5761        </parameters>
5762      </method>
5763      <method name="rel_arc_to"
5764              c:identifier="gsk_path_builder_rel_arc_to"
5765              version="4.14">
5766        <doc xml:space="preserve"
5767             filename="gsk/gskpathbuilder.c"
5768             line="1124">Adds an elliptical arc from the current point to @x2, @y2
5769with @x1, @y1 determining the tangent directions.
5770
5771All coordinates are given relative to the current point.
5772
5773This is the relative version of [method@Gsk.PathBuilder.arc_to].</doc>
5774        <source-position filename="gsk/gskpathbuilder.h" line="147"/>
5775        <return-value transfer-ownership="none">
5776          <type name="none" c:type="void"/>
5777        </return-value>
5778        <parameters>
5779          <instance-parameter name="self" transfer-ownership="none">
5780            <doc xml:space="preserve"
5781                 filename="gsk/gskpathbuilder.c"
5782                 line="1126">a path builder</doc>
5783            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5784          </instance-parameter>
5785          <parameter name="x1" transfer-ownership="none">
5786            <doc xml:space="preserve"
5787                 filename="gsk/gskpathbuilder.c"
5788                 line="1127">x coordinate of first control point</doc>
5789            <type name="gfloat" c:type="float"/>
5790          </parameter>
5791          <parameter name="y1" transfer-ownership="none">
5792            <doc xml:space="preserve"
5793                 filename="gsk/gskpathbuilder.c"
5794                 line="1128">y coordinate of first control point</doc>
5795            <type name="gfloat" c:type="float"/>
5796          </parameter>
5797          <parameter name="x2" transfer-ownership="none">
5798            <doc xml:space="preserve"
5799                 filename="gsk/gskpathbuilder.c"
5800                 line="1129">x coordinate of second control point</doc>
5801            <type name="gfloat" c:type="float"/>
5802          </parameter>
5803          <parameter name="y2" transfer-ownership="none">
5804            <doc xml:space="preserve"
5805                 filename="gsk/gskpathbuilder.c"
5806                 line="1130">y coordinate of second control point</doc>
5807            <type name="gfloat" c:type="float"/>
5808          </parameter>
5809        </parameters>
5810      </method>
5811      <method name="rel_conic_to"
5812              c:identifier="gsk_path_builder_rel_conic_to"
5813              version="4.14">
5814        <doc xml:space="preserve"
5815             filename="gsk/gskpathbuilder.c"
5816             line="1049">Adds a [conic curve](https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline)
5817from the current point to @x2, @y2 with the given @weight and @x1, @y1 as the
5818control point.
5819
5820All coordinates are given relative to the current point.
5821
5822This is the relative version of [method@Gsk.PathBuilder.conic_to].</doc>
5823        <source-position filename="gsk/gskpathbuilder.h" line="132"/>
5824        <return-value transfer-ownership="none">
5825          <type name="none" c:type="void"/>
5826        </return-value>
5827        <parameters>
5828          <instance-parameter name="self" transfer-ownership="none">
5829            <doc xml:space="preserve"
5830                 filename="gsk/gskpathbuilder.c"
5831                 line="1051">a path builder</doc>
5832            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5833          </instance-parameter>
5834          <parameter name="x1" transfer-ownership="none">
5835            <doc xml:space="preserve"
5836                 filename="gsk/gskpathbuilder.c"
5837                 line="1052">x offset of control point</doc>
5838            <type name="gfloat" c:type="float"/>
5839          </parameter>
5840          <parameter name="y1" transfer-ownership="none">
5841            <doc xml:space="preserve"
5842                 filename="gsk/gskpathbuilder.c"
5843                 line="1053">y offset of control point</doc>
5844            <type name="gfloat" c:type="float"/>
5845          </parameter>
5846          <parameter name="x2" transfer-ownership="none">
5847            <doc xml:space="preserve"
5848                 filename="gsk/gskpathbuilder.c"
5849                 line="1054">x offset of the end of the curve</doc>
5850            <type name="gfloat" c:type="float"/>
5851          </parameter>
5852          <parameter name="y2" transfer-ownership="none">
5853            <doc xml:space="preserve"
5854                 filename="gsk/gskpathbuilder.c"
5855                 line="1055">y offset of the end of the curve</doc>
5856            <type name="gfloat" c:type="float"/>
5857          </parameter>
5858          <parameter name="weight" transfer-ownership="none">
5859            <doc xml:space="preserve"
5860                 filename="gsk/gskpathbuilder.c"
5861                 line="1056">weight of the curve, must be greater than zero</doc>
5862            <type name="gfloat" c:type="float"/>
5863          </parameter>
5864        </parameters>
5865      </method>
5866      <method name="rel_cubic_to"
5867              c:identifier="gsk_path_builder_rel_cubic_to"
5868              version="4.14">
5869        <doc xml:space="preserve"
5870             filename="gsk/gskpathbuilder.c"
5871             line="915">Adds a [cubic Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
5872from the current point to @x3, @y3 with @x1, @y1 and @x2, @y2 as the control
5873points.
5874
5875All coordinates are given relative to the current point.
5876
5877This is the relative version of [method@Gsk.PathBuilder.cubic_to].</doc>
5878        <source-position filename="gsk/gskpathbuilder.h" line="116"/>
5879        <return-value transfer-ownership="none">
5880          <type name="none" c:type="void"/>
5881        </return-value>
5882        <parameters>
5883          <instance-parameter name="self" transfer-ownership="none">
5884            <doc xml:space="preserve"
5885                 filename="gsk/gskpathbuilder.c"
5886                 line="917">a path builder</doc>
5887            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5888          </instance-parameter>
5889          <parameter name="x1" transfer-ownership="none">
5890            <doc xml:space="preserve"
5891                 filename="gsk/gskpathbuilder.c"
5892                 line="918">x offset of first control point</doc>
5893            <type name="gfloat" c:type="float"/>
5894          </parameter>
5895          <parameter name="y1" transfer-ownership="none">
5896            <doc xml:space="preserve"
5897                 filename="gsk/gskpathbuilder.c"
5898                 line="919">y offset of first control point</doc>
5899            <type name="gfloat" c:type="float"/>
5900          </parameter>
5901          <parameter name="x2" transfer-ownership="none">
5902            <doc xml:space="preserve"
5903                 filename="gsk/gskpathbuilder.c"
5904                 line="920">x offset of second control point</doc>
5905            <type name="gfloat" c:type="float"/>
5906          </parameter>
5907          <parameter name="y2" transfer-ownership="none">
5908            <doc xml:space="preserve"
5909                 filename="gsk/gskpathbuilder.c"
5910                 line="921">y offset of second control point</doc>
5911            <type name="gfloat" c:type="float"/>
5912          </parameter>
5913          <parameter name="x3" transfer-ownership="none">
5914            <doc xml:space="preserve"
5915                 filename="gsk/gskpathbuilder.c"
5916                 line="922">x offset of the end of the curve</doc>
5917            <type name="gfloat" c:type="float"/>
5918          </parameter>
5919          <parameter name="y3" transfer-ownership="none">
5920            <doc xml:space="preserve"
5921                 filename="gsk/gskpathbuilder.c"
5922                 line="923">y offset of the end of the curve</doc>
5923            <type name="gfloat" c:type="float"/>
5924          </parameter>
5925        </parameters>
5926      </method>
5927      <method name="rel_html_arc_to"
5928              c:identifier="gsk_path_builder_rel_html_arc_to"
5929              version="4.14">
5930        <doc xml:space="preserve"
5931             filename="gsk/gskpathbuilder.c"
5932             line="1526">Implements arc-to according to the HTML Canvas spec.
5933
5934All coordinates are given relative to the current point.
5935
5936This is the relative version of [method@Gsk.PathBuilder.html_arc_to].</doc>
5937        <source-position filename="gsk/gskpathbuilder.h" line="180"/>
5938        <return-value transfer-ownership="none">
5939          <type name="none" c:type="void"/>
5940        </return-value>
5941        <parameters>
5942          <instance-parameter name="self" transfer-ownership="none">
5943            <doc xml:space="preserve"
5944                 filename="gsk/gskpathbuilder.c"
5945                 line="1528">a path builder</doc>
5946            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5947          </instance-parameter>
5948          <parameter name="x1" transfer-ownership="none">
5949            <doc xml:space="preserve"
5950                 filename="gsk/gskpathbuilder.c"
5951                 line="1529">x coordinate of first control point</doc>
5952            <type name="gfloat" c:type="float"/>
5953          </parameter>
5954          <parameter name="y1" transfer-ownership="none">
5955            <doc xml:space="preserve"
5956                 filename="gsk/gskpathbuilder.c"
5957                 line="1530">y coordinate of first control point</doc>
5958            <type name="gfloat" c:type="float"/>
5959          </parameter>
5960          <parameter name="x2" transfer-ownership="none">
5961            <doc xml:space="preserve"
5962                 filename="gsk/gskpathbuilder.c"
5963                 line="1531">x coordinate of second control point</doc>
5964            <type name="gfloat" c:type="float"/>
5965          </parameter>
5966          <parameter name="y2" transfer-ownership="none">
5967            <doc xml:space="preserve"
5968                 filename="gsk/gskpathbuilder.c"
5969                 line="1532">y coordinate of second control point</doc>
5970            <type name="gfloat" c:type="float"/>
5971          </parameter>
5972          <parameter name="radius" transfer-ownership="none">
5973            <doc xml:space="preserve"
5974                 filename="gsk/gskpathbuilder.c"
5975                 line="1533">radius of the circle</doc>
5976            <type name="gfloat" c:type="float"/>
5977          </parameter>
5978        </parameters>
5979      </method>
5980      <method name="rel_line_to"
5981              c:identifier="gsk_path_builder_rel_line_to"
5982              version="4.14">
5983        <doc xml:space="preserve"
5984             filename="gsk/gskpathbuilder.c"
5985             line="606">Draws a line from the current point to a point offset from it
5986by @x, @y and makes it the new current point.
5987
5988This is the relative version of [method@Gsk.PathBuilder.line_to].</doc>
5989        <source-position filename="gsk/gskpathbuilder.h" line="92"/>
5990        <return-value transfer-ownership="none">
5991          <type name="none" c:type="void"/>
5992        </return-value>
5993        <parameters>
5994          <instance-parameter name="self" transfer-ownership="none">
5995            <doc xml:space="preserve"
5996                 filename="gsk/gskpathbuilder.c"
5997                 line="608">a path builder</doc>
5998            <type name="PathBuilder" c:type="GskPathBuilder*"/>
5999          </instance-parameter>
6000          <parameter name="x" transfer-ownership="none">
6001            <doc xml:space="preserve"
6002                 filename="gsk/gskpathbuilder.c"
6003                 line="609">x offset</doc>
6004            <type name="gfloat" c:type="float"/>
6005          </parameter>
6006          <parameter name="y" transfer-ownership="none">
6007            <doc xml:space="preserve"
6008                 filename="gsk/gskpathbuilder.c"
6009                 line="610">y offset</doc>
6010            <type name="gfloat" c:type="float"/>
6011          </parameter>
6012        </parameters>
6013      </method>
6014      <method name="rel_move_to"
6015              c:identifier="gsk_path_builder_rel_move_to"
6016              version="4.14">
6017        <doc xml:space="preserve"
6018             filename="gsk/gskpathbuilder.c"
6019             line="546">Starts a new contour by placing the pen at @x, @y
6020relative to the current point.
6021
6022This is the relative version of [method@Gsk.PathBuilder.move_to].</doc>
6023        <source-position filename="gsk/gskpathbuilder.h" line="84"/>
6024        <return-value transfer-ownership="none">
6025          <type name="none" c:type="void"/>
6026        </return-value>
6027        <parameters>
6028          <instance-parameter name="self" transfer-ownership="none">
6029            <doc xml:space="preserve"
6030                 filename="gsk/gskpathbuilder.c"
6031                 line="548">a path builder</doc>
6032            <type name="PathBuilder" c:type="GskPathBuilder*"/>
6033          </instance-parameter>
6034          <parameter name="x" transfer-ownership="none">
6035            <doc xml:space="preserve"
6036                 filename="gsk/gskpathbuilder.c"
6037                 line="549">x offset</doc>
6038            <type name="gfloat" c:type="float"/>
6039          </parameter>
6040          <parameter name="y" transfer-ownership="none">
6041            <doc xml:space="preserve"
6042                 filename="gsk/gskpathbuilder.c"
6043                 line="550">y offset</doc>
6044            <type name="gfloat" c:type="float"/>
6045          </parameter>
6046        </parameters>
6047      </method>
6048      <method name="rel_quad_to"
6049              c:identifier="gsk_path_builder_rel_quad_to"
6050              version="4.14">
6051        <doc xml:space="preserve"
6052             filename="gsk/gskpathbuilder.c"
6053             line="737">Adds a [quadratic Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
6054from the current point to @x2, @y2 with @x1, @y1 the control point.
6055
6056All coordinates are given relative to the current point.
6057
6058This is the relative version of [method@Gsk.PathBuilder.quad_to].</doc>
6059        <source-position filename="gsk/gskpathbuilder.h" line="102"/>
6060        <return-value transfer-ownership="none">
6061          <type name="none" c:type="void"/>
6062        </return-value>
6063        <parameters>
6064          <instance-parameter name="self" transfer-ownership="none">
6065            <doc xml:space="preserve"
6066                 filename="gsk/gskpathbuilder.c"
6067                 line="739">a path builder</doc>
6068            <type name="PathBuilder" c:type="GskPathBuilder*"/>
6069          </instance-parameter>
6070          <parameter name="x1" transfer-ownership="none">
6071            <doc xml:space="preserve"
6072                 filename="gsk/gskpathbuilder.c"
6073                 line="740">x offset of control point</doc>
6074            <type name="gfloat" c:type="float"/>
6075          </parameter>
6076          <parameter name="y1" transfer-ownership="none">
6077            <doc xml:space="preserve"
6078                 filename="gsk/gskpathbuilder.c"
6079                 line="741">y offset of control point</doc>
6080            <type name="gfloat" c:type="float"/>
6081          </parameter>
6082          <parameter name="x2" transfer-ownership="none">
6083            <doc xml:space="preserve"
6084                 filename="gsk/gskpathbuilder.c"
6085                 line="742">x offset of the end of the curve</doc>
6086            <type name="gfloat" c:type="float"/>
6087          </parameter>
6088          <parameter name="y2" transfer-ownership="none">
6089            <doc xml:space="preserve"
6090                 filename="gsk/gskpathbuilder.c"
6091                 line="743">y offset of the end of the curve</doc>
6092            <type name="gfloat" c:type="float"/>
6093          </parameter>
6094        </parameters>
6095      </method>
6096      <method name="rel_svg_arc_to"
6097              c:identifier="gsk_path_builder_rel_svg_arc_to"
6098              version="4.14">
6099        <doc xml:space="preserve"
6100             filename="gsk/gskpathbuilder.c"
6101             line="1387">Implements arc-to according to the SVG spec.
6102
6103All coordinates are given relative to the current point.
6104
6105This is the relative version of [method@Gsk.PathBuilder.svg_arc_to].</doc>
6106        <source-position filename="gsk/gskpathbuilder.h" line="163"/>
6107        <return-value transfer-ownership="none">
6108          <type name="none" c:type="void"/>
6109        </return-value>
6110        <parameters>
6111          <instance-parameter name="self" transfer-ownership="none">
6112            <doc xml:space="preserve"
6113                 filename="gsk/gskpathbuilder.c"
6114                 line="1389">a path builder</doc>
6115            <type name="PathBuilder" c:type="GskPathBuilder*"/>
6116          </instance-parameter>
6117          <parameter name="rx" transfer-ownership="none">
6118            <doc xml:space="preserve"
6119                 filename="gsk/gskpathbuilder.c"
6120                 line="1390">x radius</doc>
6121            <type name="gfloat" c:type="float"/>
6122          </parameter>
6123          <parameter name="ry" transfer-ownership="none">
6124            <doc xml:space="preserve"
6125                 filename="gsk/gskpathbuilder.c"
6126                 line="1391">y radius</doc>
6127            <type name="gfloat" c:type="float"/>
6128          </parameter>
6129          <parameter name="x_axis_rotation" transfer-ownership="none">
6130            <doc xml:space="preserve"
6131                 filename="gsk/gskpathbuilder.c"
6132                 line="1392">the rotation of the ellipsis</doc>
6133            <type name="gfloat" c:type="float"/>
6134          </parameter>
6135          <parameter name="large_arc" transfer-ownership="none">
6136            <doc xml:space="preserve"
6137                 filename="gsk/gskpathbuilder.c"
6138                 line="1393">whether to add the large arc</doc>
6139            <type name="gboolean" c:type="gboolean"/>
6140          </parameter>
6141          <parameter name="positive_sweep" transfer-ownership="none">
6142            <doc xml:space="preserve"
6143                 filename="gsk/gskpathbuilder.c"
6144                 line="1394">whether to sweep in the positive direction</doc>
6145            <type name="gboolean" c:type="gboolean"/>
6146          </parameter>
6147          <parameter name="x" transfer-ownership="none">
6148            <doc xml:space="preserve"
6149                 filename="gsk/gskpathbuilder.c"
6150                 line="1395">x coordinate of the endpoint</doc>
6151            <type name="gfloat" c:type="float"/>
6152          </parameter>
6153          <parameter name="y" transfer-ownership="none">
6154            <doc xml:space="preserve"
6155                 filename="gsk/gskpathbuilder.c"
6156                 line="1396">y coordinate of the endpoint</doc>
6157            <type name="gfloat" c:type="float"/>
6158          </parameter>
6159        </parameters>
6160      </method>
6161      <method name="svg_arc_to"
6162              c:identifier="gsk_path_builder_svg_arc_to"
6163              version="4.14">
6164        <doc xml:space="preserve"
6165             filename="gsk/gskpathbuilder.c"
6166             line="1234">Implements arc-to according to the SVG spec.
6167
6168A convenience function that implements the
6169[SVG arc_to](https://www.w3.org/TR/SVG11/paths.html#PathDataEllipticalArcCommands)
6170functionality.
6171
6172After this, @x, @y will be the new current point.</doc>
6173        <source-position filename="gsk/gskpathbuilder.h" line="154"/>
6174        <return-value transfer-ownership="none">
6175          <type name="none" c:type="void"/>
6176        </return-value>
6177        <parameters>
6178          <instance-parameter name="self" transfer-ownership="none">
6179            <doc xml:space="preserve"
6180                 filename="gsk/gskpathbuilder.c"
6181                 line="1236">a path builder</doc>
6182            <type name="PathBuilder" c:type="GskPathBuilder*"/>
6183          </instance-parameter>
6184          <parameter name="rx" transfer-ownership="none">
6185            <doc xml:space="preserve"
6186                 filename="gsk/gskpathbuilder.c"
6187                 line="1237">x radius</doc>
6188            <type name="gfloat" c:type="float"/>
6189          </parameter>
6190          <parameter name="ry" transfer-ownership="none">
6191            <doc xml:space="preserve"
6192                 filename="gsk/gskpathbuilder.c"
6193                 line="1238">y radius</doc>
6194            <type name="gfloat" c:type="float"/>
6195          </parameter>
6196          <parameter name="x_axis_rotation" transfer-ownership="none">
6197            <doc xml:space="preserve"
6198                 filename="gsk/gskpathbuilder.c"
6199                 line="1239">the rotation of the ellipsis</doc>
6200            <type name="gfloat" c:type="float"/>
6201          </parameter>
6202          <parameter name="large_arc" transfer-ownership="none">
6203            <doc xml:space="preserve"
6204                 filename="gsk/gskpathbuilder.c"
6205                 line="1240">whether to add the large arc</doc>
6206            <type name="gboolean" c:type="gboolean"/>
6207          </parameter>
6208          <parameter name="positive_sweep" transfer-ownership="none">
6209            <doc xml:space="preserve"
6210                 filename="gsk/gskpathbuilder.c"
6211                 line="1241">whether to sweep in the positive direction</doc>
6212            <type name="gboolean" c:type="gboolean"/>
6213          </parameter>
6214          <parameter name="x" transfer-ownership="none">
6215            <doc xml:space="preserve"
6216                 filename="gsk/gskpathbuilder.c"
6217                 line="1242">x coordinate of the endpoint</doc>
6218            <type name="gfloat" c:type="float"/>
6219          </parameter>
6220          <parameter name="y" transfer-ownership="none">
6221            <doc xml:space="preserve"
6222                 filename="gsk/gskpathbuilder.c"
6223                 line="1243">y coordinate of the endpoint</doc>
6224            <type name="gfloat" c:type="float"/>
6225          </parameter>
6226        </parameters>
6227      </method>
6228      <method name="to_path"
6229              c:identifier="gsk_path_builder_to_path"
6230              version="4.14">
6231        <doc xml:space="preserve"
6232             filename="gsk/gskpathbuilder.c"
6233             line="268">Creates a new path from the given builder.
6234
6235The given `GskPathBuilder` is reset once this function returns;
6236you cannot call this function multiple times on the same builder
6237instance.
6238
6239This function is intended primarily for language bindings.
6240C code should use [method@Gsk.PathBuilder.free_to_path].</doc>
6241        <source-position filename="gsk/gskpathbuilder.h" line="46"/>
6242        <return-value transfer-ownership="full">
6243          <doc xml:space="preserve"
6244               filename="gsk/gskpathbuilder.c"
6245               line="281">the newly created path
6246  with all the contours added to the builder</doc>
6247          <type name="Path" c:type="GskPath*"/>
6248        </return-value>
6249        <parameters>
6250          <instance-parameter name="self" transfer-ownership="none">
6251            <doc xml:space="preserve"
6252                 filename="gsk/gskpathbuilder.c"
6253                 line="270">a path builder</doc>
6254            <type name="PathBuilder" c:type="GskPathBuilder*"/>
6255          </instance-parameter>
6256        </parameters>
6257      </method>
6258      <method name="unref"
6259              c:identifier="gsk_path_builder_unref"
6260              version="4.14">
6261        <doc xml:space="preserve"
6262             filename="gsk/gskpathbuilder.c"
6263             line="217">Releases a reference on the given builder.</doc>
6264        <source-position filename="gsk/gskpathbuilder.h" line="42"/>
6265        <return-value transfer-ownership="none">
6266          <type name="none" c:type="void"/>
6267        </return-value>
6268        <parameters>
6269          <instance-parameter name="self" transfer-ownership="none">
6270            <doc xml:space="preserve"
6271                 filename="gsk/gskpathbuilder.c"
6272                 line="219">a path builder</doc>
6273            <type name="PathBuilder" c:type="GskPathBuilder*"/>
6274          </instance-parameter>
6275        </parameters>
6276      </method>
6277    </record>
6278    <enumeration name="PathDirection"
6279                 version="4.14"
6280                 glib:type-name="GskPathDirection"
6281                 glib:get-type="gsk_path_direction_get_type"
6282                 c:type="GskPathDirection">
6283      <doc xml:space="preserve"
6284           filename="gsk/gskenums.h"
6285           line="350">Used to pick one of the four tangents at a given point on the path.
6286
6287Note that the directions for @GSK_PATH_FROM_START/@GSK_PATH_TO_END and
6288@GSK_PATH_TO_START/@GSK_PATH_FROM_END will coincide for smooth points.
6289Only sharp turns will exhibit four different directions.
6290
6291&lt;picture&gt;
6292  &lt;source srcset="directions-dark.png" media="(prefers-color-scheme: dark)"&gt;
6293  &lt;img alt="Path Tangents" src="directions-light.png"&gt;
6294&lt;/picture&gt;</doc>
6295      <member name="from_start"
6296              value="0"
6297              c:identifier="GSK_PATH_FROM_START"
6298              glib:nick="from-start"
6299              glib:name="GSK_PATH_FROM_START">
6300        <doc xml:space="preserve"
6301             filename="gsk/gskenums.h"
6302             line="352">The tangent in path direction of the incoming side
6303  of the path</doc>
6304      </member>
6305      <member name="to_start"
6306              value="1"
6307              c:identifier="GSK_PATH_TO_START"
6308              glib:nick="to-start"
6309              glib:name="GSK_PATH_TO_START">
6310        <doc xml:space="preserve"
6311             filename="gsk/gskenums.h"
6312             line="354">The tangent against path direction of the incoming side
6313  of the path</doc>
6314      </member>
6315      <member name="to_end"
6316              value="2"
6317              c:identifier="GSK_PATH_TO_END"
6318              glib:nick="to-end"
6319              glib:name="GSK_PATH_TO_END">
6320        <doc xml:space="preserve"
6321             filename="gsk/gskenums.h"
6322             line="356">The tangent in path direction of the outgoing side
6323  of the path</doc>
6324      </member>
6325      <member name="from_end"
6326              value="3"
6327              c:identifier="GSK_PATH_FROM_END"
6328              glib:nick="from-end"
6329              glib:name="GSK_PATH_FROM_END">
6330        <doc xml:space="preserve"
6331             filename="gsk/gskenums.h"
6332             line="358">The tangent against path direction of the outgoing
6333  side of the path</doc>
6334      </member>
6335    </enumeration>
6336    <bitfield name="PathForeachFlags"
6337              version="4.14"
6338              glib:type-name="GskPathForeachFlags"
6339              glib:get-type="gsk_path_foreach_flags_get_type"
6340              c:type="GskPathForeachFlags">
6341      <doc xml:space="preserve"
6342           filename="gsk/gskpath.h"
6343           line="31">Flags that can be passed to gsk_path_foreach() to influence what
6344kinds of operations the path is decomposed into.
6345
6346By default, [method@Gsk.Path.foreach] will only emit a path with all
6347operations flattened to straight lines to allow for maximum compatibility.
6348The only operations emitted will be `GSK_PATH_MOVE`, `GSK_PATH_LINE` and
6349`GSK_PATH_CLOSE`.</doc>
6350      <member name="only_lines"
6351              value="0"
6352              c:identifier="GSK_PATH_FOREACH_ALLOW_ONLY_LINES"
6353              glib:nick="only-lines"
6354              glib:name="GSK_PATH_FOREACH_ALLOW_ONLY_LINES">
6355        <doc xml:space="preserve"
6356             filename="gsk/gskpath.h"
6357             line="33">The default behavior, only allow lines.</doc>
6358      </member>
6359      <member name="quad"
6360              value="1"
6361              c:identifier="GSK_PATH_FOREACH_ALLOW_QUAD"
6362              glib:nick="quad"
6363              glib:name="GSK_PATH_FOREACH_ALLOW_QUAD">
6364        <doc xml:space="preserve"
6365             filename="gsk/gskpath.h"
6366             line="34">Allow emission of `GSK_PATH_QUAD` operations</doc>
6367      </member>
6368      <member name="cubic"
6369              value="2"
6370              c:identifier="GSK_PATH_FOREACH_ALLOW_CUBIC"
6371              glib:nick="cubic"
6372              glib:name="GSK_PATH_FOREACH_ALLOW_CUBIC">
6373        <doc xml:space="preserve"
6374             filename="gsk/gskpath.h"
6375             line="35">Allow emission of `GSK_PATH_CUBIC` operations.</doc>
6376      </member>
6377      <member name="conic"
6378              value="4"
6379              c:identifier="GSK_PATH_FOREACH_ALLOW_CONIC"
6380              glib:nick="conic"
6381              glib:name="GSK_PATH_FOREACH_ALLOW_CONIC">
6382        <doc xml:space="preserve"
6383             filename="gsk/gskpath.h"
6384             line="36">Allow emission of `GSK_PATH_CONIC` operations.</doc>
6385      </member>
6386    </bitfield>
6387    <callback name="PathForeachFunc" c:type="GskPathForeachFunc">
6388      <doc xml:space="preserve"
6389           filename="gsk/gskpath.h"
6390           line="56">Type of the callback to iterate through the operations of a path.
6391
6392For each operation, the callback is given the @op itself, the points
6393that the operation is applied to in @pts, and a @weight for conic
6394curves. The @n_pts argument is somewhat redundant, since the number
6395of points can be inferred from the operation.
6396
6397Each contour of the path starts with a @GSK_PATH_MOVE operation.
6398Closed contours end with a @GSK_PATH_CLOSE operation.</doc>
6399      <source-position filename="gsk/gskpath.h" line="77"/>
6400      <return-value transfer-ownership="none">
6401        <doc xml:space="preserve"
6402             filename="gsk/gskpath.h"
6403             line="74">%TRUE to continue iterating the path, %FALSE to
6404  immediately abort and not call the function again.</doc>
6405        <type name="gboolean" c:type="gboolean"/>
6406      </return-value>
6407      <parameters>
6408        <parameter name="op" transfer-ownership="none">
6409          <doc xml:space="preserve"
6410               filename="gsk/gskpath.h"
6411               line="58">The operation</doc>
6412          <type name="PathOperation" c:type="GskPathOperation"/>
6413        </parameter>
6414        <parameter name="pts" transfer-ownership="none">
6415          <doc xml:space="preserve"
6416               filename="gsk/gskpath.h"
6417               line="59">The points of the operation</doc>
6418          <array length="2"
6419                 zero-terminated="0"
6420                 c:type="const graphene_point_t*">
6421            <type name="Graphene.Point" c:type="graphene_point_t"/>
6422          </array>
6423        </parameter>
6424        <parameter name="n_pts" transfer-ownership="none">
6425          <doc xml:space="preserve"
6426               filename="gsk/gskpath.h"
6427               line="60">The number of points</doc>
6428          <type name="gsize" c:type="gsize"/>
6429        </parameter>
6430        <parameter name="weight" transfer-ownership="none">
6431          <doc xml:space="preserve"
6432               filename="gsk/gskpath.h"
6433               line="61">The weight for conic curves, or unused if not a conic curve</doc>
6434          <type name="gfloat" c:type="float"/>
6435        </parameter>
6436        <parameter name="user_data"
6437                   transfer-ownership="none"
6438                   nullable="1"
6439                   allow-none="1"
6440                   closure="4">
6441          <doc xml:space="preserve"
6442               filename="gsk/gskpath.h"
6443               line="62">The user data provided with the function</doc>
6444          <type name="gpointer" c:type="gpointer"/>
6445        </parameter>
6446      </parameters>
6447    </callback>
6448    <enumeration name="PathIntersection"
6449                 version="4.20"
6450                 glib:type-name="GskPathIntersection"
6451                 glib:get-type="gsk_path_intersection_get_type"
6452                 c:type="GskPathIntersection">
6453      <doc xml:space="preserve"
6454           filename="gsk/gskpath.h"
6455           line="146">The values of this enumeration classify intersections
6456between paths.</doc>
6457      <member name="none"
6458              value="0"
6459              c:identifier="GSK_PATH_INTERSECTION_NONE"
6460              glib:nick="none"
6461              glib:name="GSK_PATH_INTERSECTION_NONE">
6462        <doc xml:space="preserve"
6463             filename="gsk/gskpath.h"
6464             line="148">No intersection</doc>
6465      </member>
6466      <member name="normal"
6467              value="1"
6468              c:identifier="GSK_PATH_INTERSECTION_NORMAL"
6469              glib:nick="normal"
6470              glib:name="GSK_PATH_INTERSECTION_NORMAL">
6471        <doc xml:space="preserve"
6472             filename="gsk/gskpath.h"
6473             line="149">A normal intersection, where the two paths
6474  cross each other</doc>
6475      </member>
6476      <member name="start"
6477              value="2"
6478              c:identifier="GSK_PATH_INTERSECTION_START"
6479              glib:nick="start"
6480              glib:name="GSK_PATH_INTERSECTION_START">
6481        <doc xml:space="preserve"
6482             filename="gsk/gskpath.h"
6483             line="151">The start of a segment where the two paths coincide</doc>
6484      </member>
6485      <member name="end"
6486              value="3"
6487              c:identifier="GSK_PATH_INTERSECTION_END"
6488              glib:nick="end"
6489              glib:name="GSK_PATH_INTERSECTION_END">
6490        <doc xml:space="preserve"
6491             filename="gsk/gskpath.h"
6492             line="152">The end of a segment where the two paths coincide</doc>
6493      </member>
6494    </enumeration>
6495    <callback name="PathIntersectionFunc"
6496              c:type="GskPathIntersectionFunc"
6497              version="4.20">
6498      <doc xml:space="preserve"
6499           filename="gsk/gskpath.h"
6500           line="167">Prototype of the callback to iterate through the
6501intersections of two paths.</doc>
6502      <source-position filename="gsk/gskpath.h" line="184"/>
6503      <return-value transfer-ownership="none">
6504        <doc xml:space="preserve"
6505             filename="gsk/gskpath.h"
6506             line="179">true to continue iterating, false to
6507  stop the iteration and not call the function again</doc>
6508        <type name="gboolean" c:type="gboolean"/>
6509      </return-value>
6510      <parameters>
6511        <parameter name="path1" transfer-ownership="none">
6512          <doc xml:space="preserve"
6513               filename="gsk/gskpath.h"
6514               line="169">the first path</doc>
6515          <type name="Path" c:type="GskPath*"/>
6516        </parameter>
6517        <parameter name="point1" transfer-ownership="none">
6518          <doc xml:space="preserve"
6519               filename="gsk/gskpath.h"
6520               line="170">the intersection as point on @path1</doc>
6521          <type name="PathPoint" c:type="const GskPathPoint*"/>
6522        </parameter>
6523        <parameter name="path2" transfer-ownership="none">
6524          <doc xml:space="preserve"
6525               filename="gsk/gskpath.h"
6526               line="171">the second path</doc>
6527          <type name="Path" c:type="GskPath*"/>
6528        </parameter>
6529        <parameter name="point2" transfer-ownership="none">
6530          <doc xml:space="preserve"
6531               filename="gsk/gskpath.h"
6532               line="172">the intersection as point on @path2</doc>
6533          <type name="PathPoint" c:type="const GskPathPoint*"/>
6534        </parameter>
6535        <parameter name="kind" transfer-ownership="none">
6536          <doc xml:space="preserve"
6537               filename="gsk/gskpath.h"
6538               line="173">the nature of the intersection</doc>
6539          <type name="PathIntersection" c:type="GskPathIntersection"/>
6540        </parameter>
6541        <parameter name="user_data"
6542                   transfer-ownership="none"
6543                   nullable="1"
6544                   allow-none="1"
6545                   closure="5">
6546          <doc xml:space="preserve"
6547               filename="gsk/gskpath.h"
6548               line="174">user data</doc>
6549          <type name="gpointer" c:type="gpointer"/>
6550        </parameter>
6551      </parameters>
6552    </callback>
6553    <record name="PathMeasure"
6554            c:type="GskPathMeasure"
6555            opaque="1"
6556            version="4.14"
6557            glib:type-name="GskPathMeasure"
6558            glib:get-type="gsk_path_measure_get_type"
6559            c:symbol-prefix="path_measure">
6560      <doc xml:space="preserve"
6561           filename="gsk/gskpathmeasure.c"
6562           line="29">Performs measurements on paths such as determining the length of the path.
6563
6564Many measuring operations require sampling the path length
6565at intermediate points. Therefore, a `GskPathMeasure` has
6566a tolerance that determines what precision is required
6567for such approximations.
6568
6569A `GskPathMeasure` struct is a reference counted struct
6570and should be treated as opaque.</doc>
6571      <source-position filename="gsk/gsktypes.h" line="30"/>
6572      <constructor name="new"
6573                   c:identifier="gsk_path_measure_new"
6574                   version="4.14">
6575        <doc xml:space="preserve"
6576             filename="gsk/gskpathmeasure.c"
6577             line="70">Creates a measure object for the given @path with the
6578default tolerance.</doc>
6579        <source-position filename="gsk/gskpathmeasure.h" line="37"/>
6580        <return-value transfer-ownership="full">
6581          <doc xml:space="preserve"
6582               filename="gsk/gskpathmeasure.c"
6583               line="77">a new `GskPathMeasure` representing @path</doc>
6584          <type name="PathMeasure" c:type="GskPathMeasure*"/>
6585        </return-value>
6586        <parameters>
6587          <parameter name="path" transfer-ownership="none">
6588            <doc xml:space="preserve"
6589                 filename="gsk/gskpathmeasure.c"
6590                 line="72">the path to measure</doc>
6591            <type name="Path" c:type="GskPath*"/>
6592          </parameter>
6593        </parameters>
6594      </constructor>
6595      <constructor name="new_with_tolerance"
6596                   c:identifier="gsk_path_measure_new_with_tolerance"
6597                   version="4.14">
6598        <doc xml:space="preserve"
6599             filename="gsk/gskpathmeasure.c"
6600             line="87">Creates a measure object for the given @path and @tolerance.</doc>
6601        <source-position filename="gsk/gskpathmeasure.h" line="39"/>
6602        <return-value transfer-ownership="full">
6603          <doc xml:space="preserve"
6604               filename="gsk/gskpathmeasure.c"
6605               line="94">a new `GskPathMeasure` representing @path</doc>
6606          <type name="PathMeasure" c:type="GskPathMeasure*"/>
6607        </return-value>
6608        <parameters>
6609          <parameter name="path" transfer-ownership="none">
6610            <doc xml:space="preserve"
6611                 filename="gsk/gskpathmeasure.c"
6612                 line="89">the path to measure</doc>
6613            <type name="Path" c:type="GskPath*"/>
6614          </parameter>
6615          <parameter name="tolerance" transfer-ownership="none">
6616            <doc xml:space="preserve"
6617                 filename="gsk/gskpathmeasure.c"
6618                 line="90">the tolerance for measuring operations</doc>
6619            <type name="gfloat" c:type="float"/>
6620          </parameter>
6621        </parameters>
6622      </constructor>
6623      <method name="get_length"
6624              c:identifier="gsk_path_measure_get_length"
6625              version="4.14">
6626        <doc xml:space="preserve"
6627             filename="gsk/gskpathmeasure.c"
6628             line="212">Gets the length of the path being measured.
6629
6630The length is cached, so this function does not do any work.</doc>
6631        <source-position filename="gsk/gskpathmeasure.h" line="53"/>
6632        <return-value transfer-ownership="none">
6633          <doc xml:space="preserve"
6634               filename="gsk/gskpathmeasure.c"
6635               line="220">the length of the path measured by @self</doc>
6636          <type name="gfloat" c:type="float"/>
6637        </return-value>
6638        <parameters>
6639          <instance-parameter name="self" transfer-ownership="none">
6640            <doc xml:space="preserve"
6641                 filename="gsk/gskpathmeasure.c"
6642                 line="214">a path measure</doc>
6643            <type name="PathMeasure" c:type="GskPathMeasure*"/>
6644          </instance-parameter>
6645        </parameters>
6646      </method>
6647      <method name="get_path"
6648              c:identifier="gsk_path_measure_get_path"
6649              version="4.14">
6650        <doc xml:space="preserve"
6651             filename="gsk/gskpathmeasure.c"
6652             line="180">Returns the path that the measure was created for.</doc>
6653        <source-position filename="gsk/gskpathmeasure.h" line="48"/>
6654        <return-value transfer-ownership="none">
6655          <doc xml:space="preserve"
6656               filename="gsk/gskpathmeasure.c"
6657               line="186">the path of @self</doc>
6658          <type name="Path" c:type="GskPath*"/>
6659        </return-value>
6660        <parameters>
6661          <instance-parameter name="self" transfer-ownership="none">
6662            <doc xml:space="preserve"
6663                 filename="gsk/gskpathmeasure.c"
6664                 line="182">a path measure</doc>
6665            <type name="PathMeasure" c:type="GskPathMeasure*"/>
6666          </instance-parameter>
6667        </parameters>
6668      </method>
6669      <method name="get_point"
6670              c:identifier="gsk_path_measure_get_point"
6671              version="4.14">
6672        <doc xml:space="preserve"
6673             filename="gsk/gskpathmeasure.c"
6674             line="242">Gets the point at the given distance into the path.
6675
6676An empty path has no points, so false is returned in that case.</doc>
6677        <source-position filename="gsk/gskpathmeasure.h" line="56"/>
6678        <return-value transfer-ownership="none">
6679          <doc xml:space="preserve"
6680               filename="gsk/gskpathmeasure.c"
6681               line="252">true if @result was set</doc>
6682          <type name="gboolean" c:type="gboolean"/>
6683        </return-value>
6684        <parameters>
6685          <instance-parameter name="self" transfer-ownership="none">
6686            <doc xml:space="preserve"
6687                 filename="gsk/gskpathmeasure.c"
6688                 line="244">a path measure</doc>
6689            <type name="PathMeasure" c:type="GskPathMeasure*"/>
6690          </instance-parameter>
6691          <parameter name="distance" transfer-ownership="none">
6692            <doc xml:space="preserve"
6693                 filename="gsk/gskpathmeasure.c"
6694                 line="245">the distance</doc>
6695            <type name="gfloat" c:type="float"/>
6696          </parameter>
6697          <parameter name="result"
6698                     direction="out"
6699                     caller-allocates="1"
6700                     transfer-ownership="none">
6701            <doc xml:space="preserve"
6702                 filename="gsk/gskpathmeasure.c"
6703                 line="246">return location for the point</doc>
6704            <type name="PathPoint" c:type="GskPathPoint*"/>
6705          </parameter>
6706        </parameters>
6707      </method>
6708      <method name="get_tolerance"
6709              c:identifier="gsk_path_measure_get_tolerance"
6710              version="4.14">
6711        <doc xml:space="preserve"
6712             filename="gsk/gskpathmeasure.c"
6713             line="196">Returns the tolerance that the measure was created with.</doc>
6714        <source-position filename="gsk/gskpathmeasure.h" line="50"/>
6715        <return-value transfer-ownership="none">
6716          <doc xml:space="preserve"
6717               filename="gsk/gskpathmeasure.c"
6718               line="202">the tolerance of @self</doc>
6719          <type name="gfloat" c:type="float"/>
6720        </return-value>
6721        <parameters>
6722          <instance-parameter name="self" transfer-ownership="none">
6723            <doc xml:space="preserve"
6724                 filename="gsk/gskpathmeasure.c"
6725                 line="198">a path measure</doc>
6726            <type name="PathMeasure" c:type="GskPathMeasure*"/>
6727          </instance-parameter>
6728        </parameters>
6729      </method>
6730      <method name="ref" c:identifier="gsk_path_measure_ref" version="4.14">
6731        <doc xml:space="preserve"
6732             filename="gsk/gskpathmeasure.c"
6733             line="128">Increases the reference count of a `GskPathMeasure` by one.</doc>
6734        <source-position filename="gsk/gskpathmeasure.h" line="43"/>
6735        <return-value transfer-ownership="full">
6736          <doc xml:space="preserve"
6737               filename="gsk/gskpathmeasure.c"
6738               line="134">the passed in `GskPathMeasure`.</doc>
6739          <type name="PathMeasure" c:type="GskPathMeasure*"/>
6740        </return-value>
6741        <parameters>
6742          <instance-parameter name="self" transfer-ownership="none">
6743            <doc xml:space="preserve"
6744                 filename="gsk/gskpathmeasure.c"
6745                 line="130">a path measure</doc>
6746            <type name="PathMeasure" c:type="GskPathMeasure*"/>
6747          </instance-parameter>
6748        </parameters>
6749      </method>
6750      <method name="unref"
6751              c:identifier="gsk_path_measure_unref"
6752              version="4.14">
6753        <doc xml:space="preserve"
6754             filename="gsk/gskpathmeasure.c"
6755             line="148">Decreases the reference count of a `GskPathMeasure` by one.
6756
6757If the resulting reference count is zero, frees the object.</doc>
6758        <source-position filename="gsk/gskpathmeasure.h" line="45"/>
6759        <return-value transfer-ownership="none">
6760          <type name="none" c:type="void"/>
6761        </return-value>
6762        <parameters>
6763          <instance-parameter name="self" transfer-ownership="none">
6764            <doc xml:space="preserve"
6765                 filename="gsk/gskpathmeasure.c"
6766                 line="150">a path measure</doc>
6767            <type name="PathMeasure" c:type="GskPathMeasure*"/>
6768          </instance-parameter>
6769        </parameters>
6770      </method>
6771    </record>
6772    <enumeration name="PathOperation"
6773                 version="4.14"
6774                 glib:type-name="GskPathOperation"
6775                 glib:get-type="gsk_path_operation_get_type"
6776                 c:type="GskPathOperation">
6777      <doc xml:space="preserve"
6778           filename="gsk/gskenums.h"
6779           line="318">Describes the segments of a `GskPath`.
6780
6781More values may be added in the future.</doc>
6782      <member name="move"
6783              value="0"
6784              c:identifier="GSK_PATH_MOVE"
6785              glib:nick="move"
6786              glib:name="GSK_PATH_MOVE">
6787        <doc xml:space="preserve"
6788             filename="gsk/gskenums.h"
6789             line="320">A move-to operation, with 1 point describing the target point.</doc>
6790      </member>
6791      <member name="close"
6792              value="1"
6793              c:identifier="GSK_PATH_CLOSE"
6794              glib:nick="close"
6795              glib:name="GSK_PATH_CLOSE">
6796        <doc xml:space="preserve"
6797             filename="gsk/gskenums.h"
6798             line="321">A close operation ending the current contour with a line back
6799  to the starting point. Two points describe the start and end of the line.</doc>
6800      </member>
6801      <member name="line"
6802              value="2"
6803              c:identifier="GSK_PATH_LINE"
6804              glib:nick="line"
6805              glib:name="GSK_PATH_LINE">
6806        <doc xml:space="preserve"
6807             filename="gsk/gskenums.h"
6808             line="323">A line-to operation, with 2 points describing the start and
6809  end point of a straight line.</doc>
6810      </member>
6811      <member name="quad"
6812              value="3"
6813              c:identifier="GSK_PATH_QUAD"
6814              glib:nick="quad"
6815              glib:name="GSK_PATH_QUAD">
6816        <doc xml:space="preserve"
6817             filename="gsk/gskenums.h"
6818             line="325">A curve-to operation describing a quadratic Bézier curve
6819  with 3 points describing the start point, the control point and the end
6820  point of the curve.</doc>
6821      </member>
6822      <member name="cubic"
6823              value="4"
6824              c:identifier="GSK_PATH_CUBIC"
6825              glib:nick="cubic"
6826              glib:name="GSK_PATH_CUBIC">
6827        <doc xml:space="preserve"
6828             filename="gsk/gskenums.h"
6829             line="328">A curve-to operation describing a cubic Bézier curve with 4
6830  points describing the start point, the two control points and the end point
6831  of the curve.</doc>
6832      </member>
6833      <member name="conic"
6834              value="5"
6835              c:identifier="GSK_PATH_CONIC"
6836              glib:nick="conic"
6837              glib:name="GSK_PATH_CONIC">
6838        <doc xml:space="preserve"
6839             filename="gsk/gskenums.h"
6840             line="331">A rational quadratic Bézier curve with 3 points describing
6841  the start point, control point and end point of the curve. A weight for the
6842  curve will be passed, too.</doc>
6843      </member>
6844    </enumeration>
6845    <record name="PathPoint"
6846            c:type="GskPathPoint"
6847            version="4.14"
6848            glib:type-name="GskPathPoint"
6849            glib:get-type="gsk_path_point_get_type"
6850            c:symbol-prefix="path_point">
6851      <doc xml:space="preserve"
6852           filename="gsk/gskpathpoint.c"
6853           line="30">Represents a point on a path.
6854
6855It can be queried for properties of the path at that point,
6856such as its tangent or its curvature.
6857
6858To obtain a `GskPathPoint`, use [method@Gsk.Path.get_closest_point],
6859[method@Gsk.Path.get_start_point], [method@Gsk.Path.get_end_point]
6860or [method@Gsk.PathMeasure.get_point].
6861
6862Note that `GskPathPoint` structs are meant to be stack-allocated,
6863and don't hold a reference to the path object they are obtained from.
6864It is the callers responsibility to keep a reference to the path
6865as long as the `GskPathPoint` is used.</doc>
6866      <source-position filename="gsk/gskpathpoint.h" line="47"/>
6867      <union>
6868        <source-position filename="gsk/gskpathpoint.h" line="46"/>
6869        <record>
6870          <source-position filename="gsk/gskpathpoint.h" line="43"/>
6871          <field name="contour" writable="1">
6872            <type name="gsize" c:type="gsize"/>
6873          </field>
6874          <field name="idx" writable="1">
6875            <type name="gsize" c:type="gsize"/>
6876          </field>
6877          <field name="t" writable="1">
6878            <type name="gfloat" c:type="float"/>
6879          </field>
6880        </record>
6881        <field name="padding" writable="1">
6882          <array zero-terminated="0" fixed-size="8">
6883            <type name="gpointer" c:type="gpointer"/>
6884          </array>
6885        </field>
6886        <field name="alignment" writable="1">
6887          <type name="Graphene.Vec4" c:type="graphene_vec4_t"/>
6888        </field>
6889      </union>
6890      <method name="compare"
6891              c:identifier="gsk_path_point_compare"
6892              version="4.14">
6893        <doc xml:space="preserve"
6894             filename="gsk/gskpathpoint.c"
6895             line="123">Returns whether @point1 is before or after @point2.</doc>
6896        <source-position filename="gsk/gskpathpoint.h" line="63"/>
6897        <return-value transfer-ownership="none">
6898          <doc xml:space="preserve"
6899               filename="gsk/gskpathpoint.c"
6900               line="130">-1 if @point1 is before @point2,
6901  1 if @point1 is after @point2,
6902  0 if they are equal</doc>
6903          <type name="gint" c:type="int"/>
6904        </return-value>
6905        <parameters>
6906          <instance-parameter name="point1" transfer-ownership="none">
6907            <doc xml:space="preserve"
6908                 filename="gsk/gskpathpoint.c"
6909                 line="125">a path point</doc>
6910            <type name="PathPoint" c:type="const GskPathPoint*"/>
6911          </instance-parameter>
6912          <parameter name="point2" transfer-ownership="none">
6913            <doc xml:space="preserve"
6914                 filename="gsk/gskpathpoint.c"
6915                 line="126">another path point</doc>
6916            <type name="PathPoint" c:type="const GskPathPoint*"/>
6917          </parameter>
6918        </parameters>
6919      </method>
6920      <method name="copy" c:identifier="gsk_path_point_copy" version="4.14">
6921        <doc xml:space="preserve"
6922             filename="gsk/gskpathpoint.c"
6923             line="54">Copies a path point.</doc>
6924        <source-position filename="gsk/gskpathpoint.h" line="53"/>
6925        <return-value transfer-ownership="full">
6926          <doc xml:space="preserve"
6927               filename="gsk/gskpathpoint.c"
6928               line="60">the copied point</doc>
6929          <type name="PathPoint" c:type="GskPathPoint*"/>
6930        </return-value>
6931        <parameters>
6932          <instance-parameter name="point" transfer-ownership="none">
6933            <doc xml:space="preserve"
6934                 filename="gsk/gskpathpoint.c"
6935                 line="56">a path point</doc>
6936            <type name="PathPoint" c:type="GskPathPoint*"/>
6937          </instance-parameter>
6938        </parameters>
6939      </method>
6940      <method name="equal" c:identifier="gsk_path_point_equal" version="4.14">
6941        <doc xml:space="preserve"
6942             filename="gsk/gskpathpoint.c"
6943             line="90">Returns whether the two path points refer to the same
6944location on all paths.
6945
6946Note that the start- and endpoint of a closed contour
6947will compare nonequal according to this definition.
6948Use [method@Gsk.Path.is_closed] to find out if the
6949start- and endpoint of a concrete path refer to the
6950same location.</doc>
6951        <source-position filename="gsk/gskpathpoint.h" line="59"/>
6952        <return-value transfer-ownership="none">
6953          <doc xml:space="preserve"
6954               filename="gsk/gskpathpoint.c"
6955               line="104">true if @point1 and @point2 are equal</doc>
6956          <type name="gboolean" c:type="gboolean"/>
6957        </return-value>
6958        <parameters>
6959          <instance-parameter name="point1" transfer-ownership="none">
6960            <doc xml:space="preserve"
6961                 filename="gsk/gskpathpoint.c"
6962                 line="92">a path point</doc>
6963            <type name="PathPoint" c:type="const GskPathPoint*"/>
6964          </instance-parameter>
6965          <parameter name="point2" transfer-ownership="none">
6966            <doc xml:space="preserve"
6967                 filename="gsk/gskpathpoint.c"
6968                 line="93">another path point</doc>
6969            <type name="PathPoint" c:type="const GskPathPoint*"/>
6970          </parameter>
6971        </parameters>
6972      </method>
6973      <method name="free" c:identifier="gsk_path_point_free" version="4.14">
6974        <doc xml:space="preserve"
6975             filename="gsk/gskpathpoint.c"
6976             line="76">Frees a path point copied by [method@Gsk.PathPoint.copy].</doc>
6977        <source-position filename="gsk/gskpathpoint.h" line="56"/>
6978        <return-value transfer-ownership="none">
6979          <type name="none" c:type="void"/>
6980        </return-value>
6981        <parameters>
6982          <instance-parameter name="point" transfer-ownership="none">
6983            <doc xml:space="preserve"
6984                 filename="gsk/gskpathpoint.c"
6985                 line="78">a path point</doc>
6986            <type name="PathPoint" c:type="GskPathPoint*"/>
6987          </instance-parameter>
6988        </parameters>
6989      </method>
6990      <method name="get_curvature"
6991              c:identifier="gsk_path_point_get_curvature"
6992              version="4.14">
6993        <doc xml:space="preserve"
6994             filename="gsk/gskpathpoint.c"
6995             line="259">Calculates the curvature of the path at the point.
6996
6997Optionally, returns the center of the osculating circle as well.
6998The curvature is the inverse of the radius of the osculating circle.
6999
7000Lines have a curvature of zero (indicating an osculating circle of
7001infinite radius). In this case, the @center is not modified.
7002
7003Circles with a radius of zero have `INFINITY` as curvature
7004
7005Note that certain points on a path may not have a single curvature,
7006such as sharp turns. At such points, there are two curvatures — the
7007(limit of) the curvature of the path going into the point, and the
7008(limit of) the curvature of the path coming out of it. The @direction
7009argument lets you choose which one to get.
7010
7011&lt;picture&gt;
7012  &lt;source srcset="curvature-dark.png" media="(prefers-color-scheme: dark)"&gt;
7013  &lt;img alt="Osculating circle" src="curvature-light.png"&gt;
7014&lt;/picture&gt;</doc>
7015        <source-position filename="gsk/gskpathpoint.h" line="83"/>
7016        <return-value transfer-ownership="none">
7017          <doc xml:space="preserve"
7018               filename="gsk/gskpathpoint.c"
7019               line="288">the curvature of the path at the given point</doc>
7020          <type name="gfloat" c:type="float"/>
7021        </return-value>
7022        <parameters>
7023          <instance-parameter name="point" transfer-ownership="none">
7024            <doc xml:space="preserve"
7025                 filename="gsk/gskpathpoint.c"
7026                 line="261">a path point</doc>
7027            <type name="PathPoint" c:type="const GskPathPoint*"/>
7028          </instance-parameter>
7029          <parameter name="path" transfer-ownership="none">
7030            <doc xml:space="preserve"
7031                 filename="gsk/gskpathpoint.c"
7032                 line="262">the path that @point is on</doc>
7033            <type name="Path" c:type="GskPath*"/>
7034          </parameter>
7035          <parameter name="direction" transfer-ownership="none">
7036            <doc xml:space="preserve"
7037                 filename="gsk/gskpathpoint.c"
7038                 line="263">the direction for which to return the curvature</doc>
7039            <type name="PathDirection" c:type="GskPathDirection"/>
7040          </parameter>
7041          <parameter name="center"
7042                     direction="out"
7043                     caller-allocates="1"
7044                     transfer-ownership="none"
7045                     nullable="1">
7046            <doc xml:space="preserve"
7047                 filename="gsk/gskpathpoint.c"
7048                 line="264">return location for
7049  the center of the osculating circle</doc>
7050            <type name="Graphene.Point" c:type="graphene_point_t*"/>
7051          </parameter>
7052        </parameters>
7053      </method>
7054      <method name="get_distance"
7055              c:identifier="gsk_path_point_get_distance"
7056              version="4.14">
7057        <doc xml:space="preserve"
7058             filename="gsk/gskpathmeasure.c"
7059             line="295">Returns the distance from the beginning of the path
7060to the point.</doc>
7061        <source-position filename="gsk/gskpathpoint.h" line="89"/>
7062        <return-value transfer-ownership="none">
7063          <doc xml:space="preserve"
7064               filename="gsk/gskpathmeasure.c"
7065               line="303">the distance of @point</doc>
7066          <type name="gfloat" c:type="float"/>
7067        </return-value>
7068        <parameters>
7069          <instance-parameter name="point" transfer-ownership="none">
7070            <doc xml:space="preserve"
7071                 filename="gsk/gskpathmeasure.c"
7072                 line="297">a point on the path</doc>
7073            <type name="PathPoint" c:type="const GskPathPoint*"/>
7074          </instance-parameter>
7075          <parameter name="measure" transfer-ownership="none">
7076            <doc xml:space="preserve"
7077                 filename="gsk/gskpathmeasure.c"
7078                 line="298">a path measure for the path</doc>
7079            <type name="PathMeasure" c:type="GskPathMeasure*"/>
7080          </parameter>
7081        </parameters>
7082      </method>
7083      <method name="get_position"
7084              c:identifier="gsk_path_point_get_position"
7085              version="4.14">
7086        <doc xml:space="preserve"
7087             filename="gsk/gskpathpoint.c"
7088             line="159">Gets the position of the point.</doc>
7089        <source-position filename="gsk/gskpathpoint.h" line="67"/>
7090        <return-value transfer-ownership="none">
7091          <type name="none" c:type="void"/>
7092        </return-value>
7093        <parameters>
7094          <instance-parameter name="point" transfer-ownership="none">
7095            <doc xml:space="preserve"
7096                 filename="gsk/gskpathpoint.c"
7097                 line="161">a path point</doc>
7098            <type name="PathPoint" c:type="const GskPathPoint*"/>
7099          </instance-parameter>
7100          <parameter name="path" transfer-ownership="none">
7101            <doc xml:space="preserve"
7102                 filename="gsk/gskpathpoint.c"
7103                 line="162">the path that @point is on</doc>
7104            <type name="Path" c:type="GskPath*"/>
7105          </parameter>
7106          <parameter name="position"
7107                     direction="out"
7108                     caller-allocates="1"
7109                     transfer-ownership="none">
7110            <doc xml:space="preserve"
7111                 filename="gsk/gskpathpoint.c"
7112                 line="163">Return location for
7113  the coordinates of the point</doc>
7114            <type name="Graphene.Point" c:type="graphene_point_t*"/>
7115          </parameter>
7116        </parameters>
7117      </method>
7118      <method name="get_rotation"
7119              c:identifier="gsk_path_point_get_rotation"
7120              version="4.14">
7121        <doc xml:space="preserve"
7122             filename="gsk/gskpathpoint.c"
7123             line="226">Gets the direction of the tangent at a given point.
7124
7125This is a convenience variant of [method@Gsk.PathPoint.get_tangent]
7126that returns the angle between the tangent and the X axis. The angle
7127can e.g. be used in
7128[gtk_snapshot_rotate()](../gtk4/method.Snapshot.rotate.html).</doc>
7129        <source-position filename="gsk/gskpathpoint.h" line="78"/>
7130        <return-value transfer-ownership="none">
7131          <doc xml:space="preserve"
7132               filename="gsk/gskpathpoint.c"
7133               line="239">the angle between the tangent and the X axis, in degrees</doc>
7134          <type name="gfloat" c:type="float"/>
7135        </return-value>
7136        <parameters>
7137          <instance-parameter name="point" transfer-ownership="none">
7138            <doc xml:space="preserve"
7139                 filename="gsk/gskpathpoint.c"
7140                 line="228">a path point</doc>
7141            <type name="PathPoint" c:type="const GskPathPoint*"/>
7142          </instance-parameter>
7143          <parameter name="path" transfer-ownership="none">
7144            <doc xml:space="preserve"
7145                 filename="gsk/gskpathpoint.c"
7146                 line="229">the path that @point is on</doc>
7147            <type name="Path" c:type="GskPath*"/>
7148          </parameter>
7149          <parameter name="direction" transfer-ownership="none">
7150            <doc xml:space="preserve"
7151                 filename="gsk/gskpathpoint.c"
7152                 line="230">the direction for which to return the rotation</doc>
7153            <type name="PathDirection" c:type="GskPathDirection"/>
7154          </parameter>
7155        </parameters>
7156      </method>
7157      <method name="get_tangent"
7158              c:identifier="gsk_path_point_get_tangent"
7159              version="4.14">
7160        <doc xml:space="preserve"
7161             filename="gsk/gskpathpoint.c"
7162             line="185">Gets the tangent of the path at the point.
7163
7164Note that certain points on a path may not have a single
7165tangent, such as sharp turns. At such points, there are
7166two tangents — the direction of the path going into the
7167point, and the direction coming out of it. The @direction
7168argument lets you choose which one to get.
7169
7170If the path is just a single point (e.g. a circle with
7171radius zero), then the tangent is set to `0, 0`.
7172
7173If you want to orient something in the direction of the
7174path, [method@Gsk.PathPoint.get_rotation] may be more
7175convenient to use.</doc>
7176        <source-position filename="gsk/gskpathpoint.h" line="72"/>
7177        <return-value transfer-ownership="none">
7178          <type name="none" c:type="void"/>
7179        </return-value>
7180        <parameters>
7181          <instance-parameter name="point" transfer-ownership="none">
7182            <doc xml:space="preserve"
7183                 filename="gsk/gskpathpoint.c"
7184                 line="187">a path point</doc>
7185            <type name="PathPoint" c:type="const GskPathPoint*"/>
7186          </instance-parameter>
7187          <parameter name="path" transfer-ownership="none">
7188            <doc xml:space="preserve"
7189                 filename="gsk/gskpathpoint.c"
7190                 line="188">the path that @point is on</doc>
7191            <type name="Path" c:type="GskPath*"/>
7192          </parameter>
7193          <parameter name="direction" transfer-ownership="none">
7194            <doc xml:space="preserve"
7195                 filename="gsk/gskpathpoint.c"
7196                 line="189">the direction for which to return the tangent</doc>
7197            <type name="PathDirection" c:type="GskPathDirection"/>
7198          </parameter>
7199          <parameter name="tangent"
7200                     direction="out"
7201                     caller-allocates="1"
7202                     transfer-ownership="none">
7203            <doc xml:space="preserve"
7204                 filename="gsk/gskpathpoint.c"
7205                 line="190">Return location for
7206  the tangent at the point</doc>
7207            <type name="Graphene.Vec2" c:type="graphene_vec2_t*"/>
7208          </parameter>
7209        </parameters>
7210      </method>
7211    </record>
7212    <function-macro name="RENDERER"
7213                    c:identifier="GSK_RENDERER"
7214                    introspectable="0">
7215      <source-position filename="gsk/gskrenderer.h" line="32"/>
7216      <parameters>
7217        <parameter name="obj">
7218        </parameter>
7219      </parameters>
7220    </function-macro>
7221    <function-macro name="ROUNDED_RECT_INIT"
7222                    c:identifier="GSK_ROUNDED_RECT_INIT"
7223                    introspectable="0">
7224      <doc xml:space="preserve"
7225           filename="gsk/gskroundedrect.h"
7226           line="29">Initializes a `GskRoundedRect` when declaring it.
7227
7228All corner sizes will be initialized to 0.</doc>
7229      <source-position filename="gsk/gskroundedrect.h" line="40"/>
7230      <parameters>
7231        <parameter name="_x">
7232          <doc xml:space="preserve"
7233               filename="gsk/gskroundedrect.h"
7234               line="31">the X coordinate of the origin</doc>
7235        </parameter>
7236        <parameter name="_y">
7237          <doc xml:space="preserve"
7238               filename="gsk/gskroundedrect.h"
7239               line="32">the Y coordinate of the origin</doc>
7240        </parameter>
7241        <parameter name="_w">
7242          <doc xml:space="preserve"
7243               filename="gsk/gskroundedrect.h"
7244               line="33">the width</doc>
7245        </parameter>
7246        <parameter name="_h">
7247          <doc xml:space="preserve"
7248               filename="gsk/gskroundedrect.h"
7249               line="34">the height</doc>
7250        </parameter>
7251      </parameters>
7252    </function-macro>
7253    <class name="RadialGradientNode"
7254           c:symbol-prefix="radial_gradient_node"
7255           c:type="GskRadialGradientNode"
7256           parent="RenderNode"
7257           glib:type-name="GskRadialGradientNode"
7258           glib:get-type="gsk_radial_gradient_node_get_type"
7259           glib:fundamental="1">
7260      <doc xml:space="preserve"
7261           filename="gsk/gskrendernodeimpl.c"
7262           line="1098">A render node for a radial gradient.</doc>
7263      <constructor name="new" c:identifier="gsk_radial_gradient_node_new">
7264        <doc xml:space="preserve"
7265             filename="gsk/gskrendernodeimpl.c"
7266             line="1251">Creates a `GskRenderNode` that draws a radial gradient.
7267
7268The radial gradient
7269starts around @center. The size of the gradient is dictated by @hradius
7270in horizontal orientation and by @vradius in vertical orientation.</doc>
7271        <source-position filename="gsk/gskrendernode.h" line="300"/>
7272        <return-value transfer-ownership="full">
7273          <doc xml:space="preserve"
7274               filename="gsk/gskrendernodeimpl.c"
7275               line="1271">A new `GskRenderNode`</doc>
7276          <type name="RadialGradientNode" c:type="GskRenderNode*"/>
7277        </return-value>
7278        <parameters>
7279          <parameter name="bounds" transfer-ownership="none">
7280            <doc xml:space="preserve"
7281                 filename="gsk/gskrendernodeimpl.c"
7282                 line="1253">the bounds of the node</doc>
7283            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
7284          </parameter>
7285          <parameter name="center" transfer-ownership="none">
7286            <doc xml:space="preserve"
7287                 filename="gsk/gskrendernodeimpl.c"
7288                 line="1254">the center of the gradient</doc>
7289            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
7290          </parameter>
7291          <parameter name="hradius" transfer-ownership="none">
7292            <doc xml:space="preserve"
7293                 filename="gsk/gskrendernodeimpl.c"
7294                 line="1255">the horizontal radius</doc>
7295            <type name="gfloat" c:type="float"/>
7296          </parameter>
7297          <parameter name="vradius" transfer-ownership="none">
7298            <doc xml:space="preserve"
7299                 filename="gsk/gskrendernodeimpl.c"
7300                 line="1256">the vertical radius</doc>
7301            <type name="gfloat" c:type="float"/>
7302          </parameter>
7303          <parameter name="start" transfer-ownership="none">
7304            <doc xml:space="preserve"
7305                 filename="gsk/gskrendernodeimpl.c"
7306                 line="1257">a percentage &gt;= 0 that defines the start of the gradient around @center</doc>
7307            <type name="gfloat" c:type="float"/>
7308          </parameter>
7309          <parameter name="end" transfer-ownership="none">
7310            <doc xml:space="preserve"
7311                 filename="gsk/gskrendernodeimpl.c"
7312                 line="1258">a percentage &gt;= 0 that defines the end of the gradient around @center</doc>
7313            <type name="gfloat" c:type="float"/>
7314          </parameter>
7315          <parameter name="color_stops" transfer-ownership="none">
7316            <doc xml:space="preserve"
7317                 filename="gsk/gskrendernodeimpl.c"
7318                 line="1259">a pointer to an array of
7319  `GskColorStop` defining the gradient. The offsets of all color stops
7320  must be increasing. The first stop's offset must be &gt;= 0 and the last
7321  stop's offset must be &lt;= 1.</doc>
7322            <array length="7" zero-terminated="0" c:type="const GskColorStop*">
7323              <type name="ColorStop" c:type="GskColorStop"/>
7324            </array>
7325          </parameter>
7326          <parameter name="n_color_stops" transfer-ownership="none">
7327            <doc xml:space="preserve"
7328                 filename="gsk/gskrendernodeimpl.c"
7329                 line="1263">the number of elements in @color_stops</doc>
7330            <type name="gsize" c:type="gsize"/>
7331          </parameter>
7332        </parameters>
7333      </constructor>
7334      <method name="get_center"
7335              c:identifier="gsk_radial_gradient_node_get_center">
7336        <doc xml:space="preserve"
7337             filename="gsk/gskrendernodeimpl.c"
7338             line="1579">Retrieves the center pointer for the gradient.</doc>
7339        <source-position filename="gsk/gskrendernode.h" line="314"/>
7340        <return-value transfer-ownership="none">
7341          <doc xml:space="preserve"
7342               filename="gsk/gskrendernodeimpl.c"
7343               line="1585">the center point for the gradient</doc>
7344          <type name="Graphene.Point" c:type="const graphene_point_t*"/>
7345        </return-value>
7346        <parameters>
7347          <instance-parameter name="node" transfer-ownership="none">
7348            <doc xml:space="preserve"
7349                 filename="gsk/gskrendernodeimpl.c"
7350                 line="1581">a `GskRenderNode` for a radial gradient</doc>
7351            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7352          </instance-parameter>
7353        </parameters>
7354      </method>
7355      <method name="get_color_stops"
7356              c:identifier="gsk_radial_gradient_node_get_color_stops">
7357        <doc xml:space="preserve"
7358             filename="gsk/gskrendernodeimpl.c"
7359             line="1561">Retrieves the color stops in the gradient.</doc>
7360        <source-position filename="gsk/gskrendernode.h" line="311"/>
7361        <return-value transfer-ownership="none">
7362          <doc xml:space="preserve"
7363               filename="gsk/gskrendernodeimpl.c"
7364               line="1568">the color stops in the gradient</doc>
7365          <array length="0" zero-terminated="0" c:type="const GskColorStop*">
7366            <type name="ColorStop" c:type="GskColorStop"/>
7367          </array>
7368        </return-value>
7369        <parameters>
7370          <instance-parameter name="node" transfer-ownership="none">
7371            <doc xml:space="preserve"
7372                 filename="gsk/gskrendernodeimpl.c"
7373                 line="1563">a `GskRenderNode` for a radial gradient</doc>
7374            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7375          </instance-parameter>
7376          <parameter name="n_stops"
7377                     direction="out"
7378                     caller-allocates="0"
7379                     transfer-ownership="full"
7380                     optional="1"
7381                     allow-none="1">
7382            <doc xml:space="preserve"
7383                 filename="gsk/gskrendernodeimpl.c"
7384                 line="1564">the number of color stops in the returned array</doc>
7385            <type name="gsize" c:type="gsize*"/>
7386          </parameter>
7387        </parameters>
7388      </method>
7389      <method name="get_end" c:identifier="gsk_radial_gradient_node_get_end">
7390        <doc xml:space="preserve"
7391             filename="gsk/gskrendernodeimpl.c"
7392             line="1643">Retrieves the end value for the gradient.</doc>
7393        <source-position filename="gsk/gskrendernode.h" line="322"/>
7394        <return-value transfer-ownership="none">
7395          <doc xml:space="preserve"
7396               filename="gsk/gskrendernodeimpl.c"
7397               line="1649">the end value for the gradient</doc>
7398          <type name="gfloat" c:type="float"/>
7399        </return-value>
7400        <parameters>
7401          <instance-parameter name="node" transfer-ownership="none">
7402            <doc xml:space="preserve"
7403                 filename="gsk/gskrendernodeimpl.c"
7404                 line="1645">a `GskRenderNode` for a radial gradient</doc>
7405            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7406          </instance-parameter>
7407        </parameters>
7408      </method>
7409      <method name="get_hradius"
7410              c:identifier="gsk_radial_gradient_node_get_hradius">
7411        <doc xml:space="preserve"
7412             filename="gsk/gskrendernodeimpl.c"
7413             line="1595">Retrieves the horizontal radius for the gradient.</doc>
7414        <source-position filename="gsk/gskrendernode.h" line="316"/>
7415        <return-value transfer-ownership="none">
7416          <doc xml:space="preserve"
7417               filename="gsk/gskrendernodeimpl.c"
7418               line="1601">the horizontal radius for the gradient</doc>
7419          <type name="gfloat" c:type="float"/>
7420        </return-value>
7421        <parameters>
7422          <instance-parameter name="node" transfer-ownership="none">
7423            <doc xml:space="preserve"
7424                 filename="gsk/gskrendernodeimpl.c"
7425                 line="1597">a `GskRenderNode` for a radial gradient</doc>
7426            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7427          </instance-parameter>
7428        </parameters>
7429      </method>
7430      <method name="get_n_color_stops"
7431              c:identifier="gsk_radial_gradient_node_get_n_color_stops">
7432        <doc xml:space="preserve"
7433             filename="gsk/gskrendernodeimpl.c"
7434             line="1545">Retrieves the number of color stops in the gradient.</doc>
7435        <source-position filename="gsk/gskrendernode.h" line="309"/>
7436        <return-value transfer-ownership="none">
7437          <doc xml:space="preserve"
7438               filename="gsk/gskrendernodeimpl.c"
7439               line="1551">the number of color stops</doc>
7440          <type name="gsize" c:type="gsize"/>
7441        </return-value>
7442        <parameters>
7443          <instance-parameter name="node" transfer-ownership="none">
7444            <doc xml:space="preserve"
7445                 filename="gsk/gskrendernodeimpl.c"
7446                 line="1547">a `GskRenderNode` for a radial gradient</doc>
7447            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7448          </instance-parameter>
7449        </parameters>
7450      </method>
7451      <method name="get_start"
7452              c:identifier="gsk_radial_gradient_node_get_start">
7453        <doc xml:space="preserve"
7454             filename="gsk/gskrendernodeimpl.c"
7455             line="1627">Retrieves the start value for the gradient.</doc>
7456        <source-position filename="gsk/gskrendernode.h" line="320"/>
7457        <return-value transfer-ownership="none">
7458          <doc xml:space="preserve"
7459               filename="gsk/gskrendernodeimpl.c"
7460               line="1633">the start value for the gradient</doc>
7461          <type name="gfloat" c:type="float"/>
7462        </return-value>
7463        <parameters>
7464          <instance-parameter name="node" transfer-ownership="none">
7465            <doc xml:space="preserve"
7466                 filename="gsk/gskrendernodeimpl.c"
7467                 line="1629">a `GskRenderNode` for a radial gradient</doc>
7468            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7469          </instance-parameter>
7470        </parameters>
7471      </method>
7472      <method name="get_vradius"
7473              c:identifier="gsk_radial_gradient_node_get_vradius">
7474        <doc xml:space="preserve"
7475             filename="gsk/gskrendernodeimpl.c"
7476             line="1611">Retrieves the vertical radius for the gradient.</doc>
7477        <source-position filename="gsk/gskrendernode.h" line="318"/>
7478        <return-value transfer-ownership="none">
7479          <doc xml:space="preserve"
7480               filename="gsk/gskrendernodeimpl.c"
7481               line="1617">the vertical radius for the gradient</doc>
7482          <type name="gfloat" c:type="float"/>
7483        </return-value>
7484        <parameters>
7485          <instance-parameter name="node" transfer-ownership="none">
7486            <doc xml:space="preserve"
7487                 filename="gsk/gskrendernodeimpl.c"
7488                 line="1613">a `GskRenderNode` for a radial gradient</doc>
7489            <type name="RadialGradientNode" c:type="const GskRenderNode*"/>
7490          </instance-parameter>
7491        </parameters>
7492      </method>
7493    </class>
7494    <class name="RenderNode"
7495           c:symbol-prefix="render_node"
7496           c:type="GskRenderNode"
7497           abstract="1"
7498           glib:type-name="GskRenderNode"
7499           glib:get-type="gsk_render_node_get_type"
7500           glib:fundamental="1"
7501           glib:ref-func="gsk_render_node_ref"
7502           glib:unref-func="gsk_render_node_unref"
7503           glib:set-value-func="gsk_value_set_render_node"
7504           glib:get-value-func="gsk_value_get_render_node">
7505      <doc xml:space="preserve"
7506           filename="gsk/gskrendernode.c"
7507           line="19">The basic block in a scene graph to be rendered using [class@Gsk.Renderer].
7508
7509Each node has a parent, except the top-level node; each node may have
7510children nodes.
7511
7512Each node has an associated drawing surface, which has the size of
7513the rectangle set when creating it.
7514
7515Render nodes are meant to be transient; once they have been associated
7516to a [class@Gsk.Renderer] it's safe to release any reference you have on
7517them. All [class@Gsk.RenderNode]s are immutable, you can only specify their
7518properties during construction.</doc>
7519      <function name="deserialize" c:identifier="gsk_render_node_deserialize">
7520        <doc xml:space="preserve"
7521             filename="gsk/gskrendernode.c"
7522             line="677">Loads data previously created via [method@Gsk.RenderNode.serialize].
7523
7524For a discussion of the supported format, see that function.</doc>
7525        <source-position filename="gsk/gskrendernode.h" line="140"/>
7526        <return-value transfer-ownership="full" nullable="1">
7527          <doc xml:space="preserve"
7528               filename="gsk/gskrendernode.c"
7529               line="687">a new render node</doc>
7530          <type name="RenderNode" c:type="GskRenderNode*"/>
7531        </return-value>
7532        <parameters>
7533          <parameter name="bytes" transfer-ownership="none">
7534            <doc xml:space="preserve"
7535                 filename="gsk/gskrendernode.c"
7536                 line="679">the bytes containing the data</doc>
7537            <type name="GLib.Bytes" c:type="GBytes*"/>
7538          </parameter>
7539          <parameter name="error_func"
7540                     transfer-ownership="none"
7541                     nullable="1"
7542                     allow-none="1"
7543                     scope="call"
7544                     closure="2">
7545            <doc xml:space="preserve"
7546                 filename="gsk/gskrendernode.c"
7547                 line="680">callback on parsing errors</doc>
7548            <type name="ParseErrorFunc" c:type="GskParseErrorFunc"/>
7549          </parameter>
7550          <parameter name="user_data"
7551                     transfer-ownership="none"
7552                     nullable="1"
7553                     allow-none="1">
7554            <doc xml:space="preserve"
7555                 filename="gsk/gskrendernode.c"
7556                 line="681">user_data for @error_func</doc>
7557            <type name="gpointer" c:type="gpointer"/>
7558          </parameter>
7559        </parameters>
7560      </function>
7561      <method name="draw" c:identifier="gsk_render_node_draw">
7562        <doc xml:space="preserve"
7563             filename="gsk/gskrendernode.c"
7564             line="429">Draws the contents of a render node on a cairo context.
7565
7566Typically, you'll use this function to implement fallback rendering
7567of render nodes on an intermediate Cairo context, instead of using
7568the drawing context associated to a [class@Gdk.Surface]'s rendering buffer.
7569
7570For advanced nodes that cannot be supported using Cairo, in particular
7571for nodes doing 3D operations, this function may fail.</doc>
7572        <source-position filename="gsk/gskrendernode.h" line="130"/>
7573        <return-value transfer-ownership="none">
7574          <type name="none" c:type="void"/>
7575        </return-value>
7576        <parameters>
7577          <instance-parameter name="node" transfer-ownership="none">
7578            <doc xml:space="preserve"
7579                 filename="gsk/gskrendernode.c"
7580                 line="431">a render node</doc>
7581            <type name="RenderNode" c:type="GskRenderNode*"/>
7582          </instance-parameter>
7583          <parameter name="cr" transfer-ownership="none">
7584            <doc xml:space="preserve"
7585                 filename="gsk/gskrendernode.c"
7586                 line="432">cairo context to draw to</doc>
7587            <type name="cairo.Context" c:type="cairo_t*"/>
7588          </parameter>
7589        </parameters>
7590      </method>
7591      <method name="get_bounds" c:identifier="gsk_render_node_get_bounds">
7592        <doc xml:space="preserve"
7593             filename="gsk/gskrendernode.c"
7594             line="348">Retrieves the boundaries of the @node.
7595
7596The node will not draw outside of its boundaries.</doc>
7597        <source-position filename="gsk/gskrendernode.h" line="122"/>
7598        <return-value transfer-ownership="none">
7599          <type name="none" c:type="void"/>
7600        </return-value>
7601        <parameters>
7602          <instance-parameter name="node" transfer-ownership="none">
7603            <doc xml:space="preserve"
7604                 filename="gsk/gskrendernode.c"
7605                 line="350">a render node</doc>
7606            <type name="RenderNode" c:type="GskRenderNode*"/>
7607          </instance-parameter>
7608          <parameter name="bounds"
7609                     direction="out"
7610                     caller-allocates="1"
7611                     transfer-ownership="none">
7612            <doc xml:space="preserve"
7613                 filename="gsk/gskrendernode.c"
7614                 line="351">return location for the boundaries</doc>
7615            <type name="Graphene.Rect" c:type="graphene_rect_t*"/>
7616          </parameter>
7617        </parameters>
7618      </method>
7619      <method name="get_node_type"
7620              c:identifier="gsk_render_node_get_node_type">
7621        <doc xml:space="preserve"
7622             filename="gsk/gskrendernode.c"
7623             line="332">Returns the type of the render node.</doc>
7624        <source-position filename="gsk/gskrendernode.h" line="119"/>
7625        <return-value transfer-ownership="none">
7626          <doc xml:space="preserve"
7627               filename="gsk/gskrendernode.c"
7628               line="338">the type of @node</doc>
7629          <type name="RenderNodeType" c:type="GskRenderNodeType"/>
7630        </return-value>
7631        <parameters>
7632          <instance-parameter name="node" transfer-ownership="none">
7633            <doc xml:space="preserve"
7634                 filename="gsk/gskrendernode.c"
7635                 line="334">a render node</doc>
7636            <type name="RenderNode" c:type="const GskRenderNode*"/>
7637          </instance-parameter>
7638        </parameters>
7639      </method>
7640      <method name="get_opaque_rect"
7641              c:identifier="gsk_render_node_get_opaque_rect"
7642              version="4.16">
7643        <doc xml:space="preserve"
7644             filename="gsk/gskrendernode.c"
7645             line="604">Gets an opaque rectangle inside the node that GTK can determine to
7646be fully opaque.
7647
7648There is no guarantee that this is indeed the largest opaque rectangle or
7649that regions outside the rectangle are not opaque. This function is a best
7650effort with that goal.
7651
7652The rectangle will be fully contained in the bounds of the node.</doc>
7653        <source-position filename="gsk/gskrendernode.h" line="126"/>
7654        <return-value transfer-ownership="none">
7655          <doc xml:space="preserve"
7656               filename="gsk/gskrendernode.c"
7657               line="618">true if part or all of the rendernode is opaque, false if no
7658  opaque region could be found.</doc>
7659          <type name="gboolean" c:type="gboolean"/>
7660        </return-value>
7661        <parameters>
7662          <instance-parameter name="self" transfer-ownership="none">
7663            <doc xml:space="preserve"
7664                 filename="gsk/gskrendernode.c"
7665                 line="606">a render node</doc>
7666            <type name="RenderNode" c:type="GskRenderNode*"/>
7667          </instance-parameter>
7668          <parameter name="out_opaque"
7669                     direction="out"
7670                     caller-allocates="1"
7671                     transfer-ownership="none">
7672            <doc xml:space="preserve"
7673                 filename="gsk/gskrendernode.c"
7674                 line="607">return location for the opaque rect</doc>
7675            <type name="Graphene.Rect" c:type="graphene_rect_t*"/>
7676          </parameter>
7677        </parameters>
7678      </method>
7679      <method name="ref" c:identifier="gsk_render_node_ref">
7680        <doc xml:space="preserve"
7681             filename="gsk/gskrendernode.c"
7682             line="290">Acquires a reference on the given `GskRenderNode`.</doc>
7683        <source-position filename="gsk/gskrendernode.h" line="114"/>
7684        <return-value transfer-ownership="full">
7685          <doc xml:space="preserve"
7686               filename="gsk/gskrendernode.c"
7687               line="296">the render node with an additional reference</doc>
7688          <type name="RenderNode" c:type="GskRenderNode*"/>
7689        </return-value>
7690        <parameters>
7691          <instance-parameter name="node" transfer-ownership="none">
7692            <doc xml:space="preserve"
7693                 filename="gsk/gskrendernode.c"
7694                 line="292">a render node</doc>
7695            <type name="RenderNode" c:type="GskRenderNode*"/>
7696          </instance-parameter>
7697        </parameters>
7698      </method>
7699      <method name="serialize" c:identifier="gsk_render_node_serialize">
7700        <doc xml:space="preserve"
7701             filename="gsk/gskrendernodeparser.c"
7702             line="6087">Serializes the @node for later deserialization via
7703gsk_render_node_deserialize(). No guarantees are made about the format
7704used other than that the same version of GTK will be able to deserialize
7705the result of a call to gsk_render_node_serialize() and
7706gsk_render_node_deserialize() will correctly reject files it cannot open
7707that were created with previous versions of GTK.
7708
7709The intended use of this functions is testing, benchmarking and debugging.
7710The format is not meant as a permanent storage format.</doc>
7711        <source-position filename="gsk/gskrendernode.h" line="134"/>
7712        <return-value transfer-ownership="full">
7713          <doc xml:space="preserve"
7714               filename="gsk/gskrendernodeparser.c"
7715               line="6101">a `GBytes` representing the node.</doc>
7716          <type name="GLib.Bytes" c:type="GBytes*"/>
7717        </return-value>
7718        <parameters>
7719          <instance-parameter name="node" transfer-ownership="none">
7720            <doc xml:space="preserve"
7721                 filename="gsk/gskrendernodeparser.c"
7722                 line="6089">a `GskRenderNode`</doc>
7723            <type name="RenderNode" c:type="GskRenderNode*"/>
7724          </instance-parameter>
7725        </parameters>
7726      </method>
7727      <method name="unref" c:identifier="gsk_render_node_unref">
7728        <doc xml:space="preserve"
7729             filename="gsk/gskrendernode.c"
7730             line="314">Releases a reference on the given `GskRenderNode`.
7731
7732If the reference was the last, the resources associated to the @node are
7733freed.</doc>
7734        <source-position filename="gsk/gskrendernode.h" line="116"/>
7735        <return-value transfer-ownership="none">
7736          <type name="none" c:type="void"/>
7737        </return-value>
7738        <parameters>
7739          <instance-parameter name="node" transfer-ownership="full">
7740            <doc xml:space="preserve"
7741                 filename="gsk/gskrendernode.c"
7742                 line="316">a render node</doc>
7743            <type name="RenderNode" c:type="GskRenderNode*"/>
7744          </instance-parameter>
7745        </parameters>
7746      </method>
7747      <method name="write_to_file"
7748              c:identifier="gsk_render_node_write_to_file"
7749              throws="1">
7750        <doc xml:space="preserve"
7751             filename="gsk/gskrendernode.c"
7752             line="639">This function is equivalent to calling [method@Gsk.RenderNode.serialize]
7753followed by [func@GLib.file_set_contents].
7754
7755See those two functions for details on the arguments.
7756
7757It is mostly intended for use inside a debugger to quickly dump a render
7758node to a file for later inspection.</doc>
7759        <source-position filename="gsk/gskrendernode.h" line="136"/>
7760        <return-value transfer-ownership="none">
7761          <doc xml:space="preserve"
7762               filename="gsk/gskrendernode.c"
7763               line="653">true if saving was successful</doc>
7764          <type name="gboolean" c:type="gboolean"/>
7765        </return-value>
7766        <parameters>
7767          <instance-parameter name="node" transfer-ownership="none">
7768            <doc xml:space="preserve"
7769                 filename="gsk/gskrendernode.c"
7770                 line="641">a render node</doc>
7771            <type name="RenderNode" c:type="GskRenderNode*"/>
7772          </instance-parameter>
7773          <parameter name="filename" transfer-ownership="none">
7774            <doc xml:space="preserve"
7775                 filename="gsk/gskrendernode.c"
7776                 line="642">the file to save it to</doc>
7777            <type name="filename" c:type="const char*"/>
7778          </parameter>
7779        </parameters>
7780      </method>
7781    </class>
7782    <enumeration name="RenderNodeType"
7783                 glib:type-name="GskRenderNodeType"
7784                 glib:get-type="gsk_render_node_type_get_type"
7785                 c:type="GskRenderNodeType">
7786      <doc xml:space="preserve"
7787           filename="gsk/gskenums.h"
7788           line="24">The type of a node determines what the node is rendering.</doc>
7789      <member name="not_a_render_node"
7790              value="0"
7791              c:identifier="GSK_NOT_A_RENDER_NODE"
7792              glib:nick="not-a-render-node"
7793              glib:name="GSK_NOT_A_RENDER_NODE">
7794        <doc xml:space="preserve"
7795             filename="gsk/gskenums.h"
7796             line="26">Error type. No node will ever have this type.</doc>
7797      </member>
7798      <member name="container_node"
7799              value="1"
7800              c:identifier="GSK_CONTAINER_NODE"
7801              glib:nick="container-node"
7802              glib:name="GSK_CONTAINER_NODE">
7803        <doc xml:space="preserve"
7804             filename="gsk/gskenums.h"
7805             line="27">A node containing a stack of children</doc>
7806      </member>
7807      <member name="cairo_node"
7808              value="2"
7809              c:identifier="GSK_CAIRO_NODE"
7810              glib:nick="cairo-node"
7811              glib:name="GSK_CAIRO_NODE">
7812        <doc xml:space="preserve"
7813             filename="gsk/gskenums.h"
7814             line="28">A node drawing a `cairo_surface_t`</doc>
7815      </member>
7816      <member name="color_node"
7817              value="3"
7818              c:identifier="GSK_COLOR_NODE"
7819              glib:nick="color-node"
7820              glib:name="GSK_COLOR_NODE">
7821        <doc xml:space="preserve"
7822             filename="gsk/gskenums.h"
7823             line="29">A node drawing a single color rectangle</doc>
7824      </member>
7825      <member name="linear_gradient_node"
7826              value="4"
7827              c:identifier="GSK_LINEAR_GRADIENT_NODE"
7828              glib:nick="linear-gradient-node"
7829              glib:name="GSK_LINEAR_GRADIENT_NODE">
7830        <doc xml:space="preserve"
7831             filename="gsk/gskenums.h"
7832             line="30">A node drawing a linear gradient</doc>
7833      </member>
7834      <member name="repeating_linear_gradient_node"
7835              value="5"
7836              c:identifier="GSK_REPEATING_LINEAR_GRADIENT_NODE"
7837              glib:nick="repeating-linear-gradient-node"
7838              glib:name="GSK_REPEATING_LINEAR_GRADIENT_NODE">
7839        <doc xml:space="preserve"
7840             filename="gsk/gskenums.h"
7841             line="31">A node drawing a repeating linear gradient</doc>
7842      </member>
7843      <member name="radial_gradient_node"
7844              value="6"
7845              c:identifier="GSK_RADIAL_GRADIENT_NODE"
7846              glib:nick="radial-gradient-node"
7847              glib:name="GSK_RADIAL_GRADIENT_NODE">
7848        <doc xml:space="preserve"
7849             filename="gsk/gskenums.h"
7850             line="32">A node drawing a radial gradient</doc>
7851      </member>
7852      <member name="repeating_radial_gradient_node"
7853              value="7"
7854              c:identifier="GSK_REPEATING_RADIAL_GRADIENT_NODE"
7855              glib:nick="repeating-radial-gradient-node"
7856              glib:name="GSK_REPEATING_RADIAL_GRADIENT_NODE">
7857        <doc xml:space="preserve"
7858             filename="gsk/gskenums.h"
7859             line="33">A node drawing a repeating radial gradient</doc>
7860      </member>
7861      <member name="conic_gradient_node"
7862              value="8"
7863              c:identifier="GSK_CONIC_GRADIENT_NODE"
7864              glib:nick="conic-gradient-node"
7865              glib:name="GSK_CONIC_GRADIENT_NODE">
7866        <doc xml:space="preserve"
7867             filename="gsk/gskenums.h"
7868             line="34">A node drawing a conic gradient</doc>
7869      </member>
7870      <member name="border_node"
7871              value="9"
7872              c:identifier="GSK_BORDER_NODE"
7873              glib:nick="border-node"
7874              glib:name="GSK_BORDER_NODE">
7875        <doc xml:space="preserve"
7876             filename="gsk/gskenums.h"
7877             line="35">A node stroking a border around an area</doc>
7878      </member>
7879      <member name="texture_node"
7880              value="10"
7881              c:identifier="GSK_TEXTURE_NODE"
7882              glib:nick="texture-node"
7883              glib:name="GSK_TEXTURE_NODE">
7884        <doc xml:space="preserve"
7885             filename="gsk/gskenums.h"
7886             line="36">A node drawing a `GdkTexture`</doc>
7887      </member>
7888      <member name="inset_shadow_node"
7889              value="11"
7890              c:identifier="GSK_INSET_SHADOW_NODE"
7891              glib:nick="inset-shadow-node"
7892              glib:name="GSK_INSET_SHADOW_NODE">
7893        <doc xml:space="preserve"
7894             filename="gsk/gskenums.h"
7895             line="37">A node drawing an inset shadow</doc>
7896      </member>
7897      <member name="outset_shadow_node"
7898              value="12"
7899              c:identifier="GSK_OUTSET_SHADOW_NODE"
7900              glib:nick="outset-shadow-node"
7901              glib:name="GSK_OUTSET_SHADOW_NODE">
7902        <doc xml:space="preserve"
7903             filename="gsk/gskenums.h"
7904             line="38">A node drawing an outset shadow</doc>
7905      </member>
7906      <member name="transform_node"
7907              value="13"
7908              c:identifier="GSK_TRANSFORM_NODE"
7909              glib:nick="transform-node"
7910              glib:name="GSK_TRANSFORM_NODE">
7911        <doc xml:space="preserve"
7912             filename="gsk/gskenums.h"
7913             line="39">A node that renders its child after applying a matrix transform</doc>
7914      </member>
7915      <member name="opacity_node"
7916              value="14"
7917              c:identifier="GSK_OPACITY_NODE"
7918              glib:nick="opacity-node"
7919              glib:name="GSK_OPACITY_NODE">
7920        <doc xml:space="preserve"
7921             filename="gsk/gskenums.h"
7922             line="40">A node that changes the opacity of its child</doc>
7923      </member>
7924      <member name="color_matrix_node"
7925              value="15"
7926              c:identifier="GSK_COLOR_MATRIX_NODE"
7927              glib:nick="color-matrix-node"
7928              glib:name="GSK_COLOR_MATRIX_NODE">
7929        <doc xml:space="preserve"
7930             filename="gsk/gskenums.h"
7931             line="41">A node that applies a color matrix to every pixel</doc>
7932      </member>
7933      <member name="repeat_node"
7934              value="16"
7935              c:identifier="GSK_REPEAT_NODE"
7936              glib:nick="repeat-node"
7937              glib:name="GSK_REPEAT_NODE">
7938        <doc xml:space="preserve"
7939             filename="gsk/gskenums.h"
7940             line="42">A node that repeats the child's contents</doc>
7941      </member>
7942      <member name="clip_node"
7943              value="17"
7944              c:identifier="GSK_CLIP_NODE"
7945              glib:nick="clip-node"
7946              glib:name="GSK_CLIP_NODE">
7947        <doc xml:space="preserve"
7948             filename="gsk/gskenums.h"
7949             line="43">A node that clips its child to a rectangular area</doc>
7950      </member>
7951      <member name="rounded_clip_node"
7952              value="18"
7953              c:identifier="GSK_ROUNDED_CLIP_NODE"
7954              glib:nick="rounded-clip-node"
7955              glib:name="GSK_ROUNDED_CLIP_NODE">
7956        <doc xml:space="preserve"
7957             filename="gsk/gskenums.h"
7958             line="44">A node that clips its child to a rounded rectangle</doc>
7959      </member>
7960      <member name="shadow_node"
7961              value="19"
7962              c:identifier="GSK_SHADOW_NODE"
7963              glib:nick="shadow-node"
7964              glib:name="GSK_SHADOW_NODE">
7965        <doc xml:space="preserve"
7966             filename="gsk/gskenums.h"
7967             line="45">A node that draws a shadow below its child</doc>
7968      </member>
7969      <member name="blend_node"
7970              value="20"
7971              c:identifier="GSK_BLEND_NODE"
7972              glib:nick="blend-node"
7973              glib:name="GSK_BLEND_NODE">
7974        <doc xml:space="preserve"
7975             filename="gsk/gskenums.h"
7976             line="46">A node that blends two children together</doc>
7977      </member>
7978      <member name="cross_fade_node"
7979              value="21"
7980              c:identifier="GSK_CROSS_FADE_NODE"
7981              glib:nick="cross-fade-node"
7982              glib:name="GSK_CROSS_FADE_NODE">
7983        <doc xml:space="preserve"
7984             filename="gsk/gskenums.h"
7985             line="47">A node that cross-fades between two children</doc>
7986      </member>
7987      <member name="text_node"
7988              value="22"
7989              c:identifier="GSK_TEXT_NODE"
7990              glib:nick="text-node"
7991              glib:name="GSK_TEXT_NODE">
7992        <doc xml:space="preserve"
7993             filename="gsk/gskenums.h"
7994             line="48">A node containing a glyph string</doc>
7995      </member>
7996      <member name="blur_node"
7997              value="23"
7998              c:identifier="GSK_BLUR_NODE"
7999              glib:nick="blur-node"
8000              glib:name="GSK_BLUR_NODE">
8001        <doc xml:space="preserve"
8002             filename="gsk/gskenums.h"
8003             line="49">A node that applies a blur</doc>
8004      </member>
8005      <member name="debug_node"
8006              value="24"
8007              c:identifier="GSK_DEBUG_NODE"
8008              glib:nick="debug-node"
8009              glib:name="GSK_DEBUG_NODE">
8010        <doc xml:space="preserve"
8011             filename="gsk/gskenums.h"
8012             line="50">Debug information that does not affect the rendering</doc>
8013      </member>
8014      <member name="gl_shader_node"
8015              value="25"
8016              c:identifier="GSK_GL_SHADER_NODE"
8017              glib:nick="gl-shader-node"
8018              glib:name="GSK_GL_SHADER_NODE">
8019        <doc xml:space="preserve"
8020             filename="gsk/gskenums.h"
8021             line="51">A node that uses OpenGL fragment shaders to render</doc>
8022      </member>
8023      <member name="texture_scale_node"
8024              value="26"
8025              c:identifier="GSK_TEXTURE_SCALE_NODE"
8026              version="4.10"
8027              glib:nick="texture-scale-node"
8028              glib:name="GSK_TEXTURE_SCALE_NODE">
8029        <doc xml:space="preserve"
8030             filename="gsk/gskenums.h"
8031             line="56">A node drawing a `GdkTexture` scaled and filtered.</doc>
8032      </member>
8033      <member name="mask_node"
8034              value="27"
8035              c:identifier="GSK_MASK_NODE"
8036              version="4.10"
8037              glib:nick="mask-node"
8038              glib:name="GSK_MASK_NODE">
8039        <doc xml:space="preserve"
8040             filename="gsk/gskenums.h"
8041             line="64">A node that masks one child with another.</doc>
8042      </member>
8043      <member name="fill_node"
8044              value="28"
8045              c:identifier="GSK_FILL_NODE"
8046              version="4.14"
8047              glib:nick="fill-node"
8048              glib:name="GSK_FILL_NODE">
8049        <doc xml:space="preserve"
8050             filename="gsk/gskenums.h"
8051             line="80">A node that fills a path.</doc>
8052      </member>
8053      <member name="stroke_node"
8054              value="29"
8055              c:identifier="GSK_STROKE_NODE"
8056              version="4.14"
8057              glib:nick="stroke-node"
8058              glib:name="GSK_STROKE_NODE">
8059        <doc xml:space="preserve"
8060             filename="gsk/gskenums.h"
8061             line="72">A node that strokes a path.</doc>
8062      </member>
8063      <member name="subsurface_node"
8064              value="30"
8065              c:identifier="GSK_SUBSURFACE_NODE"
8066              version="4.14"
8067              glib:nick="subsurface-node"
8068              glib:name="GSK_SUBSURFACE_NODE">
8069        <doc xml:space="preserve"
8070             filename="gsk/gskenums.h"
8071             line="88">A node that possibly redirects part of the scene graph to a subsurface.</doc>
8072      </member>
8073      <member name="component_transfer_node"
8074              value="31"
8075              c:identifier="GSK_COMPONENT_TRANSFER_NODE"
8076              version="4.20"
8077              glib:nick="component-transfer-node"
8078              glib:name="GSK_COMPONENT_TRANSFER_NODE">
8079        <doc xml:space="preserve"
8080             filename="gsk/gskenums.h"
8081             line="96">A node that applies some function to each color component.</doc>
8082      </member>
8083    </enumeration>
8084    <class name="Renderer"
8085           c:symbol-prefix="renderer"
8086           c:type="GskRenderer"
8087           parent="GObject.Object"
8088           abstract="1"
8089           glib:type-name="GskRenderer"
8090           glib:get-type="gsk_renderer_get_type"
8091           glib:type-struct="RendererClass">
8092      <doc xml:space="preserve"
8093           filename="gsk/gskrenderer.c"
8094           line="18">Renders a scene graph defined via a tree of [class@Gsk.RenderNode] instances.
8095
8096Typically you will use a `GskRenderer` instance to repeatedly call
8097[method@Gsk.Renderer.render] to update the contents of its associated
8098[class@Gdk.Surface].
8099
8100It is necessary to realize a `GskRenderer` instance using
8101[method@Gsk.Renderer.realize] before calling [method@Gsk.Renderer.render],
8102in order to create the appropriate windowing system resources needed
8103to render the scene.</doc>
8104      <source-position filename="gsk/gskrenderer.h" line="35"/>
8105      <constructor name="new_for_surface"
8106                   c:identifier="gsk_renderer_new_for_surface">
8107        <doc xml:space="preserve"
8108             filename="gsk/gskrenderer.c"
8109             line="766">Creates an appropriate `GskRenderer` instance for the given surface.
8110
8111If the `GSK_RENDERER` environment variable is set, GSK will
8112try that renderer first, before trying the backend-specific
8113default. The ultimate fallback is the cairo renderer.
8114
8115The renderer will be realized before it is returned.</doc>
8116        <source-position filename="gsk/gskrenderer.h" line="41"/>
8117        <return-value transfer-ownership="full" nullable="1">
8118          <doc xml:space="preserve"
8119               filename="gsk/gskrenderer.c"
8120               line="778">the realized renderer</doc>
8121          <type name="Renderer" c:type="GskRenderer*"/>
8122        </return-value>
8123        <parameters>
8124          <parameter name="surface" transfer-ownership="none">
8125            <doc xml:space="preserve"
8126                 filename="gsk/gskrenderer.c"
8127                 line="768">a surface</doc>
8128            <type name="Gdk.Surface" c:type="GdkSurface*"/>
8129          </parameter>
8130        </parameters>
8131      </constructor>
8132      <method name="get_surface"
8133              c:identifier="gsk_renderer_get_surface"
8134              glib:get-property="surface">
8135        <doc xml:space="preserve"
8136             filename="gsk/gskrenderer.c"
8137             line="204">Retrieves the surface that the renderer is associated with.
8138
8139If the renderer has not been realized yet, `NULL` will be returned.</doc>
8140        <source-position filename="gsk/gskrenderer.h" line="44"/>
8141        <return-value transfer-ownership="none" nullable="1">
8142          <doc xml:space="preserve"
8143               filename="gsk/gskrenderer.c"
8144               line="212">the surface</doc>
8145          <type name="Gdk.Surface" c:type="GdkSurface*"/>
8146        </return-value>
8147        <parameters>
8148          <instance-parameter name="renderer" transfer-ownership="none">
8149            <doc xml:space="preserve"
8150                 filename="gsk/gskrenderer.c"
8151                 line="206">a renderer</doc>
8152            <type name="Renderer" c:type="GskRenderer*"/>
8153          </instance-parameter>
8154        </parameters>
8155      </method>
8156      <method name="is_realized"
8157              c:identifier="gsk_renderer_is_realized"
8158              glib:get-property="realized">
8159        <doc xml:space="preserve"
8160             filename="gsk/gskrenderer.c"
8161             line="224">Checks whether the renderer is realized or not.</doc>
8162        <source-position filename="gsk/gskrenderer.h" line="57"/>
8163        <return-value transfer-ownership="none">
8164          <doc xml:space="preserve"
8165               filename="gsk/gskrenderer.c"
8166               line="230">true if the renderer was realized, false otherwise</doc>
8167          <type name="gboolean" c:type="gboolean"/>
8168        </return-value>
8169        <parameters>
8170          <instance-parameter name="renderer" transfer-ownership="none">
8171            <doc xml:space="preserve"
8172                 filename="gsk/gskrenderer.c"
8173                 line="226">a renderer</doc>
8174            <type name="Renderer" c:type="GskRenderer*"/>
8175          </instance-parameter>
8176        </parameters>
8177      </method>
8178      <method name="realize" c:identifier="gsk_renderer_realize" throws="1">
8179        <doc xml:space="preserve"
8180             filename="gsk/gskrenderer.c"
8181             line="271">Creates the resources needed by the renderer.
8182
8183Since GTK 4.6, the surface may be `NULL`, which allows using
8184renderers without having to create a surface. Since GTK 4.14,
8185it is recommended to use [method@Gsk.Renderer.realize_for_display]
8186for this case.
8187
8188Note that it is mandatory to call [method@Gsk.Renderer.unrealize]
8189before destroying the renderer.</doc>
8190        <source-position filename="gsk/gskrenderer.h" line="47"/>
8191        <return-value transfer-ownership="none">
8192          <doc xml:space="preserve"
8193               filename="gsk/gskrenderer.c"
8194               line="287">whether the renderer was successfully realized</doc>
8195          <type name="gboolean" c:type="gboolean"/>
8196        </return-value>
8197        <parameters>
8198          <instance-parameter name="renderer" transfer-ownership="none">
8199            <doc xml:space="preserve"
8200                 filename="gsk/gskrenderer.c"
8201                 line="273">a renderer</doc>
8202            <type name="Renderer" c:type="GskRenderer*"/>
8203          </instance-parameter>
8204          <parameter name="surface"
8205                     transfer-ownership="none"
8206                     nullable="1"
8207                     allow-none="1">
8208            <doc xml:space="preserve"
8209                 filename="gsk/gskrenderer.c"
8210                 line="274">the surface that renderer will be used on</doc>
8211            <type name="Gdk.Surface" c:type="GdkSurface*"/>
8212          </parameter>
8213        </parameters>
8214      </method>
8215      <method name="realize_for_display"
8216              c:identifier="gsk_renderer_realize_for_display"
8217              version="4.14"
8218              throws="1">
8219        <doc xml:space="preserve"
8220             filename="gsk/gskrenderer.c"
8221             line="317">Creates the resources needed by the renderer.
8222
8223Note that it is mandatory to call [method@Gsk.Renderer.unrealize]
8224before destroying the renderer.</doc>
8225        <source-position filename="gsk/gskrenderer.h" line="51"/>
8226        <return-value transfer-ownership="none">
8227          <doc xml:space="preserve"
8228               filename="gsk/gskrenderer.c"
8229               line="328">whether the renderer was successfully realized</doc>
8230          <type name="gboolean" c:type="gboolean"/>
8231        </return-value>
8232        <parameters>
8233          <instance-parameter name="renderer" transfer-ownership="none">
8234            <doc xml:space="preserve"
8235                 filename="gsk/gskrenderer.c"
8236                 line="319">a renderer</doc>
8237            <type name="Renderer" c:type="GskRenderer*"/>
8238          </instance-parameter>
8239          <parameter name="display" transfer-ownership="none">
8240            <doc xml:space="preserve"
8241                 filename="gsk/gskrenderer.c"
8242                 line="320">the display that the renderer will be used on</doc>
8243            <type name="Gdk.Display" c:type="GdkDisplay*"/>
8244          </parameter>
8245        </parameters>
8246      </method>
8247      <method name="render" c:identifier="gsk_renderer_render">
8248        <doc xml:space="preserve"
8249             filename="gsk/gskrenderer.c"
8250             line="419">Renders the scene graph, described by a tree of `GskRenderNode` instances
8251to the renderer's surface, ensuring that the given region gets redrawn.
8252
8253If the renderer has no associated surface, this function does nothing.
8254
8255Renderers must ensure that changes of the contents given by the @root
8256node as well as the area given by @region are redrawn. They are however
8257free to not redraw any pixel outside of @region if they can guarantee that
8258it didn't change.
8259
8260The renderer will acquire a reference on the `GskRenderNode` tree while
8261the rendering is in progress.</doc>
8262        <source-position filename="gsk/gskrenderer.h" line="65"/>
8263        <return-value transfer-ownership="none">
8264          <type name="none" c:type="void"/>
8265        </return-value>
8266        <parameters>
8267          <instance-parameter name="renderer" transfer-ownership="none">
8268            <doc xml:space="preserve"
8269                 filename="gsk/gskrenderer.c"
8270                 line="421">a realized renderer</doc>
8271            <type name="Renderer" c:type="GskRenderer*"/>
8272          </instance-parameter>
8273          <parameter name="root" transfer-ownership="none">
8274            <doc xml:space="preserve"
8275                 filename="gsk/gskrenderer.c"
8276                 line="422">the render node to render</doc>
8277            <type name="RenderNode" c:type="GskRenderNode*"/>
8278          </parameter>
8279          <parameter name="region"
8280                     transfer-ownership="none"
8281                     nullable="1"
8282                     allow-none="1">
8283            <doc xml:space="preserve"
8284                 filename="gsk/gskrenderer.c"
8285                 line="423">the `cairo_region_t` that must be redrawn or `NULL`
8286  for the whole surface</doc>
8287            <type name="cairo.Region" c:type="const cairo_region_t*"/>
8288          </parameter>
8289        </parameters>
8290      </method>
8291      <method name="render_texture" c:identifier="gsk_renderer_render_texture">
8292        <doc xml:space="preserve"
8293             filename="gsk/gskrenderer.c"
8294             line="376">Renders a scene graph, described by a tree of `GskRenderNode` instances,
8295to a texture.
8296
8297The renderer will acquire a reference on the `GskRenderNode` tree while
8298the rendering is in progress.
8299
8300If you want to apply any transformations to @root, you should put it into a
8301transform node and pass that node instead.</doc>
8302        <source-position filename="gsk/gskrenderer.h" line="60"/>
8303        <return-value transfer-ownership="full">
8304          <doc xml:space="preserve"
8305               filename="gsk/gskrenderer.c"
8306               line="391">a texture with the rendered contents of @root</doc>
8307          <type name="Gdk.Texture" c:type="GdkTexture*"/>
8308        </return-value>
8309        <parameters>
8310          <instance-parameter name="renderer" transfer-ownership="none">
8311            <doc xml:space="preserve"
8312                 filename="gsk/gskrenderer.c"
8313                 line="378">a realized renderer</doc>
8314            <type name="Renderer" c:type="GskRenderer*"/>
8315          </instance-parameter>
8316          <parameter name="root" transfer-ownership="none">
8317            <doc xml:space="preserve"
8318                 filename="gsk/gskrenderer.c"
8319                 line="379">the render node to render</doc>
8320            <type name="RenderNode" c:type="GskRenderNode*"/>
8321          </parameter>
8322          <parameter name="viewport"
8323                     transfer-ownership="none"
8324                     nullable="1"
8325                     allow-none="1">
8326            <doc xml:space="preserve"
8327                 filename="gsk/gskrenderer.c"
8328                 line="380">the section to draw or `NULL` to use @root's bounds</doc>
8329            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8330          </parameter>
8331        </parameters>
8332      </method>
8333      <method name="unrealize" c:identifier="gsk_renderer_unrealize">
8334        <doc xml:space="preserve"
8335             filename="gsk/gskrenderer.c"
8336             line="345">Releases all the resources created by [method@Gsk.Renderer.realize].</doc>
8337        <source-position filename="gsk/gskrenderer.h" line="55"/>
8338        <return-value transfer-ownership="none">
8339          <type name="none" c:type="void"/>
8340        </return-value>
8341        <parameters>
8342          <instance-parameter name="renderer" transfer-ownership="none">
8343            <doc xml:space="preserve"
8344                 filename="gsk/gskrenderer.c"
8345                 line="347">a renderer</doc>
8346            <type name="Renderer" c:type="GskRenderer*"/>
8347          </instance-parameter>
8348        </parameters>
8349      </method>
8350      <property name="realized"
8351                transfer-ownership="none"
8352                getter="is_realized"
8353                default-value="FALSE">
8354        <doc xml:space="preserve"
8355             filename="gsk/gskrenderer.c"
8356             line="173">Whether the renderer has been associated with a surface or draw context.</doc>
8357        <type name="gboolean" c:type="gboolean"/>
8358      </property>
8359      <property name="surface" transfer-ownership="none" getter="get_surface">
8360        <doc xml:space="preserve"
8361             filename="gsk/gskrenderer.c"
8362             line="183">The surface associated with renderer.</doc>
8363        <type name="Gdk.Surface"/>
8364      </property>
8365    </class>
8366    <record name="RendererClass"
8367            c:type="GskRendererClass"
8368            disguised="1"
8369            opaque="1"
8370            glib:is-gtype-struct-for="Renderer">
8371      <source-position filename="gsk/gskrenderer.h" line="35"/>
8372    </record>
8373    <class name="RepeatNode"
8374           c:symbol-prefix="repeat_node"
8375           c:type="GskRepeatNode"
8376           parent="RenderNode"
8377           glib:type-name="GskRepeatNode"
8378           glib:get-type="gsk_repeat_node_get_type"
8379           glib:fundamental="1">
8380      <doc xml:space="preserve"
8381           filename="gsk/gskrendernodeimpl.c"
8382           line="5254">A render node repeating its single child node.</doc>
8383      <constructor name="new" c:identifier="gsk_repeat_node_new">
8384        <doc xml:space="preserve"
8385             filename="gsk/gskrendernodeimpl.c"
8386             line="5463">Creates a `GskRenderNode` that will repeat the drawing of @child across
8387the given @bounds.</doc>
8388        <source-position filename="gsk/gskrendernode.h" line="450"/>
8389        <return-value transfer-ownership="full">
8390          <doc xml:space="preserve"
8391               filename="gsk/gskrendernodeimpl.c"
8392               line="5473">A new `GskRenderNode`</doc>
8393          <type name="RepeatNode" c:type="GskRenderNode*"/>
8394        </return-value>
8395        <parameters>
8396          <parameter name="bounds" transfer-ownership="none">
8397            <doc xml:space="preserve"
8398                 filename="gsk/gskrendernodeimpl.c"
8399                 line="5465">The bounds of the area to be painted</doc>
8400            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8401          </parameter>
8402          <parameter name="child" transfer-ownership="none">
8403            <doc xml:space="preserve"
8404                 filename="gsk/gskrendernodeimpl.c"
8405                 line="5466">The child to repeat</doc>
8406            <type name="RenderNode" c:type="GskRenderNode*"/>
8407          </parameter>
8408          <parameter name="child_bounds"
8409                     transfer-ownership="none"
8410                     nullable="1"
8411                     allow-none="1">
8412            <doc xml:space="preserve"
8413                 filename="gsk/gskrendernodeimpl.c"
8414                 line="5467">The area of the child to repeat or %NULL to
8415    use the child's bounds</doc>
8416            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8417          </parameter>
8418        </parameters>
8419      </constructor>
8420      <method name="get_child" c:identifier="gsk_repeat_node_get_child">
8421        <doc xml:space="preserve"
8422             filename="gsk/gskrendernodeimpl.c"
8423             line="5513">Retrieves the child of @node.</doc>
8424        <source-position filename="gsk/gskrendernode.h" line="454"/>
8425        <return-value transfer-ownership="none">
8426          <doc xml:space="preserve"
8427               filename="gsk/gskrendernodeimpl.c"
8428               line="5519">a `GskRenderNode`</doc>
8429          <type name="RenderNode" c:type="GskRenderNode*"/>
8430        </return-value>
8431        <parameters>
8432          <instance-parameter name="node" transfer-ownership="none">
8433            <doc xml:space="preserve"
8434                 filename="gsk/gskrendernodeimpl.c"
8435                 line="5515">a repeat `GskRenderNode`</doc>
8436            <type name="RepeatNode" c:type="const GskRenderNode*"/>
8437          </instance-parameter>
8438        </parameters>
8439      </method>
8440      <method name="get_child_bounds"
8441              c:identifier="gsk_repeat_node_get_child_bounds">
8442        <doc xml:space="preserve"
8443             filename="gsk/gskrendernodeimpl.c"
8444             line="5529">Retrieves the bounding rectangle of the child of @node.</doc>
8445        <source-position filename="gsk/gskrendernode.h" line="456"/>
8446        <return-value transfer-ownership="none">
8447          <doc xml:space="preserve"
8448               filename="gsk/gskrendernodeimpl.c"
8449               line="5535">a bounding rectangle</doc>
8450          <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8451        </return-value>
8452        <parameters>
8453          <instance-parameter name="node" transfer-ownership="none">
8454            <doc xml:space="preserve"
8455                 filename="gsk/gskrendernodeimpl.c"
8456                 line="5531">a repeat `GskRenderNode`</doc>
8457            <type name="RepeatNode" c:type="const GskRenderNode*"/>
8458          </instance-parameter>
8459        </parameters>
8460      </method>
8461    </class>
8462    <class name="RepeatingLinearGradientNode"
8463           c:symbol-prefix="repeating_linear_gradient_node"
8464           c:type="GskRepeatingLinearGradientNode"
8465           parent="RenderNode"
8466           glib:type-name="GskRepeatingLinearGradientNode"
8467           glib:get-type="gsk_repeating_linear_gradient_node_get_type"
8468           glib:fundamental="1">
8469      <doc xml:space="preserve"
8470           filename="gsk/gskrendernodeimpl.c"
8471           line="426">A render node for a repeating linear gradient.</doc>
8472      <constructor name="new"
8473                   c:identifier="gsk_repeating_linear_gradient_node_new">
8474        <doc xml:space="preserve"
8475             filename="gsk/gskrendernodeimpl.c"
8476             line="841">Creates a `GskRenderNode` that will create a repeating linear gradient
8477from the given points and color stops, and render that into the area
8478given by @bounds.</doc>
8479        <source-position filename="gsk/gskrendernode.h" line="271"/>
8480        <return-value transfer-ownership="full">
8481          <doc xml:space="preserve"
8482               filename="gsk/gskrendernodeimpl.c"
8483               line="856">A new `GskRenderNode`</doc>
8484          <type name="RepeatingLinearGradientNode" c:type="GskRenderNode*"/>
8485        </return-value>
8486        <parameters>
8487          <parameter name="bounds" transfer-ownership="none">
8488            <doc xml:space="preserve"
8489                 filename="gsk/gskrendernodeimpl.c"
8490                 line="843">the rectangle to render the linear gradient into</doc>
8491            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8492          </parameter>
8493          <parameter name="start" transfer-ownership="none">
8494            <doc xml:space="preserve"
8495                 filename="gsk/gskrendernodeimpl.c"
8496                 line="844">the point at which the linear gradient will begin</doc>
8497            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
8498          </parameter>
8499          <parameter name="end" transfer-ownership="none">
8500            <doc xml:space="preserve"
8501                 filename="gsk/gskrendernodeimpl.c"
8502                 line="845">the point at which the linear gradient will finish</doc>
8503            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
8504          </parameter>
8505          <parameter name="color_stops" transfer-ownership="none">
8506            <doc xml:space="preserve"
8507                 filename="gsk/gskrendernodeimpl.c"
8508                 line="846">a pointer to an array of
8509`GskColorStop` defining the gradient. The offsets of all color stops
8510  must be increasing. The first stop's offset must be &gt;= 0 and the last
8511  stop's offset must be &lt;= 1.</doc>
8512            <array length="4" zero-terminated="0" c:type="const GskColorStop*">
8513              <type name="ColorStop" c:type="GskColorStop"/>
8514            </array>
8515          </parameter>
8516          <parameter name="n_color_stops" transfer-ownership="none">
8517            <doc xml:space="preserve"
8518                 filename="gsk/gskrendernodeimpl.c"
8519                 line="850">the number of elements in @color_stops</doc>
8520            <type name="gsize" c:type="gsize"/>
8521          </parameter>
8522        </parameters>
8523      </constructor>
8524    </class>
8525    <class name="RepeatingRadialGradientNode"
8526           c:symbol-prefix="repeating_radial_gradient_node"
8527           c:type="GskRepeatingRadialGradientNode"
8528           parent="RenderNode"
8529           glib:type-name="GskRepeatingRadialGradientNode"
8530           glib:get-type="gsk_repeating_radial_gradient_node_get_type"
8531           glib:fundamental="1">
8532      <doc xml:space="preserve"
8533           filename="gsk/gskrendernodeimpl.c"
8534           line="1092">A render node for a repeating radial gradient.</doc>
8535      <constructor name="new"
8536                   c:identifier="gsk_repeating_radial_gradient_node_new">
8537        <doc xml:space="preserve"
8538             filename="gsk/gskrendernodeimpl.c"
8539             line="1398">Creates a `GskRenderNode` that draws a repeating radial gradient.
8540
8541The radial gradient starts around @center. The size of the gradient
8542is dictated by @hradius in horizontal orientation and by @vradius
8543in vertical orientation.</doc>
8544        <source-position filename="gsk/gskrendernode.h" line="327"/>
8545        <return-value transfer-ownership="full">
8546          <doc xml:space="preserve"
8547               filename="gsk/gskrendernodeimpl.c"
8548               line="1418">A new `GskRenderNode`</doc>
8549          <type name="RepeatingRadialGradientNode" c:type="GskRenderNode*"/>
8550        </return-value>
8551        <parameters>
8552          <parameter name="bounds" transfer-ownership="none">
8553            <doc xml:space="preserve"
8554                 filename="gsk/gskrendernodeimpl.c"
8555                 line="1400">the bounds of the node</doc>
8556            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8557          </parameter>
8558          <parameter name="center" transfer-ownership="none">
8559            <doc xml:space="preserve"
8560                 filename="gsk/gskrendernodeimpl.c"
8561                 line="1401">the center of the gradient</doc>
8562            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
8563          </parameter>
8564          <parameter name="hradius" transfer-ownership="none">
8565            <doc xml:space="preserve"
8566                 filename="gsk/gskrendernodeimpl.c"
8567                 line="1402">the horizontal radius</doc>
8568            <type name="gfloat" c:type="float"/>
8569          </parameter>
8570          <parameter name="vradius" transfer-ownership="none">
8571            <doc xml:space="preserve"
8572                 filename="gsk/gskrendernodeimpl.c"
8573                 line="1403">the vertical radius</doc>
8574            <type name="gfloat" c:type="float"/>
8575          </parameter>
8576          <parameter name="start" transfer-ownership="none">
8577            <doc xml:space="preserve"
8578                 filename="gsk/gskrendernodeimpl.c"
8579                 line="1404">a percentage &gt;= 0 that defines the start of the gradient around @center</doc>
8580            <type name="gfloat" c:type="float"/>
8581          </parameter>
8582          <parameter name="end" transfer-ownership="none">
8583            <doc xml:space="preserve"
8584                 filename="gsk/gskrendernodeimpl.c"
8585                 line="1405">a percentage &gt;= 0 that defines the end of the gradient around @center</doc>
8586            <type name="gfloat" c:type="float"/>
8587          </parameter>
8588          <parameter name="color_stops" transfer-ownership="none">
8589            <doc xml:space="preserve"
8590                 filename="gsk/gskrendernodeimpl.c"
8591                 line="1406">a pointer to an array of
8592  `GskColorStop` defining the gradient. The offsets of all color stops
8593  must be increasing. The first stop's offset must be &gt;= 0 and the last
8594  stop's offset must be &lt;= 1.</doc>
8595            <array length="7" zero-terminated="0" c:type="const GskColorStop*">
8596              <type name="ColorStop" c:type="GskColorStop"/>
8597            </array>
8598          </parameter>
8599          <parameter name="n_color_stops" transfer-ownership="none">
8600            <doc xml:space="preserve"
8601                 filename="gsk/gskrendernodeimpl.c"
8602                 line="1410">the number of elements in @color_stops</doc>
8603            <type name="gsize" c:type="gsize"/>
8604          </parameter>
8605        </parameters>
8606      </constructor>
8607    </class>
8608    <class name="RoundedClipNode"
8609           c:symbol-prefix="rounded_clip_node"
8610           c:type="GskRoundedClipNode"
8611           parent="RenderNode"
8612           glib:type-name="GskRoundedClipNode"
8613           glib:get-type="gsk_rounded_clip_node_get_type"
8614           glib:fundamental="1">
8615      <doc xml:space="preserve"
8616           filename="gsk/gskrendernodeimpl.c"
8617           line="5714">A render node applying a rounded rectangle clip to its single child.</doc>
8618      <constructor name="new" c:identifier="gsk_rounded_clip_node_new">
8619        <doc xml:space="preserve"
8620             filename="gsk/gskrendernodeimpl.c"
8621             line="5828">Creates a `GskRenderNode` that will clip the @child to the area
8622given by @clip.</doc>
8623        <source-position filename="gsk/gskrendernode.h" line="471"/>
8624        <return-value transfer-ownership="full">
8625          <doc xml:space="preserve"
8626               filename="gsk/gskrendernodeimpl.c"
8627               line="5836">A new `GskRenderNode`</doc>
8628          <type name="RoundedClipNode" c:type="GskRenderNode*"/>
8629        </return-value>
8630        <parameters>
8631          <parameter name="child" transfer-ownership="none">
8632            <doc xml:space="preserve"
8633                 filename="gsk/gskrendernodeimpl.c"
8634                 line="5830">The node to draw</doc>
8635            <type name="RenderNode" c:type="GskRenderNode*"/>
8636          </parameter>
8637          <parameter name="clip" transfer-ownership="none">
8638            <doc xml:space="preserve"
8639                 filename="gsk/gskrendernodeimpl.c"
8640                 line="5831">The clip to apply</doc>
8641            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8642          </parameter>
8643        </parameters>
8644      </constructor>
8645      <method name="get_child" c:identifier="gsk_rounded_clip_node_get_child">
8646        <doc xml:space="preserve"
8647             filename="gsk/gskrendernodeimpl.c"
8648             line="5862">Gets the child node that is getting clipped by the given @node.</doc>
8649        <source-position filename="gsk/gskrendernode.h" line="474"/>
8650        <return-value transfer-ownership="none">
8651          <doc xml:space="preserve"
8652               filename="gsk/gskrendernodeimpl.c"
8653               line="5868">The child that is getting clipped</doc>
8654          <type name="RenderNode" c:type="GskRenderNode*"/>
8655        </return-value>
8656        <parameters>
8657          <instance-parameter name="node" transfer-ownership="none">
8658            <doc xml:space="preserve"
8659                 filename="gsk/gskrendernodeimpl.c"
8660                 line="5864">a rounded clip `GskRenderNode`</doc>
8661            <type name="RoundedClipNode" c:type="const GskRenderNode*"/>
8662          </instance-parameter>
8663        </parameters>
8664      </method>
8665      <method name="get_clip" c:identifier="gsk_rounded_clip_node_get_clip">
8666        <doc xml:space="preserve"
8667             filename="gsk/gskrendernodeimpl.c"
8668             line="5878">Retrieves the rounded rectangle used to clip the contents of the @node.</doc>
8669        <source-position filename="gsk/gskrendernode.h" line="476"/>
8670        <return-value transfer-ownership="none">
8671          <doc xml:space="preserve"
8672               filename="gsk/gskrendernodeimpl.c"
8673               line="5884">a rounded rectangle</doc>
8674          <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8675        </return-value>
8676        <parameters>
8677          <instance-parameter name="node" transfer-ownership="none">
8678            <doc xml:space="preserve"
8679                 filename="gsk/gskrendernodeimpl.c"
8680                 line="5880">a rounded clip `GskRenderNode`</doc>
8681            <type name="RoundedClipNode" c:type="const GskRenderNode*"/>
8682          </instance-parameter>
8683        </parameters>
8684      </method>
8685    </class>
8686    <record name="RoundedRect" c:type="GskRoundedRect">
8687      <doc xml:space="preserve"
8688           filename="gsk/gskroundedrect.c"
8689           line="19">A rectangular region with rounded corners.
8690
8691Application code should normalize rectangles using
8692[method@Gsk.RoundedRect.normalize]; this function will ensure that
8693the bounds of the rectangle are normalized and ensure that the corner
8694values are positive and the corners do not overlap.
8695
8696All functions taking a `GskRoundedRect` as an argument will internally
8697operate on a normalized copy; all functions returning a `GskRoundedRect`
8698will always return a normalized one.
8699
8700The algorithm used for normalizing corner sizes is described in
8701[the CSS specification](https://drafts.csswg.org/css-backgrounds-3/#border-radius).</doc>
8702      <source-position filename="gsk/gskroundedrect.h" line="53"/>
8703      <field name="bounds" writable="1">
8704        <doc xml:space="preserve"
8705             filename="gsk/gskroundedrect.c"
8706             line="21">the bounds of the rectangle</doc>
8707        <type name="Graphene.Rect" c:type="graphene_rect_t"/>
8708      </field>
8709      <field name="corner" writable="1">
8710        <doc xml:space="preserve"
8711             filename="gsk/gskroundedrect.c"
8712             line="22">the size of the 4 rounded corners</doc>
8713        <array zero-terminated="0" fixed-size="4">
8714          <type name="Graphene.Size" c:type="graphene_size_t"/>
8715        </array>
8716      </field>
8717      <method name="contains_point"
8718              c:identifier="gsk_rounded_rect_contains_point">
8719        <doc xml:space="preserve"
8720             filename="gsk/gskroundedrect.c"
8721             line="483">Checks if the given point is inside the rounded rectangle.</doc>
8722        <source-position filename="gsk/gskroundedrect.h" line="87"/>
8723        <return-value transfer-ownership="none">
8724          <doc xml:space="preserve"
8725               filename="gsk/gskroundedrect.c"
8726               line="490">true if the point is inside the rounded rectangle</doc>
8727          <type name="gboolean" c:type="gboolean"/>
8728        </return-value>
8729        <parameters>
8730          <instance-parameter name="self" transfer-ownership="none">
8731            <doc xml:space="preserve"
8732                 filename="gsk/gskroundedrect.c"
8733                 line="485">a rounded rectangle</doc>
8734            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8735          </instance-parameter>
8736          <parameter name="point" transfer-ownership="none">
8737            <doc xml:space="preserve"
8738                 filename="gsk/gskroundedrect.c"
8739                 line="486">the point to check</doc>
8740            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
8741          </parameter>
8742        </parameters>
8743      </method>
8744      <method name="contains_rect"
8745              c:identifier="gsk_rounded_rect_contains_rect">
8746        <doc xml:space="preserve"
8747             filename="gsk/gskroundedrect.c"
8748             line="499">Checks if the given rectangle is contained inside the rounded rectangle.</doc>
8749        <source-position filename="gsk/gskroundedrect.h" line="90"/>
8750        <return-value transfer-ownership="none">
8751          <doc xml:space="preserve"
8752               filename="gsk/gskroundedrect.c"
8753               line="506">true if the @rect is fully contained inside the rounded rectangle</doc>
8754          <type name="gboolean" c:type="gboolean"/>
8755        </return-value>
8756        <parameters>
8757          <instance-parameter name="self" transfer-ownership="none">
8758            <doc xml:space="preserve"
8759                 filename="gsk/gskroundedrect.c"
8760                 line="501">a rounded rectangle</doc>
8761            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8762          </instance-parameter>
8763          <parameter name="rect" transfer-ownership="none">
8764            <doc xml:space="preserve"
8765                 filename="gsk/gskroundedrect.c"
8766                 line="502">the rectangle to check</doc>
8767            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8768          </parameter>
8769        </parameters>
8770      </method>
8771      <method name="init" c:identifier="gsk_rounded_rect_init">
8772        <doc xml:space="preserve"
8773             filename="gsk/gskroundedrect.c"
8774             line="95">Initializes a rounded rectangle with the given values.
8775
8776This function will implicitly normalize the rounded rectangle
8777before returning.</doc>
8778        <source-position filename="gsk/gskroundedrect.h" line="56"/>
8779        <return-value transfer-ownership="none">
8780          <doc xml:space="preserve"
8781               filename="gsk/gskroundedrect.c"
8782               line="109">the initialized rounded rectangle</doc>
8783          <type name="RoundedRect" c:type="GskRoundedRect*"/>
8784        </return-value>
8785        <parameters>
8786          <instance-parameter name="self" transfer-ownership="none">
8787            <doc xml:space="preserve"
8788                 filename="gsk/gskroundedrect.c"
8789                 line="97">the rounded rectangle to initialize</doc>
8790            <type name="RoundedRect" c:type="GskRoundedRect*"/>
8791          </instance-parameter>
8792          <parameter name="bounds" transfer-ownership="none">
8793            <doc xml:space="preserve"
8794                 filename="gsk/gskroundedrect.c"
8795                 line="98">a `graphene_rect_t` describing the bounds</doc>
8796            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8797          </parameter>
8798          <parameter name="top_left" transfer-ownership="none">
8799            <doc xml:space="preserve"
8800                 filename="gsk/gskroundedrect.c"
8801                 line="99">the rounding radius of the top left corner</doc>
8802            <type name="Graphene.Size" c:type="const graphene_size_t*"/>
8803          </parameter>
8804          <parameter name="top_right" transfer-ownership="none">
8805            <doc xml:space="preserve"
8806                 filename="gsk/gskroundedrect.c"
8807                 line="100">the rounding radius of the top right corner</doc>
8808            <type name="Graphene.Size" c:type="const graphene_size_t*"/>
8809          </parameter>
8810          <parameter name="bottom_right" transfer-ownership="none">
8811            <doc xml:space="preserve"
8812                 filename="gsk/gskroundedrect.c"
8813                 line="101">the rounding radius of the bottom right corner</doc>
8814            <type name="Graphene.Size" c:type="const graphene_size_t*"/>
8815          </parameter>
8816          <parameter name="bottom_left" transfer-ownership="none">
8817            <doc xml:space="preserve"
8818                 filename="gsk/gskroundedrect.c"
8819                 line="102">the rounding radius of the bottom left corner</doc>
8820            <type name="Graphene.Size" c:type="const graphene_size_t*"/>
8821          </parameter>
8822        </parameters>
8823      </method>
8824      <method name="init_copy" c:identifier="gsk_rounded_rect_init_copy">
8825        <doc xml:space="preserve"
8826             filename="gsk/gskroundedrect.c"
8827             line="130">Initializes a rounded rectangle with a copy.
8828
8829This function will not normalize the rounded rectangle,
8830so make sure the source is normalized.</doc>
8831        <source-position filename="gsk/gskroundedrect.h" line="63"/>
8832        <return-value transfer-ownership="none">
8833          <doc xml:space="preserve"
8834               filename="gsk/gskroundedrect.c"
8835               line="140">the initialized rounded rectangle</doc>
8836          <type name="RoundedRect" c:type="GskRoundedRect*"/>
8837        </return-value>
8838        <parameters>
8839          <instance-parameter name="self" transfer-ownership="none">
8840            <doc xml:space="preserve"
8841                 filename="gsk/gskroundedrect.c"
8842                 line="132">the rounded rectangle to initialize</doc>
8843            <type name="RoundedRect" c:type="GskRoundedRect*"/>
8844          </instance-parameter>
8845          <parameter name="src" transfer-ownership="none">
8846            <doc xml:space="preserve"
8847                 filename="gsk/gskroundedrect.c"
8848                 line="133">another rounded rectangle</doc>
8849            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8850          </parameter>
8851        </parameters>
8852      </method>
8853      <method name="init_from_rect"
8854              c:identifier="gsk_rounded_rect_init_from_rect">
8855        <doc xml:space="preserve"
8856             filename="gsk/gskroundedrect.c"
8857             line="151">Initializes a rounded rectangle to the given bounds
8858and sets the radius of all four corners equally.</doc>
8859        <source-position filename="gsk/gskroundedrect.h" line="66"/>
8860        <return-value transfer-ownership="none">
8861          <doc xml:space="preserve"
8862               filename="gsk/gskroundedrect.c"
8863               line="160">the initialized rounded rectangle</doc>
8864          <type name="RoundedRect" c:type="GskRoundedRect*"/>
8865        </return-value>
8866        <parameters>
8867          <instance-parameter name="self" transfer-ownership="none">
8868            <doc xml:space="preserve"
8869                 filename="gsk/gskroundedrect.c"
8870                 line="153">the rounded rectangle to initialize</doc>
8871            <type name="RoundedRect" c:type="GskRoundedRect*"/>
8872          </instance-parameter>
8873          <parameter name="bounds" transfer-ownership="none">
8874            <doc xml:space="preserve"
8875                 filename="gsk/gskroundedrect.c"
8876                 line="154">a `graphene_rect_t`</doc>
8877            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8878          </parameter>
8879          <parameter name="radius" transfer-ownership="none">
8880            <doc xml:space="preserve"
8881                 filename="gsk/gskroundedrect.c"
8882                 line="155">the border radius</doc>
8883            <type name="gfloat" c:type="float"/>
8884          </parameter>
8885        </parameters>
8886      </method>
8887      <method name="intersects_rect"
8888              c:identifier="gsk_rounded_rect_intersects_rect">
8889        <doc xml:space="preserve"
8890             filename="gsk/gskroundedrect.c"
8891             line="556">Checks if part a rectangle is contained
8892inside the rounded rectangle.</doc>
8893        <source-position filename="gsk/gskroundedrect.h" line="93"/>
8894        <return-value transfer-ownership="none">
8895          <doc xml:space="preserve"
8896               filename="gsk/gskroundedrect.c"
8897               line="564">true if the @rect intersects with the rounded rectangle</doc>
8898          <type name="gboolean" c:type="gboolean"/>
8899        </return-value>
8900        <parameters>
8901          <instance-parameter name="self" transfer-ownership="none">
8902            <doc xml:space="preserve"
8903                 filename="gsk/gskroundedrect.c"
8904                 line="558">a rounded rectangle</doc>
8905            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8906          </instance-parameter>
8907          <parameter name="rect" transfer-ownership="none">
8908            <doc xml:space="preserve"
8909                 filename="gsk/gskroundedrect.c"
8910                 line="559">the rectangle to check</doc>
8911            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
8912          </parameter>
8913        </parameters>
8914      </method>
8915      <method name="is_rectilinear"
8916              c:identifier="gsk_rounded_rect_is_rectilinear">
8917        <doc xml:space="preserve"
8918             filename="gsk/gskroundedrect.c"
8919             line="395">Checks if all corners of a rounded rectangle are right angles
8920and the rectangle covers all of its bounds.
8921
8922This information can be used to decide if [ctor@Gsk.ClipNode.new]
8923or [ctor@Gsk.RoundedClipNode.new] should be called.</doc>
8924        <source-position filename="gsk/gskroundedrect.h" line="85"/>
8925        <return-value transfer-ownership="none">
8926          <doc xml:space="preserve"
8927               filename="gsk/gskroundedrect.c"
8928               line="405">true if the rounded rectangle is rectilinear</doc>
8929          <type name="gboolean" c:type="gboolean"/>
8930        </return-value>
8931        <parameters>
8932          <instance-parameter name="self" transfer-ownership="none">
8933            <doc xml:space="preserve"
8934                 filename="gsk/gskroundedrect.c"
8935                 line="397">the rounded rectangle to check</doc>
8936            <type name="RoundedRect" c:type="const GskRoundedRect*"/>
8937          </instance-parameter>
8938        </parameters>
8939      </method>
8940      <method name="normalize" c:identifier="gsk_rounded_rect_normalize">
8941        <doc xml:space="preserve"
8942             filename="gsk/gskroundedrect.c"
8943             line="172">Normalizes a rounded rectangle.
8944
8945This function will ensure that the bounds of the rounded rectangle
8946are normalized and ensure that the corner values are positive
8947and the corners do not overlap.</doc>
8948        <source-position filename="gsk/gskroundedrect.h" line="71"/>
8949        <return-value transfer-ownership="none">
8950          <doc xml:space="preserve"
8951               filename="gsk/gskroundedrect.c"
8952               line="182">the normalized rounded rectangle</doc>
8953          <type name="RoundedRect" c:type="GskRoundedRect*"/>
8954        </return-value>
8955        <parameters>
8956          <instance-parameter name="self" transfer-ownership="none">
8957            <doc xml:space="preserve"
8958                 filename="gsk/gskroundedrect.c"
8959                 line="174">a rounded rectangle</doc>
8960            <type name="RoundedRect" c:type="GskRoundedRect*"/>
8961          </instance-parameter>
8962        </parameters>
8963      </method>
8964      <method name="offset" c:identifier="gsk_rounded_rect_offset">
8965        <doc xml:space="preserve"
8966             filename="gsk/gskroundedrect.c"
8967             line="192">Offsets the rounded rectangle's origin by @dx and @dy.
8968
8969The size and corners of the rounded rectangle are unchanged.</doc>
8970        <source-position filename="gsk/gskroundedrect.h" line="74"/>
8971        <return-value transfer-ownership="none">
8972          <doc xml:space="preserve"
8973               filename="gsk/gskroundedrect.c"
8974               line="202">the offset rounded rectangle</doc>
8975          <type name="RoundedRect" c:type="GskRoundedRect*"/>
8976        </return-value>
8977        <parameters>
8978          <instance-parameter name="self" transfer-ownership="none">
8979            <doc xml:space="preserve"
8980                 filename="gsk/gskroundedrect.c"
8981                 line="194">a rounded rectangle</doc>
8982            <type name="RoundedRect" c:type="GskRoundedRect*"/>
8983          </instance-parameter>
8984          <parameter name="dx" transfer-ownership="none">
8985            <doc xml:space="preserve"
8986                 filename="gsk/gskroundedrect.c"
8987                 line="195">the horizontal offset</doc>
8988            <type name="gfloat" c:type="float"/>
8989          </parameter>
8990          <parameter name="dy" transfer-ownership="none">
8991            <doc xml:space="preserve"
8992                 filename="gsk/gskroundedrect.c"
8993                 line="196">the vertical offset</doc>
8994            <type name="gfloat" c:type="float"/>
8995          </parameter>
8996        </parameters>
8997      </method>
8998      <method name="shrink" c:identifier="gsk_rounded_rect_shrink">
8999        <doc xml:space="preserve"
9000             filename="gsk/gskroundedrect.c"
9001             line="240">Shrinks (or grows) a rounded rectangle by moving the 4 sides
9002according to the offsets given.
9003
9004The corner radii will be changed in a way that tries to keep
9005the center of the corner circle intact. This emulates CSS behavior.
9006
9007This function also works for growing rounded rectangles
9008if you pass negative values for the @top, @right, @bottom or @left.</doc>
9009        <source-position filename="gsk/gskroundedrect.h" line="78"/>
9010        <return-value transfer-ownership="none">
9011          <doc xml:space="preserve"
9012               filename="gsk/gskroundedrect.c"
9013               line="257">the resized rounded rectangle</doc>
9014          <type name="RoundedRect" c:type="GskRoundedRect*"/>
9015        </return-value>
9016        <parameters>
9017          <instance-parameter name="self" transfer-ownership="none">
9018            <doc xml:space="preserve"
9019                 filename="gsk/gskroundedrect.c"
9020                 line="242">the rounded rectangle to shrink or grow</doc>
9021            <type name="RoundedRect" c:type="GskRoundedRect*"/>
9022          </instance-parameter>
9023          <parameter name="top" transfer-ownership="none">
9024            <doc xml:space="preserve"
9025                 filename="gsk/gskroundedrect.c"
9026                 line="243">how far to move the top side downwards</doc>
9027            <type name="gfloat" c:type="float"/>
9028          </parameter>
9029          <parameter name="right" transfer-ownership="none">
9030            <doc xml:space="preserve"
9031                 filename="gsk/gskroundedrect.c"
9032                 line="244">how far to move the right side to the left</doc>
9033            <type name="gfloat" c:type="float"/>
9034          </parameter>
9035          <parameter name="bottom" transfer-ownership="none">
9036            <doc xml:space="preserve"
9037                 filename="gsk/gskroundedrect.c"
9038                 line="245">how far to move the bottom side upwards</doc>
9039            <type name="gfloat" c:type="float"/>
9040          </parameter>
9041          <parameter name="left" transfer-ownership="none">
9042            <doc xml:space="preserve"
9043                 filename="gsk/gskroundedrect.c"
9044                 line="246">how far to move the left side to the right</doc>
9045            <type name="gfloat" c:type="float"/>
9046          </parameter>
9047        </parameters>
9048      </method>
9049    </record>
9050    <enumeration name="ScalingFilter"
9051                 glib:type-name="GskScalingFilter"
9052                 glib:get-type="gsk_scaling_filter_get_type"
9053                 c:type="GskScalingFilter">
9054      <doc xml:space="preserve"
9055           filename="gsk/gskenums.h"
9056           line="139">The filters used when scaling texture data.
9057
9058The actual implementation of each filter is deferred to the
9059rendering pipeline.</doc>
9060      <member name="linear"
9061              value="0"
9062              c:identifier="GSK_SCALING_FILTER_LINEAR"
9063              glib:nick="linear"
9064              glib:name="GSK_SCALING_FILTER_LINEAR">
9065        <doc xml:space="preserve"
9066             filename="gsk/gskenums.h"
9067             line="141">linear interpolation filter</doc>
9068      </member>
9069      <member name="nearest"
9070              value="1"
9071              c:identifier="GSK_SCALING_FILTER_NEAREST"
9072              glib:nick="nearest"
9073              glib:name="GSK_SCALING_FILTER_NEAREST">
9074        <doc xml:space="preserve"
9075             filename="gsk/gskenums.h"
9076             line="142">nearest neighbor interpolation filter</doc>
9077      </member>
9078      <member name="trilinear"
9079              value="2"
9080              c:identifier="GSK_SCALING_FILTER_TRILINEAR"
9081              glib:nick="trilinear"
9082              glib:name="GSK_SCALING_FILTER_TRILINEAR">
9083        <doc xml:space="preserve"
9084             filename="gsk/gskenums.h"
9085             line="143">linear interpolation along each axis,
9086  plus mipmap generation, with linear interpolation along the mipmap
9087  levels</doc>
9088      </member>
9089    </enumeration>
9090    <enumeration name="SerializationError"
9091                 glib:type-name="GskSerializationError"
9092                 glib:get-type="gsk_serialization_error_get_type"
9093                 c:type="GskSerializationError"
9094                 glib:error-domain="gsk-serialization-error-quark">
9095      <doc xml:space="preserve"
9096           filename="gsk/gskenums.h"
9097           line="381">Errors that can happen during (de)serialization.</doc>
9098      <member name="unsupported_format"
9099              value="0"
9100              c:identifier="GSK_SERIALIZATION_UNSUPPORTED_FORMAT"
9101              glib:nick="unsupported-format"
9102              glib:name="GSK_SERIALIZATION_UNSUPPORTED_FORMAT">
9103        <doc xml:space="preserve"
9104             filename="gsk/gskenums.h"
9105             line="383">The format can not be identified</doc>
9106      </member>
9107      <member name="unsupported_version"
9108              value="1"
9109              c:identifier="GSK_SERIALIZATION_UNSUPPORTED_VERSION"
9110              glib:nick="unsupported-version"
9111              glib:name="GSK_SERIALIZATION_UNSUPPORTED_VERSION">
9112        <doc xml:space="preserve"
9113             filename="gsk/gskenums.h"
9114             line="384">The version of the data is not
9115  understood</doc>
9116      </member>
9117      <member name="invalid_data"
9118              value="2"
9119              c:identifier="GSK_SERIALIZATION_INVALID_DATA"
9120              glib:nick="invalid-data"
9121              glib:name="GSK_SERIALIZATION_INVALID_DATA">
9122        <doc xml:space="preserve"
9123             filename="gsk/gskenums.h"
9124             line="386">The given data may not exist in
9125  a proper serialization</doc>
9126      </member>
9127      <function name="quark" c:identifier="gsk_serialization_error_quark">
9128        <doc xml:space="preserve"
9129             filename="gsk/gskrendernode.c"
9130             line="53">Registers an error quark for [class@Gsk.RenderNode] errors.</doc>
9131        <return-value transfer-ownership="none">
9132          <doc xml:space="preserve"
9133               filename="gsk/gskrendernode.c"
9134               line="58">the error quark</doc>
9135          <type name="GLib.Quark" c:type="GQuark"/>
9136        </return-value>
9137      </function>
9138    </enumeration>
9139    <record name="ShaderArgsBuilder"
9140            c:type="GskShaderArgsBuilder"
9141            opaque="1"
9142            deprecated="1"
9143            deprecated-version="4.16"
9144            glib:type-name="GskShaderArgsBuilder"
9145            glib:get-type="gsk_shader_args_builder_get_type"
9146            c:symbol-prefix="shader_args_builder">
9147      <doc xml:space="preserve"
9148           filename="gsk/gskglshader.h"
9149           line="36">Builds the uniforms data for a `GskGLShader`.</doc>
9150      <source-position filename="gsk/gskglshader.h" line="44"/>
9151      <constructor name="new"
9152                   c:identifier="gsk_shader_args_builder_new"
9153                   deprecated="1"
9154                   deprecated-version="4.16">
9155        <doc xml:space="preserve"
9156             filename="gsk/gskglshader.c"
9157             line="1189">Allocates a builder that can be used to construct a new uniform data
9158chunk.</doc>
9159        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9160  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9161  for OpenGL rendering.</doc-deprecated>
9162        <source-position filename="gsk/gskglshader.h" line="128"/>
9163        <return-value transfer-ownership="full">
9164          <doc xml:space="preserve"
9165               filename="gsk/gskglshader.c"
9166               line="1197">The newly allocated builder, free with
9167    [method@Gsk.ShaderArgsBuilder.unref]</doc>
9168          <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9169        </return-value>
9170        <parameters>
9171          <parameter name="shader" transfer-ownership="none">
9172            <doc xml:space="preserve"
9173                 filename="gsk/gskglshader.c"
9174                 line="1191">a `GskGLShader`</doc>
9175            <type name="GLShader" c:type="GskGLShader*"/>
9176          </parameter>
9177          <parameter name="initial_values"
9178                     transfer-ownership="none"
9179                     nullable="1"
9180                     allow-none="1">
9181            <doc xml:space="preserve"
9182                 filename="gsk/gskglshader.c"
9183                 line="1192">optional `GBytes` with initial values</doc>
9184            <type name="GLib.Bytes" c:type="GBytes*"/>
9185          </parameter>
9186        </parameters>
9187      </constructor>
9188      <method name="free_to_args"
9189              c:identifier="gsk_shader_args_builder_free_to_args"
9190              introspectable="0"
9191              deprecated="1"
9192              deprecated-version="4.16">
9193        <doc xml:space="preserve"
9194             filename="gsk/gskglshader.c"
9195             line="1255">Creates a new `GBytes` args from the current state of the
9196given @builder, and frees the @builder instance.
9197
9198Any uniforms of the shader that have not been explicitly set
9199on the @builder are zero-initialized.</doc>
9200        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9201  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9202  for OpenGL rendering.</doc-deprecated>
9203        <source-position filename="gsk/gskglshader.h" line="133"/>
9204        <return-value transfer-ownership="full">
9205          <doc xml:space="preserve"
9206               filename="gsk/gskglshader.c"
9207               line="1265">the newly allocated buffer with
9208  all the args added to @builder</doc>
9209          <type name="GLib.Bytes" c:type="GBytes*"/>
9210        </return-value>
9211        <parameters>
9212          <instance-parameter name="builder" transfer-ownership="none">
9213            <doc xml:space="preserve"
9214                 filename="gsk/gskglshader.c"
9215                 line="1257">a `GskShaderArgsBuilder`</doc>
9216            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9217          </instance-parameter>
9218        </parameters>
9219      </method>
9220      <method name="ref"
9221              c:identifier="gsk_shader_args_builder_ref"
9222              deprecated="1"
9223              deprecated-version="4.16">
9224        <doc xml:space="preserve"
9225             filename="gsk/gskglshader.c"
9226             line="1315">Increases the reference count of a `GskShaderArgsBuilder` by one.</doc>
9227        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9228  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9229  for OpenGL rendering.</doc-deprecated>
9230        <source-position filename="gsk/gskglshader.h" line="135"/>
9231        <return-value transfer-ownership="full">
9232          <doc xml:space="preserve"
9233               filename="gsk/gskglshader.c"
9234               line="1321">the passed in `GskShaderArgsBuilder`</doc>
9235          <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9236        </return-value>
9237        <parameters>
9238          <instance-parameter name="builder" transfer-ownership="none">
9239            <doc xml:space="preserve"
9240                 filename="gsk/gskglshader.c"
9241                 line="1317">a `GskShaderArgsBuilder`</doc>
9242            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9243          </instance-parameter>
9244        </parameters>
9245      </method>
9246      <method name="set_bool"
9247              c:identifier="gsk_shader_args_builder_set_bool"
9248              deprecated="1"
9249              deprecated-version="4.16">
9250        <doc xml:space="preserve"
9251             filename="gsk/gskglshader.c"
9252             line="1428">Sets the value of the uniform @idx.
9253
9254The uniform must be of bool type.</doc>
9255        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9256  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9257  for OpenGL rendering.</doc-deprecated>
9258        <source-position filename="gsk/gskglshader.h" line="152"/>
9259        <return-value transfer-ownership="none">
9260          <type name="none" c:type="void"/>
9261        </return-value>
9262        <parameters>
9263          <instance-parameter name="builder" transfer-ownership="none">
9264            <doc xml:space="preserve"
9265                 filename="gsk/gskglshader.c"
9266                 line="1430">a `GskShaderArgsBuilder`</doc>
9267            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9268          </instance-parameter>
9269          <parameter name="idx" transfer-ownership="none">
9270            <doc xml:space="preserve"
9271                 filename="gsk/gskglshader.c"
9272                 line="1431">index of the uniform</doc>
9273            <type name="gint" c:type="int"/>
9274          </parameter>
9275          <parameter name="value" transfer-ownership="none">
9276            <doc xml:space="preserve"
9277                 filename="gsk/gskglshader.c"
9278                 line="1432">value to set the uniform to</doc>
9279            <type name="gboolean" c:type="gboolean"/>
9280          </parameter>
9281        </parameters>
9282      </method>
9283      <method name="set_float"
9284              c:identifier="gsk_shader_args_builder_set_float">
9285        <doc xml:space="preserve"
9286             filename="gsk/gskglshader.c"
9287             line="1336">Sets the value of the uniform @idx.
9288
9289The uniform must be of float type.</doc>
9290        <source-position filename="gsk/gskglshader.h" line="140"/>
9291        <return-value transfer-ownership="none">
9292          <type name="none" c:type="void"/>
9293        </return-value>
9294        <parameters>
9295          <instance-parameter name="builder" transfer-ownership="none">
9296            <doc xml:space="preserve"
9297                 filename="gsk/gskglshader.c"
9298                 line="1338">a `GskShaderArgsBuilder`</doc>
9299            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9300          </instance-parameter>
9301          <parameter name="idx" transfer-ownership="none">
9302            <doc xml:space="preserve"
9303                 filename="gsk/gskglshader.c"
9304                 line="1339">index of the uniform</doc>
9305            <type name="gint" c:type="int"/>
9306          </parameter>
9307          <parameter name="value" transfer-ownership="none">
9308            <doc xml:space="preserve"
9309                 filename="gsk/gskglshader.c"
9310                 line="1340">value to set the uniform to</doc>
9311            <type name="gfloat" c:type="float"/>
9312          </parameter>
9313        </parameters>
9314      </method>
9315      <method name="set_int"
9316              c:identifier="gsk_shader_args_builder_set_int"
9317              deprecated="1"
9318              deprecated-version="4.16">
9319        <doc xml:space="preserve"
9320             filename="gsk/gskglshader.c"
9321             line="1364">Sets the value of the uniform @idx.
9322
9323The uniform must be of int type.</doc>
9324        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9325  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9326  for OpenGL rendering.</doc-deprecated>
9327        <source-position filename="gsk/gskglshader.h" line="144"/>
9328        <return-value transfer-ownership="none">
9329          <type name="none" c:type="void"/>
9330        </return-value>
9331        <parameters>
9332          <instance-parameter name="builder" transfer-ownership="none">
9333            <doc xml:space="preserve"
9334                 filename="gsk/gskglshader.c"
9335                 line="1366">a `GskShaderArgsBuilder`</doc>
9336            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9337          </instance-parameter>
9338          <parameter name="idx" transfer-ownership="none">
9339            <doc xml:space="preserve"
9340                 filename="gsk/gskglshader.c"
9341                 line="1367">index of the uniform</doc>
9342            <type name="gint" c:type="int"/>
9343          </parameter>
9344          <parameter name="value" transfer-ownership="none">
9345            <doc xml:space="preserve"
9346                 filename="gsk/gskglshader.c"
9347                 line="1368">value to set the uniform to</doc>
9348            <type name="gint32" c:type="gint32"/>
9349          </parameter>
9350        </parameters>
9351      </method>
9352      <method name="set_uint"
9353              c:identifier="gsk_shader_args_builder_set_uint"
9354              deprecated="1"
9355              deprecated-version="4.16">
9356        <doc xml:space="preserve"
9357             filename="gsk/gskglshader.c"
9358             line="1396">Sets the value of the uniform @idx.
9359
9360The uniform must be of uint type.</doc>
9361        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9362  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9363  for OpenGL rendering.</doc-deprecated>
9364        <source-position filename="gsk/gskglshader.h" line="148"/>
9365        <return-value transfer-ownership="none">
9366          <type name="none" c:type="void"/>
9367        </return-value>
9368        <parameters>
9369          <instance-parameter name="builder" transfer-ownership="none">
9370            <doc xml:space="preserve"
9371                 filename="gsk/gskglshader.c"
9372                 line="1398">a `GskShaderArgsBuilder`</doc>
9373            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9374          </instance-parameter>
9375          <parameter name="idx" transfer-ownership="none">
9376            <doc xml:space="preserve"
9377                 filename="gsk/gskglshader.c"
9378                 line="1399">index of the uniform</doc>
9379            <type name="gint" c:type="int"/>
9380          </parameter>
9381          <parameter name="value" transfer-ownership="none">
9382            <doc xml:space="preserve"
9383                 filename="gsk/gskglshader.c"
9384                 line="1400">value to set the uniform to</doc>
9385            <type name="guint32" c:type="guint32"/>
9386          </parameter>
9387        </parameters>
9388      </method>
9389      <method name="set_vec2"
9390              c:identifier="gsk_shader_args_builder_set_vec2"
9391              deprecated="1"
9392              deprecated-version="4.16">
9393        <doc xml:space="preserve"
9394             filename="gsk/gskglshader.c"
9395             line="1460">Sets the value of the uniform @idx.
9396
9397The uniform must be of vec2 type.</doc>
9398        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9399  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9400  for OpenGL rendering.</doc-deprecated>
9401        <source-position filename="gsk/gskglshader.h" line="156"/>
9402        <return-value transfer-ownership="none">
9403          <type name="none" c:type="void"/>
9404        </return-value>
9405        <parameters>
9406          <instance-parameter name="builder" transfer-ownership="none">
9407            <doc xml:space="preserve"
9408                 filename="gsk/gskglshader.c"
9409                 line="1462">A `GskShaderArgsBuilder`</doc>
9410            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9411          </instance-parameter>
9412          <parameter name="idx" transfer-ownership="none">
9413            <doc xml:space="preserve"
9414                 filename="gsk/gskglshader.c"
9415                 line="1463">index of the uniform</doc>
9416            <type name="gint" c:type="int"/>
9417          </parameter>
9418          <parameter name="value" transfer-ownership="none">
9419            <doc xml:space="preserve"
9420                 filename="gsk/gskglshader.c"
9421                 line="1464">value to set the uniform too</doc>
9422            <type name="Graphene.Vec2" c:type="const graphene_vec2_t*"/>
9423          </parameter>
9424        </parameters>
9425      </method>
9426      <method name="set_vec3"
9427              c:identifier="gsk_shader_args_builder_set_vec3"
9428              deprecated="1"
9429              deprecated-version="4.16">
9430        <doc xml:space="preserve"
9431             filename="gsk/gskglshader.c"
9432             line="1492">Sets the value of the uniform @idx.
9433
9434The uniform must be of vec3 type.</doc>
9435        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9436  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9437  for OpenGL rendering.</doc-deprecated>
9438        <source-position filename="gsk/gskglshader.h" line="160"/>
9439        <return-value transfer-ownership="none">
9440          <type name="none" c:type="void"/>
9441        </return-value>
9442        <parameters>
9443          <instance-parameter name="builder" transfer-ownership="none">
9444            <doc xml:space="preserve"
9445                 filename="gsk/gskglshader.c"
9446                 line="1494">a `GskShaderArgsBuilder`</doc>
9447            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9448          </instance-parameter>
9449          <parameter name="idx" transfer-ownership="none">
9450            <doc xml:space="preserve"
9451                 filename="gsk/gskglshader.c"
9452                 line="1495">index of the uniform</doc>
9453            <type name="gint" c:type="int"/>
9454          </parameter>
9455          <parameter name="value" transfer-ownership="none">
9456            <doc xml:space="preserve"
9457                 filename="gsk/gskglshader.c"
9458                 line="1496">value to set the uniform too</doc>
9459            <type name="Graphene.Vec3" c:type="const graphene_vec3_t*"/>
9460          </parameter>
9461        </parameters>
9462      </method>
9463      <method name="set_vec4"
9464              c:identifier="gsk_shader_args_builder_set_vec4"
9465              deprecated="1"
9466              deprecated-version="4.16">
9467        <doc xml:space="preserve"
9468             filename="gsk/gskglshader.c"
9469             line="1524">Sets the value of the uniform @idx.
9470
9471The uniform must be of vec4 type.</doc>
9472        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9473  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9474  for OpenGL rendering.</doc-deprecated>
9475        <source-position filename="gsk/gskglshader.h" line="164"/>
9476        <return-value transfer-ownership="none">
9477          <type name="none" c:type="void"/>
9478        </return-value>
9479        <parameters>
9480          <instance-parameter name="builder" transfer-ownership="none">
9481            <doc xml:space="preserve"
9482                 filename="gsk/gskglshader.c"
9483                 line="1526">a `GskShaderArgsBuilder`</doc>
9484            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9485          </instance-parameter>
9486          <parameter name="idx" transfer-ownership="none">
9487            <doc xml:space="preserve"
9488                 filename="gsk/gskglshader.c"
9489                 line="1527">index of the uniform</doc>
9490            <type name="gint" c:type="int"/>
9491          </parameter>
9492          <parameter name="value" transfer-ownership="none">
9493            <doc xml:space="preserve"
9494                 filename="gsk/gskglshader.c"
9495                 line="1528">value to set the uniform too</doc>
9496            <type name="Graphene.Vec4" c:type="const graphene_vec4_t*"/>
9497          </parameter>
9498        </parameters>
9499      </method>
9500      <method name="to_args"
9501              c:identifier="gsk_shader_args_builder_to_args"
9502              deprecated="1"
9503              deprecated-version="4.16">
9504        <doc xml:space="preserve"
9505             filename="gsk/gskglshader.c"
9506             line="1225">Creates a new `GBytes` args from the current state of the
9507given @builder.
9508
9509Any uniforms of the shader that have not been explicitly set on
9510the @builder are zero-initialized.
9511
9512The given `GskShaderArgsBuilder` is reset once this function returns;
9513you cannot call this function multiple times on the same @builder instance.
9514
9515This function is intended primarily for bindings. C code should use
9516[method@Gsk.ShaderArgsBuilder.free_to_args].</doc>
9517        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9518  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9519  for OpenGL rendering.</doc-deprecated>
9520        <source-position filename="gsk/gskglshader.h" line="131"/>
9521        <return-value transfer-ownership="full">
9522          <doc xml:space="preserve"
9523               filename="gsk/gskglshader.c"
9524               line="1241">the newly allocated buffer with
9525  all the args added to @builder</doc>
9526          <type name="GLib.Bytes" c:type="GBytes*"/>
9527        </return-value>
9528        <parameters>
9529          <instance-parameter name="builder" transfer-ownership="none">
9530            <doc xml:space="preserve"
9531                 filename="gsk/gskglshader.c"
9532                 line="1227">a `GskShaderArgsBuilder`</doc>
9533            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9534          </instance-parameter>
9535        </parameters>
9536      </method>
9537      <method name="unref"
9538              c:identifier="gsk_shader_args_builder_unref"
9539              deprecated="1"
9540              deprecated-version="4.16">
9541        <doc xml:space="preserve"
9542             filename="gsk/gskglshader.c"
9543             line="1287">Decreases the reference count of a `GskShaderArgBuilder` by one.
9544
9545If the resulting reference count is zero, frees the builder.</doc>
9546        <doc-deprecated xml:space="preserve">GTK's new Vulkan-focused rendering
9547  does not support this feature. Use [GtkGLArea](../gtk4/class.GLArea.html)
9548  for OpenGL rendering.</doc-deprecated>
9549        <source-position filename="gsk/gskglshader.h" line="137"/>
9550        <return-value transfer-ownership="none">
9551          <type name="none" c:type="void"/>
9552        </return-value>
9553        <parameters>
9554          <instance-parameter name="builder" transfer-ownership="none">
9555            <doc xml:space="preserve"
9556                 filename="gsk/gskglshader.c"
9557                 line="1289">a `GskShaderArgsBuilder`</doc>
9558            <type name="ShaderArgsBuilder" c:type="GskShaderArgsBuilder*"/>
9559          </instance-parameter>
9560        </parameters>
9561      </method>
9562    </record>
9563    <record name="Shadow" c:type="GskShadow">
9564      <doc xml:space="preserve"
9565           filename="gsk/gskrendernode.h"
9566           line="54">The shadow parameters in a shadow node.</doc>
9567      <source-position filename="gsk/gskrendernode.h" line="69"/>
9568      <field name="color" writable="1">
9569        <doc xml:space="preserve"
9570             filename="gsk/gskrendernode.h"
9571             line="56">the color of the shadow</doc>
9572        <type name="Gdk.RGBA" c:type="GdkRGBA"/>
9573      </field>
9574      <field name="dx" writable="1">
9575        <doc xml:space="preserve"
9576             filename="gsk/gskrendernode.h"
9577             line="57">the horizontal offset of the shadow</doc>
9578        <type name="gfloat" c:type="float"/>
9579      </field>
9580      <field name="dy" writable="1">
9581        <doc xml:space="preserve"
9582             filename="gsk/gskrendernode.h"
9583             line="58">the vertical offset of the shadow</doc>
9584        <type name="gfloat" c:type="float"/>
9585      </field>
9586      <field name="radius" writable="1">
9587        <doc xml:space="preserve"
9588             filename="gsk/gskrendernode.h"
9589             line="59">the radius of the shadow</doc>
9590        <type name="gfloat" c:type="float"/>
9591      </field>
9592    </record>
9593    <class name="ShadowNode"
9594           c:symbol-prefix="shadow_node"
9595           c:type="GskShadowNode"
9596           parent="RenderNode"
9597           glib:type-name="GskShadowNode"
9598           glib:get-type="gsk_shadow_node_get_type"
9599           glib:fundamental="1">
9600      <doc xml:space="preserve"
9601           filename="gsk/gskrendernodeimpl.c"
9602           line="6315">A render node drawing one or more shadows behind its single child node.</doc>
9603      <constructor name="new" c:identifier="gsk_shadow_node_new">
9604        <doc xml:space="preserve"
9605             filename="gsk/gskrendernodeimpl.c"
9606             line="6485">Creates a `GskRenderNode` that will draw a @child with the given
9607@shadows below it.</doc>
9608        <source-position filename="gsk/gskrendernode.h" line="507"/>
9609        <return-value transfer-ownership="full">
9610          <doc xml:space="preserve"
9611               filename="gsk/gskrendernodeimpl.c"
9612               line="6494">A new `GskRenderNode`</doc>
9613          <type name="ShadowNode" c:type="GskRenderNode*"/>
9614        </return-value>
9615        <parameters>
9616          <parameter name="child" transfer-ownership="none">
9617            <doc xml:space="preserve"
9618                 filename="gsk/gskrendernodeimpl.c"
9619                 line="6487">The node to draw</doc>
9620            <type name="RenderNode" c:type="GskRenderNode*"/>
9621          </parameter>
9622          <parameter name="shadows" transfer-ownership="none">
9623            <doc xml:space="preserve"
9624                 filename="gsk/gskrendernodeimpl.c"
9625                 line="6488">The shadows to apply</doc>
9626            <array length="2" zero-terminated="0" c:type="const GskShadow*">
9627              <type name="Shadow" c:type="GskShadow"/>
9628            </array>
9629          </parameter>
9630          <parameter name="n_shadows" transfer-ownership="none">
9631            <doc xml:space="preserve"
9632                 filename="gsk/gskrendernodeimpl.c"
9633                 line="6489">number of entries in the @shadows array</doc>
9634            <type name="gsize" c:type="gsize"/>
9635          </parameter>
9636        </parameters>
9637      </constructor>
9638      <method name="get_child" c:identifier="gsk_shadow_node_get_child">
9639        <doc xml:space="preserve"
9640             filename="gsk/gskrendernodeimpl.c"
9641             line="6575">Retrieves the child `GskRenderNode` of the shadow @node.</doc>
9642        <source-position filename="gsk/gskrendernode.h" line="511"/>
9643        <return-value transfer-ownership="none">
9644          <doc xml:space="preserve"
9645               filename="gsk/gskrendernodeimpl.c"
9646               line="6581">the child render node</doc>
9647          <type name="RenderNode" c:type="GskRenderNode*"/>
9648        </return-value>
9649        <parameters>
9650          <instance-parameter name="node" transfer-ownership="none">
9651            <doc xml:space="preserve"
9652                 filename="gsk/gskrendernodeimpl.c"
9653                 line="6577">a shadow `GskRenderNode`</doc>
9654            <type name="ShadowNode" c:type="const GskRenderNode*"/>
9655          </instance-parameter>
9656        </parameters>
9657      </method>
9658      <method name="get_n_shadows"
9659              c:identifier="gsk_shadow_node_get_n_shadows">
9660        <doc xml:space="preserve"
9661             filename="gsk/gskrendernodeimpl.c"
9662             line="6648">Retrieves the number of shadows in the @node.</doc>
9663        <source-position filename="gsk/gskrendernode.h" line="516"/>
9664        <return-value transfer-ownership="none">
9665          <doc xml:space="preserve"
9666               filename="gsk/gskrendernodeimpl.c"
9667               line="6654">the number of shadows.</doc>
9668          <type name="gsize" c:type="gsize"/>
9669        </return-value>
9670        <parameters>
9671          <instance-parameter name="node" transfer-ownership="none">
9672            <doc xml:space="preserve"
9673                 filename="gsk/gskrendernodeimpl.c"
9674                 line="6650">a shadow `GskRenderNode`</doc>
9675            <type name="ShadowNode" c:type="const GskRenderNode*"/>
9676          </instance-parameter>
9677        </parameters>
9678      </method>
9679      <method name="get_shadow" c:identifier="gsk_shadow_node_get_shadow">
9680        <doc xml:space="preserve"
9681             filename="gsk/gskrendernodeimpl.c"
9682             line="6591">Retrieves the shadow data at the given index @i.</doc>
9683        <source-position filename="gsk/gskrendernode.h" line="513"/>
9684        <return-value transfer-ownership="none">
9685          <doc xml:space="preserve"
9686               filename="gsk/gskrendernodeimpl.c"
9687               line="6598">the shadow data</doc>
9688          <type name="Shadow" c:type="const GskShadow*"/>
9689        </return-value>
9690        <parameters>
9691          <instance-parameter name="node" transfer-ownership="none">
9692            <doc xml:space="preserve"
9693                 filename="gsk/gskrendernodeimpl.c"
9694                 line="6593">a shadow `GskRenderNode`</doc>
9695            <type name="ShadowNode" c:type="const GskRenderNode*"/>
9696          </instance-parameter>
9697          <parameter name="i" transfer-ownership="none">
9698            <doc xml:space="preserve"
9699                 filename="gsk/gskrendernodeimpl.c"
9700                 line="6594">the given index</doc>
9701            <type name="gsize" c:type="gsize"/>
9702          </parameter>
9703        </parameters>
9704      </method>
9705    </class>
9706    <record name="Stroke"
9707            c:type="GskStroke"
9708            opaque="1"
9709            version="4.14"
9710            glib:type-name="GskStroke"
9711            glib:get-type="gsk_stroke_get_type"
9712            c:symbol-prefix="stroke">
9713      <doc xml:space="preserve"
9714           filename="gsk/gskstroke.c"
9715           line="24">Collects the parameters that are needed when stroking a path.</doc>
9716      <source-position filename="gsk/gsktypes.h" line="35"/>
9717      <constructor name="new" c:identifier="gsk_stroke_new" version="4.14">
9718        <doc xml:space="preserve"
9719             filename="gsk/gskstroke.c"
9720             line="35">Creates a new `GskStroke` with the given @line_width.</doc>
9721        <source-position filename="gsk/gskstroke.h" line="36"/>
9722        <return-value transfer-ownership="full">
9723          <doc xml:space="preserve"
9724               filename="gsk/gskstroke.c"
9725               line="41">a new `GskStroke`</doc>
9726          <type name="Stroke" c:type="GskStroke*"/>
9727        </return-value>
9728        <parameters>
9729          <parameter name="line_width" transfer-ownership="none">
9730            <doc xml:space="preserve"
9731                 filename="gsk/gskstroke.c"
9732                 line="37">line width of the stroke. Must be &gt; 0</doc>
9733            <type name="gfloat" c:type="float"/>
9734          </parameter>
9735        </parameters>
9736      </constructor>
9737      <method name="copy" c:identifier="gsk_stroke_copy" version="4.14">
9738        <doc xml:space="preserve"
9739             filename="gsk/gskstroke.c"
9740             line="62">Creates a copy of a `GskStroke`.</doc>
9741        <source-position filename="gsk/gskstroke.h" line="38"/>
9742        <return-value transfer-ownership="full">
9743          <doc xml:space="preserve"
9744               filename="gsk/gskstroke.c"
9745               line="68">a new `GskStroke`. Use [method@Gsk.Stroke.free] to free it</doc>
9746          <type name="Stroke" c:type="GskStroke*"/>
9747        </return-value>
9748        <parameters>
9749          <instance-parameter name="other" transfer-ownership="none">
9750            <doc xml:space="preserve"
9751                 filename="gsk/gskstroke.c"
9752                 line="64">the stroke to copy</doc>
9753            <type name="Stroke" c:type="const GskStroke*"/>
9754          </instance-parameter>
9755        </parameters>
9756      </method>
9757      <method name="free" c:identifier="gsk_stroke_free" version="4.14">
9758        <doc xml:space="preserve"
9759             filename="gsk/gskstroke.c"
9760             line="86">Frees a `GskStroke`.</doc>
9761        <source-position filename="gsk/gskstroke.h" line="40"/>
9762        <return-value transfer-ownership="none">
9763          <type name="none" c:type="void"/>
9764        </return-value>
9765        <parameters>
9766          <instance-parameter name="self" transfer-ownership="none">
9767            <doc xml:space="preserve"
9768                 filename="gsk/gskstroke.c"
9769                 line="88">a stroke</doc>
9770            <type name="Stroke" c:type="GskStroke*"/>
9771          </instance-parameter>
9772        </parameters>
9773      </method>
9774      <method name="get_dash"
9775              c:identifier="gsk_stroke_get_dash"
9776              version="4.14">
9777        <doc xml:space="preserve"
9778             filename="gsk/gskstroke.c"
9779             line="430">Gets the dash array in use.</doc>
9780        <source-position filename="gsk/gskstroke.h" line="73"/>
9781        <return-value transfer-ownership="none" nullable="1">
9782          <doc xml:space="preserve"
9783               filename="gsk/gskstroke.c"
9784               line="437">
9785  the dash array or `NULL` if the dash array is empty</doc>
9786          <array length="0" zero-terminated="0" c:type="const float*">
9787            <type name="gfloat" c:type="float"/>
9788          </array>
9789        </return-value>
9790        <parameters>
9791          <instance-parameter name="self" transfer-ownership="none">
9792            <doc xml:space="preserve"
9793                 filename="gsk/gskstroke.c"
9794                 line="432">a stroke</doc>
9795            <type name="Stroke" c:type="const GskStroke*"/>
9796          </instance-parameter>
9797          <parameter name="n_dash"
9798                     direction="out"
9799                     caller-allocates="0"
9800                     transfer-ownership="full">
9801            <doc xml:space="preserve"
9802                 filename="gsk/gskstroke.c"
9803                 line="433">number of elements in the array returned</doc>
9804            <type name="gsize" c:type="gsize*"/>
9805          </parameter>
9806        </parameters>
9807      </method>
9808      <method name="get_dash_offset"
9809              c:identifier="gsk_stroke_get_dash_offset"
9810              version="4.14">
9811        <doc xml:space="preserve"
9812             filename="gsk/gskstroke.c"
9813             line="477">Gets the dash offset.</doc>
9814        <source-position filename="gsk/gskstroke.h" line="80"/>
9815        <return-value transfer-ownership="none">
9816          <doc xml:space="preserve"
9817               filename="gsk/gskstroke.c"
9818               line="483">the dash offset</doc>
9819          <type name="gfloat" c:type="float"/>
9820        </return-value>
9821        <parameters>
9822          <instance-parameter name="self" transfer-ownership="none">
9823            <doc xml:space="preserve"
9824                 filename="gsk/gskstroke.c"
9825                 line="479">a stroke</doc>
9826            <type name="Stroke" c:type="const GskStroke*"/>
9827          </instance-parameter>
9828        </parameters>
9829      </method>
9830      <method name="get_line_cap"
9831              c:identifier="gsk_stroke_get_line_cap"
9832              version="4.14">
9833        <doc xml:space="preserve"
9834             filename="gsk/gskstroke.c"
9835             line="264">Gets the line cap used.
9836
9837See [enum@Gsk.LineCap] for details.</doc>
9838        <source-position filename="gsk/gskstroke.h" line="55"/>
9839        <return-value transfer-ownership="none">
9840          <doc xml:space="preserve"
9841               filename="gsk/gskstroke.c"
9842               line="272">the line cap</doc>
9843          <type name="LineCap" c:type="GskLineCap"/>
9844        </return-value>
9845        <parameters>
9846          <instance-parameter name="self" transfer-ownership="none">
9847            <doc xml:space="preserve"
9848                 filename="gsk/gskstroke.c"
9849                 line="266">a stroke</doc>
9850            <type name="Stroke" c:type="const GskStroke*"/>
9851          </instance-parameter>
9852        </parameters>
9853      </method>
9854      <method name="get_line_join"
9855              c:identifier="gsk_stroke_get_line_join"
9856              version="4.14">
9857        <doc xml:space="preserve"
9858             filename="gsk/gskstroke.c"
9859             line="304">Gets the line join used.
9860
9861See [enum@Gsk.LineJoin] for details.</doc>
9862        <source-position filename="gsk/gskstroke.h" line="60"/>
9863        <return-value transfer-ownership="none">
9864          <doc xml:space="preserve"
9865               filename="gsk/gskstroke.c"
9866               line="312">the line join</doc>
9867          <type name="LineJoin" c:type="GskLineJoin"/>
9868        </return-value>
9869        <parameters>
9870          <instance-parameter name="self" transfer-ownership="none">
9871            <doc xml:space="preserve"
9872                 filename="gsk/gskstroke.c"
9873                 line="306">a stroke</doc>
9874            <type name="Stroke" c:type="const GskStroke*"/>
9875          </instance-parameter>
9876        </parameters>
9877      </method>
9878      <method name="get_line_width"
9879              c:identifier="gsk_stroke_get_line_width"
9880              version="4.14">
9881        <doc xml:space="preserve"
9882             filename="gsk/gskstroke.c"
9883             line="226">Gets the line width used.</doc>
9884        <source-position filename="gsk/gskstroke.h" line="50"/>
9885        <return-value transfer-ownership="none">
9886          <doc xml:space="preserve"
9887               filename="gsk/gskstroke.c"
9888               line="232">the line width</doc>
9889          <type name="gfloat" c:type="float"/>
9890        </return-value>
9891        <parameters>
9892          <instance-parameter name="self" transfer-ownership="none">
9893            <doc xml:space="preserve"
9894                 filename="gsk/gskstroke.c"
9895                 line="228">a stroke</doc>
9896            <type name="Stroke" c:type="const GskStroke*"/>
9897          </instance-parameter>
9898        </parameters>
9899      </method>
9900      <method name="get_miter_limit"
9901              c:identifier="gsk_stroke_get_miter_limit"
9902              version="4.14">
9903        <doc xml:space="preserve"
9904             filename="gsk/gskstroke.c"
9905             line="351">Gets the miter limit.</doc>
9906        <source-position filename="gsk/gskstroke.h" line="66"/>
9907        <return-value transfer-ownership="none">
9908          <doc xml:space="preserve"
9909               filename="gsk/gskstroke.c"
9910               line="357">the miter limit</doc>
9911          <type name="gfloat" c:type="float"/>
9912        </return-value>
9913        <parameters>
9914          <instance-parameter name="self" transfer-ownership="none">
9915            <doc xml:space="preserve"
9916                 filename="gsk/gskstroke.c"
9917                 line="353">a stroke</doc>
9918            <type name="Stroke" c:type="const GskStroke*"/>
9919          </instance-parameter>
9920        </parameters>
9921      </method>
9922      <method name="set_dash"
9923              c:identifier="gsk_stroke_set_dash"
9924              version="4.14">
9925        <doc xml:space="preserve"
9926             filename="gsk/gskstroke.c"
9927             line="369">Sets the dash pattern to use.
9928
9929A dash pattern is specified by an array of alternating non-negative
9930values. Each value provides the length of alternate "on" and "off"
9931portions of the stroke.
9932
9933Each "on" segment will have caps applied as if the segment were a
9934separate contour. In particular, it is valid to use an "on" length
9935of 0 with [enum@Gsk.LineCap.round] or [enum@Gsk.LineCap.square]
9936to draw dots or squares along a path.
9937
9938If @n_dash is 0, if all elements in @dash are 0, or if there are
9939negative values in @dash, then dashing is disabled.
9940
9941If @n_dash is 1, an alternating "on" and "off" pattern with the
9942single dash length provided is assumed.
9943
9944If @n_dash is uneven, the dash array will be used with the first
9945element in @dash defining an "on" or "off" in alternating passes
9946through the array.
9947
9948You can specify a starting offset into the dash with
9949[method@Gsk.Stroke.set_dash_offset].</doc>
9950        <source-position filename="gsk/gskstroke.h" line="69"/>
9951        <return-value transfer-ownership="none">
9952          <type name="none" c:type="void"/>
9953        </return-value>
9954        <parameters>
9955          <instance-parameter name="self" transfer-ownership="none">
9956            <doc xml:space="preserve"
9957                 filename="gsk/gskstroke.c"
9958                 line="371">a stroke</doc>
9959            <type name="Stroke" c:type="GskStroke*"/>
9960          </instance-parameter>
9961          <parameter name="dash"
9962                     transfer-ownership="none"
9963                     nullable="1"
9964                     allow-none="1">
9965            <doc xml:space="preserve"
9966                 filename="gsk/gskstroke.c"
9967                 line="372">
9968  the array of dashes</doc>
9969            <array length="1" zero-terminated="0" c:type="const float*">
9970              <type name="gfloat" c:type="float"/>
9971            </array>
9972          </parameter>
9973          <parameter name="n_dash" transfer-ownership="none">
9974            <doc xml:space="preserve"
9975                 filename="gsk/gskstroke.c"
9976                 line="374">number of elements in @dash</doc>
9977            <type name="gsize" c:type="gsize"/>
9978          </parameter>
9979        </parameters>
9980      </method>
9981      <method name="set_dash_offset"
9982              c:identifier="gsk_stroke_set_dash_offset"
9983              version="4.14">
9984        <doc xml:space="preserve"
9985             filename="gsk/gskstroke.c"
9986             line="454">Sets the offset into the dash pattern where dashing should begin.
9987
9988This is an offset into the length of the path, not an index into
9989the array values of the dash array.
9990
9991See [method@Gsk.Stroke.set_dash] for more details on dashing.</doc>
9992        <source-position filename="gsk/gskstroke.h" line="77"/>
9993        <return-value transfer-ownership="none">
9994          <type name="none" c:type="void"/>
9995        </return-value>
9996        <parameters>
9997          <instance-parameter name="self" transfer-ownership="none">
9998            <doc xml:space="preserve"
9999                 filename="gsk/gskstroke.c"
10000                 line="456">a stroke</doc>
10001            <type name="Stroke" c:type="GskStroke*"/>
10002          </instance-parameter>
10003          <parameter name="offset" transfer-ownership="none">
10004            <doc xml:space="preserve"
10005                 filename="gsk/gskstroke.c"
10006                 line="457">offset into the dash pattern</doc>
10007            <type name="gfloat" c:type="float"/>
10008          </parameter>
10009        </parameters>
10010      </method>
10011      <method name="set_line_cap"
10012              c:identifier="gsk_stroke_set_line_cap"
10013              version="4.14">
10014        <doc xml:space="preserve"
10015             filename="gsk/gskstroke.c"
10016             line="244">Sets the line cap to be used when stroking.
10017
10018See [enum@Gsk.LineCap] for details.</doc>
10019        <source-position filename="gsk/gskstroke.h" line="52"/>
10020        <return-value transfer-ownership="none">
10021          <type name="none" c:type="void"/>
10022        </return-value>
10023        <parameters>
10024          <instance-parameter name="self" transfer-ownership="none">
10025            <doc xml:space="preserve"
10026                 filename="gsk/gskstroke.c"
10027                 line="246">a stroke</doc>
10028            <type name="Stroke" c:type="GskStroke*"/>
10029          </instance-parameter>
10030          <parameter name="line_cap" transfer-ownership="none">
10031            <doc xml:space="preserve"
10032                 filename="gsk/gskstroke.c"
10033                 line="247">the line cap</doc>
10034            <type name="LineCap" c:type="GskLineCap"/>
10035          </parameter>
10036        </parameters>
10037      </method>
10038      <method name="set_line_join"
10039              c:identifier="gsk_stroke_set_line_join"
10040              version="4.14">
10041        <doc xml:space="preserve"
10042             filename="gsk/gskstroke.c"
10043             line="284">Sets the line join to be used when stroking.
10044
10045See [enum@Gsk.LineJoin] for details.</doc>
10046        <source-position filename="gsk/gskstroke.h" line="57"/>
10047        <return-value transfer-ownership="none">
10048          <type name="none" c:type="void"/>
10049        </return-value>
10050        <parameters>
10051          <instance-parameter name="self" transfer-ownership="none">
10052            <doc xml:space="preserve"
10053                 filename="gsk/gskstroke.c"
10054                 line="286">a stroke</doc>
10055            <type name="Stroke" c:type="GskStroke*"/>
10056          </instance-parameter>
10057          <parameter name="line_join" transfer-ownership="none">
10058            <doc xml:space="preserve"
10059                 filename="gsk/gskstroke.c"
10060                 line="287">the line join to use</doc>
10061            <type name="LineJoin" c:type="GskLineJoin"/>
10062          </parameter>
10063        </parameters>
10064      </method>
10065      <method name="set_line_width"
10066              c:identifier="gsk_stroke_set_line_width"
10067              version="4.14">
10068        <doc xml:space="preserve"
10069             filename="gsk/gskstroke.c"
10070             line="205">Sets the line width to be used when stroking.
10071
10072The line width must be &gt;= 0.</doc>
10073        <source-position filename="gsk/gskstroke.h" line="47"/>
10074        <return-value transfer-ownership="none">
10075          <type name="none" c:type="void"/>
10076        </return-value>
10077        <parameters>
10078          <instance-parameter name="self" transfer-ownership="none">
10079            <doc xml:space="preserve"
10080                 filename="gsk/gskstroke.c"
10081                 line="207">a stroke</doc>
10082            <type name="Stroke" c:type="GskStroke*"/>
10083          </instance-parameter>
10084          <parameter name="line_width" transfer-ownership="none">
10085            <doc xml:space="preserve"
10086                 filename="gsk/gskstroke.c"
10087                 line="208">width of the line in pixels</doc>
10088            <type name="gfloat" c:type="float"/>
10089          </parameter>
10090        </parameters>
10091      </method>
10092      <method name="set_miter_limit"
10093              c:identifier="gsk_stroke_set_miter_limit"
10094              version="4.14">
10095        <doc xml:space="preserve"
10096             filename="gsk/gskstroke.c"
10097             line="324">Sets the miter limit to be used when stroking.
10098
10099The miter limit is the distance from the corner where sharp
10100turns of joins get cut off.
10101
10102The limit is specfied in units of line width and must be non-negative.
10103
10104For joins of type [enum@Gsk.LineJoin.miter] that exceed the miter limit,
10105the join gets rendered as if it was of type [enum@Gsk.LineJoin.bevel].</doc>
10106        <source-position filename="gsk/gskstroke.h" line="63"/>
10107        <return-value transfer-ownership="none">
10108          <type name="none" c:type="void"/>
10109        </return-value>
10110        <parameters>
10111          <instance-parameter name="self" transfer-ownership="none">
10112            <doc xml:space="preserve"
10113                 filename="gsk/gskstroke.c"
10114                 line="326">a stroke</doc>
10115            <type name="Stroke" c:type="GskStroke*"/>
10116          </instance-parameter>
10117          <parameter name="limit" transfer-ownership="none">
10118            <doc xml:space="preserve"
10119                 filename="gsk/gskstroke.c"
10120                 line="327">the miter limit</doc>
10121            <type name="gfloat" c:type="float"/>
10122          </parameter>
10123        </parameters>
10124      </method>
10125      <method name="to_cairo"
10126              c:identifier="gsk_stroke_to_cairo"
10127              version="4.14">
10128        <doc xml:space="preserve"
10129             filename="gsk/gskstroke.c"
10130             line="105">A helper function that sets the stroke parameters
10131of a cairo context from a `GskStroke`.</doc>
10132        <source-position filename="gsk/gskstroke.h" line="83"/>
10133        <return-value transfer-ownership="none">
10134          <type name="none" c:type="void"/>
10135        </return-value>
10136        <parameters>
10137          <instance-parameter name="self" transfer-ownership="none">
10138            <doc xml:space="preserve"
10139                 filename="gsk/gskstroke.c"
10140                 line="107">a stroke</doc>
10141            <type name="Stroke" c:type="const GskStroke*"/>
10142          </instance-parameter>
10143          <parameter name="cr" transfer-ownership="none">
10144            <doc xml:space="preserve"
10145                 filename="gsk/gskstroke.c"
10146                 line="108">the cairo context to configure</doc>
10147            <type name="cairo.Context" c:type="cairo_t*"/>
10148          </parameter>
10149        </parameters>
10150      </method>
10151      <function name="equal" c:identifier="gsk_stroke_equal" version="4.14">
10152        <doc xml:space="preserve"
10153             filename="gsk/gskstroke.c"
10154             line="172">Checks if two strokes are identical.</doc>
10155        <source-position filename="gsk/gskstroke.h" line="43"/>
10156        <return-value transfer-ownership="none">
10157          <doc xml:space="preserve"
10158               filename="gsk/gskstroke.c"
10159               line="179">true if the two strokes are equal, false otherwise</doc>
10160          <type name="gboolean" c:type="gboolean"/>
10161        </return-value>
10162        <parameters>
10163          <parameter name="stroke1"
10164                     transfer-ownership="none"
10165                     nullable="1"
10166                     allow-none="1">
10167            <doc xml:space="preserve"
10168                 filename="gsk/gskstroke.c"
10169                 line="174">the first stroke</doc>
10170            <type name="gpointer" c:type="gconstpointer"/>
10171          </parameter>
10172          <parameter name="stroke2"
10173                     transfer-ownership="none"
10174                     nullable="1"
10175                     allow-none="1">
10176            <doc xml:space="preserve"
10177                 filename="gsk/gskstroke.c"
10178                 line="175">the second stroke</doc>
10179            <type name="gpointer" c:type="gconstpointer"/>
10180          </parameter>
10181        </parameters>
10182      </function>
10183    </record>
10184    <class name="StrokeNode"
10185           c:symbol-prefix="stroke_node"
10186           c:type="GskStrokeNode"
10187           version="4.14"
10188           parent="RenderNode"
10189           glib:type-name="GskStrokeNode"
10190           glib:get-type="gsk_stroke_node_get_type"
10191           glib:fundamental="1">
10192      <doc xml:space="preserve"
10193           filename="gsk/gskrendernodeimpl.c"
10194           line="6105">A render node that will fill the area determined by stroking the the given
10195[struct@Gsk.Path] using the [struct@Gsk.Stroke] attributes.</doc>
10196      <constructor name="new"
10197                   c:identifier="gsk_stroke_node_new"
10198                   version="4.14">
10199        <doc xml:space="preserve"
10200             filename="gsk/gskrendernodeimpl.c"
10201             line="6206">Creates a #GskRenderNode that will fill the outline generated by stroking
10202the given @path using the attributes defined in @stroke.
10203
10204The area is filled with @child.</doc>
10205        <source-position filename="gsk/gskrendernode.h" line="494"/>
10206        <return-value transfer-ownership="none">
10207          <doc xml:space="preserve"
10208               filename="gsk/gskrendernodeimpl.c"
10209               line="6217">A new #GskRenderNode</doc>
10210          <type name="StrokeNode" c:type="GskRenderNode*"/>
10211        </return-value>
10212        <parameters>
10213          <parameter name="child" transfer-ownership="none">
10214            <doc xml:space="preserve"
10215                 filename="gsk/gskrendernodeimpl.c"
10216                 line="6208">The node to stroke the area with</doc>
10217            <type name="RenderNode" c:type="GskRenderNode*"/>
10218          </parameter>
10219          <parameter name="path" transfer-ownership="none">
10220            <doc xml:space="preserve"
10221                 filename="gsk/gskrendernodeimpl.c"
10222                 line="6209">The path describing the area to stroke</doc>
10223            <type name="Path" c:type="GskPath*"/>
10224          </parameter>
10225          <parameter name="stroke" transfer-ownership="none">
10226            <doc xml:space="preserve"
10227                 filename="gsk/gskrendernodeimpl.c"
10228                 line="6210">The stroke attributes to use</doc>
10229            <type name="Stroke" c:type="const GskStroke*"/>
10230          </parameter>
10231        </parameters>
10232      </constructor>
10233      <method name="get_child"
10234              c:identifier="gsk_stroke_node_get_child"
10235              version="4.14">
10236        <doc xml:space="preserve"
10237             filename="gsk/gskrendernodeimpl.c"
10238             line="6251">Gets the child node that is getting drawn by the given @node.</doc>
10239        <source-position filename="gsk/gskrendernode.h" line="498"/>
10240        <return-value transfer-ownership="none">
10241          <doc xml:space="preserve"
10242               filename="gsk/gskrendernodeimpl.c"
10243               line="6257">The child that is getting drawn</doc>
10244          <type name="RenderNode" c:type="GskRenderNode*"/>
10245        </return-value>
10246        <parameters>
10247          <instance-parameter name="node" transfer-ownership="none">
10248            <doc xml:space="preserve"
10249                 filename="gsk/gskrendernodeimpl.c"
10250                 line="6253">a stroke #GskRenderNode</doc>
10251            <type name="StrokeNode" c:type="const GskRenderNode*"/>
10252          </instance-parameter>
10253        </parameters>
10254      </method>
10255      <method name="get_path"
10256              c:identifier="gsk_stroke_node_get_path"
10257              version="4.14">
10258        <doc xml:space="preserve"
10259             filename="gsk/gskrendernodeimpl.c"
10260             line="6271">Retrieves the path that will be stroked with the contents of
10261the @node.</doc>
10262        <source-position filename="gsk/gskrendernode.h" line="500"/>
10263        <return-value transfer-ownership="none">
10264          <doc xml:space="preserve"
10265               filename="gsk/gskrendernodeimpl.c"
10266               line="6278">a #GskPath</doc>
10267          <type name="Path" c:type="GskPath*"/>
10268        </return-value>
10269        <parameters>
10270          <instance-parameter name="node" transfer-ownership="none">
10271            <doc xml:space="preserve"
10272                 filename="gsk/gskrendernodeimpl.c"
10273                 line="6273">a stroke #GskRenderNode</doc>
10274            <type name="StrokeNode" c:type="const GskRenderNode*"/>
10275          </instance-parameter>
10276        </parameters>
10277      </method>
10278      <method name="get_stroke"
10279              c:identifier="gsk_stroke_node_get_stroke"
10280              version="4.14">
10281        <doc xml:space="preserve"
10282             filename="gsk/gskrendernodeimpl.c"
10283             line="6292">Retrieves the stroke attributes used in this @node.</doc>
10284        <source-position filename="gsk/gskrendernode.h" line="502"/>
10285        <return-value transfer-ownership="none">
10286          <doc xml:space="preserve"
10287               filename="gsk/gskrendernodeimpl.c"
10288               line="6298">a #GskStroke</doc>
10289          <type name="Stroke" c:type="const GskStroke*"/>
10290        </return-value>
10291        <parameters>
10292          <instance-parameter name="node" transfer-ownership="none">
10293            <doc xml:space="preserve"
10294                 filename="gsk/gskrendernodeimpl.c"
10295                 line="6294">a stroke #GskRenderNode</doc>
10296            <type name="StrokeNode" c:type="const GskRenderNode*"/>
10297          </instance-parameter>
10298        </parameters>
10299      </method>
10300    </class>
10301    <class name="SubsurfaceNode"
10302           c:symbol-prefix="subsurface_node"
10303           c:type="GskSubsurfaceNode"
10304           version="4.14"
10305           parent="RenderNode"
10306           glib:type-name="GskSubsurfaceNode"
10307           glib:get-type="gsk_subsurface_node_get_type"
10308           glib:fundamental="1">
10309      <doc xml:space="preserve"
10310           filename="gsk/gskrendernodeimpl.c"
10311           line="8426">A render node that potentially diverts a part of the scene graph to a subsurface.</doc>
10312      <constructor name="new"
10313                   c:identifier="gsk_subsurface_node_new"
10314                   version="4.14"
10315                   introspectable="0">
10316        <doc xml:space="preserve"
10317             filename="gsk/gskrendernodeimpl.c"
10318             line="8526">Creates a `GskRenderNode` that will possibly divert the child
10319node to a subsurface.
10320
10321Note: Since subsurfaces are currently private, these nodes cannot
10322currently be created outside of GTK. See
10323[GtkGraphicsOffload](../gtk4/class.GraphicsOffload.html).</doc>
10324        <source-position filename="gsk/gskrendernode.h" line="613"/>
10325        <return-value transfer-ownership="full">
10326          <doc xml:space="preserve"
10327               filename="gsk/gskrendernodeimpl.c"
10328               line="8538">A new `GskRenderNode`</doc>
10329          <type name="SubsurfaceNode" c:type="GskRenderNode*"/>
10330        </return-value>
10331        <parameters>
10332          <parameter name="child" transfer-ownership="none">
10333            <doc xml:space="preserve"
10334                 filename="gsk/gskrendernodeimpl.c"
10335                 line="8528">The child to divert to a subsurface</doc>
10336            <type name="RenderNode" c:type="GskRenderNode*"/>
10337          </parameter>
10338          <parameter name="subsurface"
10339                     transfer-ownership="none"
10340                     nullable="1"
10341                     allow-none="1">
10342            <doc xml:space="preserve"
10343                 filename="gsk/gskrendernodeimpl.c"
10344                 line="8529">the subsurface to use</doc>
10345            <type name="gpointer" c:type="gpointer"/>
10346          </parameter>
10347        </parameters>
10348      </constructor>
10349      <function name="get_subsurface"
10350                c:identifier="gsk_subsurface_node_get_subsurface"
10351                version="4.14"
10352                introspectable="0">
10353        <doc xml:space="preserve"
10354             filename="gsk/gskrendernodeimpl.c"
10355             line="8587">Gets the subsurface that was set on this node</doc>
10356        <source-position filename="gsk/gskrendernode.h" line="618"/>
10357        <return-value transfer-ownership="none" nullable="1">
10358          <doc xml:space="preserve"
10359               filename="gsk/gskrendernodeimpl.c"
10360               line="8593">the subsurface</doc>
10361          <type name="gpointer" c:type="gpointer"/>
10362        </return-value>
10363        <parameters>
10364          <parameter name="node" transfer-ownership="none">
10365            <doc xml:space="preserve"
10366                 filename="gsk/gskrendernodeimpl.c"
10367                 line="8589">a debug `GskRenderNode`</doc>
10368            <type name="DebugNode" c:type="const GskRenderNode*"/>
10369          </parameter>
10370        </parameters>
10371      </function>
10372      <method name="get_child"
10373              c:identifier="gsk_subsurface_node_get_child"
10374              version="4.14">
10375        <doc xml:space="preserve"
10376             filename="gsk/gskrendernodeimpl.c"
10377             line="8569">Gets the child node that is getting drawn by the given @node.</doc>
10378        <source-position filename="gsk/gskrendernode.h" line="616"/>
10379        <return-value transfer-ownership="none">
10380          <doc xml:space="preserve"
10381               filename="gsk/gskrendernodeimpl.c"
10382               line="8575">the child `GskRenderNode`</doc>
10383          <type name="RenderNode" c:type="GskRenderNode*"/>
10384        </return-value>
10385        <parameters>
10386          <instance-parameter name="node" transfer-ownership="none">
10387            <doc xml:space="preserve"
10388                 filename="gsk/gskrendernodeimpl.c"
10389                 line="8571">a debug `GskRenderNode`</doc>
10390            <type name="SubsurfaceNode" c:type="const GskRenderNode*"/>
10391          </instance-parameter>
10392        </parameters>
10393      </method>
10394    </class>
10395    <class name="TextNode"
10396           c:symbol-prefix="text_node"
10397           c:type="GskTextNode"
10398           parent="RenderNode"
10399           glib:type-name="GskTextNode"
10400           glib:get-type="gsk_text_node_get_type"
10401           glib:fundamental="1">
10402      <doc xml:space="preserve"
10403           filename="gsk/gskrendernodeimpl.c"
10404           line="7072">A render node drawing a set of glyphs.</doc>
10405      <constructor name="new" c:identifier="gsk_text_node_new">
10406        <doc xml:space="preserve"
10407             filename="gsk/gskrendernodeimpl.c"
10408             line="7193">Creates a render node that renders the given glyphs.
10409
10410Note that @color may not be used if the font contains
10411color glyphs.</doc>
10412        <source-position filename="gsk/gskrendernode.h" line="547"/>
10413        <return-value transfer-ownership="full" nullable="1">
10414          <doc xml:space="preserve"
10415               filename="gsk/gskrendernodeimpl.c"
10416               line="7205">a new `GskRenderNode`</doc>
10417          <type name="TextNode" c:type="GskRenderNode*"/>
10418        </return-value>
10419        <parameters>
10420          <parameter name="font" transfer-ownership="none">
10421            <doc xml:space="preserve"
10422                 filename="gsk/gskrendernodeimpl.c"
10423                 line="7195">the `PangoFont` containing the glyphs</doc>
10424            <type name="Pango.Font" c:type="PangoFont*"/>
10425          </parameter>
10426          <parameter name="glyphs" transfer-ownership="none">
10427            <doc xml:space="preserve"
10428                 filename="gsk/gskrendernodeimpl.c"
10429                 line="7196">the `PangoGlyphString` to render</doc>
10430            <type name="Pango.GlyphString" c:type="PangoGlyphString*"/>
10431          </parameter>
10432          <parameter name="color" transfer-ownership="none">
10433            <doc xml:space="preserve"
10434                 filename="gsk/gskrendernodeimpl.c"
10435                 line="7197">the foreground color to render with</doc>
10436            <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
10437          </parameter>
10438          <parameter name="offset" transfer-ownership="none">
10439            <doc xml:space="preserve"
10440                 filename="gsk/gskrendernodeimpl.c"
10441                 line="7198">offset of the baseline</doc>
10442            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
10443          </parameter>
10444        </parameters>
10445      </constructor>
10446      <method name="get_color" c:identifier="gsk_text_node_get_color">
10447        <doc xml:space="preserve"
10448             filename="gsk/gskrendernodeimpl.c"
10449             line="7297">Retrieves the color used by the text @node.
10450
10451The value returned by this function will not be correct
10452if the render node was created for a non-sRGB color.</doc>
10453        <source-position filename="gsk/gskrendernode.h" line="561"/>
10454        <return-value transfer-ownership="none">
10455          <doc xml:space="preserve"
10456               filename="gsk/gskrendernodeimpl.c"
10457               line="7306">the text color</doc>
10458          <type name="Gdk.RGBA" c:type="const GdkRGBA*"/>
10459        </return-value>
10460        <parameters>
10461          <instance-parameter name="node" transfer-ownership="none">
10462            <doc xml:space="preserve"
10463                 filename="gsk/gskrendernodeimpl.c"
10464                 line="7299">a text `GskRenderNode`</doc>
10465            <type name="TextNode" c:type="const GskRenderNode*"/>
10466          </instance-parameter>
10467        </parameters>
10468      </method>
10469      <method name="get_font" c:identifier="gsk_text_node_get_font">
10470        <doc xml:space="preserve"
10471             filename="gsk/gskrendernodeimpl.c"
10472             line="7333">Returns the font used by the text @node.</doc>
10473        <source-position filename="gsk/gskrendernode.h" line="552"/>
10474        <return-value transfer-ownership="none">
10475          <doc xml:space="preserve"
10476               filename="gsk/gskrendernodeimpl.c"
10477               line="7339">the font</doc>
10478          <type name="Pango.Font" c:type="PangoFont*"/>
10479        </return-value>
10480        <parameters>
10481          <instance-parameter name="node" transfer-ownership="none">
10482            <doc xml:space="preserve"
10483                 filename="gsk/gskrendernodeimpl.c"
10484                 line="7335">The `GskRenderNode`</doc>
10485            <type name="TextNode" c:type="const GskRenderNode*"/>
10486          </instance-parameter>
10487        </parameters>
10488      </method>
10489      <method name="get_glyphs" c:identifier="gsk_text_node_get_glyphs">
10490        <doc xml:space="preserve"
10491             filename="gsk/gskrendernodeimpl.c"
10492             line="7391">Retrieves the glyph information in the @node.</doc>
10493        <source-position filename="gsk/gskrendernode.h" line="558"/>
10494        <return-value transfer-ownership="none">
10495          <doc xml:space="preserve"
10496               filename="gsk/gskrendernodeimpl.c"
10497               line="7398">the glyph information</doc>
10498          <array length="0" zero-terminated="0" c:type="const PangoGlyphInfo*">
10499            <type name="Pango.GlyphInfo" c:type="PangoGlyphInfo"/>
10500          </array>
10501        </return-value>
10502        <parameters>
10503          <instance-parameter name="node" transfer-ownership="none">
10504            <doc xml:space="preserve"
10505                 filename="gsk/gskrendernodeimpl.c"
10506                 line="7393">a text `GskRenderNode`</doc>
10507            <type name="TextNode" c:type="const GskRenderNode*"/>
10508          </instance-parameter>
10509          <parameter name="n_glyphs"
10510                     direction="out"
10511                     caller-allocates="0"
10512                     transfer-ownership="full"
10513                     optional="1"
10514                     allow-none="1">
10515            <doc xml:space="preserve"
10516                 filename="gsk/gskrendernodeimpl.c"
10517                 line="7394">the number of glyphs returned</doc>
10518            <type name="guint" c:type="guint*"/>
10519          </parameter>
10520        </parameters>
10521      </method>
10522      <method name="get_num_glyphs"
10523              c:identifier="gsk_text_node_get_num_glyphs">
10524        <doc xml:space="preserve"
10525             filename="gsk/gskrendernodeimpl.c"
10526             line="7375">Retrieves the number of glyphs in the text node.</doc>
10527        <source-position filename="gsk/gskrendernode.h" line="556"/>
10528        <return-value transfer-ownership="none">
10529          <doc xml:space="preserve"
10530               filename="gsk/gskrendernodeimpl.c"
10531               line="7381">the number of glyphs</doc>
10532          <type name="guint" c:type="guint"/>
10533        </return-value>
10534        <parameters>
10535          <instance-parameter name="node" transfer-ownership="none">
10536            <doc xml:space="preserve"
10537                 filename="gsk/gskrendernodeimpl.c"
10538                 line="7377">a text `GskRenderNode`</doc>
10539            <type name="TextNode" c:type="const GskRenderNode*"/>
10540          </instance-parameter>
10541        </parameters>
10542      </method>
10543      <method name="get_offset" c:identifier="gsk_text_node_get_offset">
10544        <doc xml:space="preserve"
10545             filename="gsk/gskrendernodeimpl.c"
10546             line="7412">Retrieves the offset applied to the text.</doc>
10547        <source-position filename="gsk/gskrendernode.h" line="563"/>
10548        <return-value transfer-ownership="none">
10549          <doc xml:space="preserve"
10550               filename="gsk/gskrendernodeimpl.c"
10551               line="7418">a point with the horizontal and vertical offsets</doc>
10552          <type name="Graphene.Point" c:type="const graphene_point_t*"/>
10553        </return-value>
10554        <parameters>
10555          <instance-parameter name="node" transfer-ownership="none">
10556            <doc xml:space="preserve"
10557                 filename="gsk/gskrendernodeimpl.c"
10558                 line="7414">a text `GskRenderNode`</doc>
10559            <type name="TextNode" c:type="const GskRenderNode*"/>
10560          </instance-parameter>
10561        </parameters>
10562      </method>
10563      <method name="has_color_glyphs"
10564              c:identifier="gsk_text_node_has_color_glyphs"
10565              version="4.2">
10566        <doc xml:space="preserve"
10567             filename="gsk/gskrendernodeimpl.c"
10568             line="7357">Checks whether the text @node has color glyphs.</doc>
10569        <source-position filename="gsk/gskrendernode.h" line="554"/>
10570        <return-value transfer-ownership="none">
10571          <doc xml:space="preserve"
10572               filename="gsk/gskrendernodeimpl.c"
10573               line="7363">%TRUE if the text node has color glyphs</doc>
10574          <type name="gboolean" c:type="gboolean"/>
10575        </return-value>
10576        <parameters>
10577          <instance-parameter name="node" transfer-ownership="none">
10578            <doc xml:space="preserve"
10579                 filename="gsk/gskrendernodeimpl.c"
10580                 line="7359">a text `GskRenderNode`</doc>
10581            <type name="TextNode" c:type="const GskRenderNode*"/>
10582          </instance-parameter>
10583        </parameters>
10584      </method>
10585    </class>
10586    <class name="TextureNode"
10587           c:symbol-prefix="texture_node"
10588           c:type="GskTextureNode"
10589           parent="RenderNode"
10590           glib:type-name="GskTextureNode"
10591           glib:get-type="gsk_texture_node_get_type"
10592           glib:fundamental="1">
10593      <doc xml:space="preserve"
10594           filename="gsk/gskrendernodeimpl.c"
10595           line="2597">A render node for a `GdkTexture`.</doc>
10596      <constructor name="new" c:identifier="gsk_texture_node_new">
10597        <doc xml:space="preserve"
10598             filename="gsk/gskrendernodeimpl.c"
10599             line="2786">Creates a `GskRenderNode` that will render the given
10600@texture into the area given by @bounds.
10601
10602Note that GSK applies linear filtering when textures are
10603scaled and transformed. See [class@Gsk.TextureScaleNode]
10604for a way to influence filtering.</doc>
10605        <source-position filename="gsk/gskrendernode.h" line="234"/>
10606        <return-value transfer-ownership="full">
10607          <doc xml:space="preserve"
10608               filename="gsk/gskrendernodeimpl.c"
10609               line="2798">A new `GskRenderNode`</doc>
10610          <type name="TextureNode" c:type="GskRenderNode*"/>
10611        </return-value>
10612        <parameters>
10613          <parameter name="texture" transfer-ownership="none">
10614            <doc xml:space="preserve"
10615                 filename="gsk/gskrendernodeimpl.c"
10616                 line="2788">the `GdkTexture`</doc>
10617            <type name="Gdk.Texture" c:type="GdkTexture*"/>
10618          </parameter>
10619          <parameter name="bounds" transfer-ownership="none">
10620            <doc xml:space="preserve"
10621                 filename="gsk/gskrendernodeimpl.c"
10622                 line="2789">the rectangle to render the texture into</doc>
10623            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
10624          </parameter>
10625        </parameters>
10626      </constructor>
10627      <method name="get_texture" c:identifier="gsk_texture_node_get_texture">
10628        <doc xml:space="preserve"
10629             filename="gsk/gskrendernodeimpl.c"
10630             line="2770">Retrieves the `GdkTexture` used when creating this `GskRenderNode`.</doc>
10631        <source-position filename="gsk/gskrendernode.h" line="237"/>
10632        <return-value transfer-ownership="none">
10633          <doc xml:space="preserve"
10634               filename="gsk/gskrendernodeimpl.c"
10635               line="2776">the `GdkTexture`</doc>
10636          <type name="Gdk.Texture" c:type="GdkTexture*"/>
10637        </return-value>
10638        <parameters>
10639          <instance-parameter name="node" transfer-ownership="none">
10640            <doc xml:space="preserve"
10641                 filename="gsk/gskrendernodeimpl.c"
10642                 line="2772">a `GskRenderNode` of type %GSK_TEXTURE_NODE</doc>
10643            <type name="TextureNode" c:type="const GskRenderNode*"/>
10644          </instance-parameter>
10645        </parameters>
10646      </method>
10647    </class>
10648    <class name="TextureScaleNode"
10649           c:symbol-prefix="texture_scale_node"
10650           c:type="GskTextureScaleNode"
10651           version="4.10"
10652           parent="RenderNode"
10653           glib:type-name="GskTextureScaleNode"
10654           glib:get-type="gsk_texture_scale_node_get_type"
10655           glib:fundamental="1">
10656      <doc xml:space="preserve"
10657           filename="gsk/gskrendernodeimpl.c"
10658           line="2827">A render node for a `GdkTexture`, with control over scaling.</doc>
10659      <constructor name="new"
10660                   c:identifier="gsk_texture_scale_node_new"
10661                   version="4.10">
10662        <doc xml:space="preserve"
10663             filename="gsk/gskrendernodeimpl.c"
10664             line="2996">Creates a node that scales the texture to the size given by the
10665bounds using the filter and then places it at the bounds' position.
10666
10667Note that further scaling and other transformations which are
10668applied to the node will apply linear filtering to the resulting
10669texture, as usual.
10670
10671This node is intended for tight control over scaling applied
10672to a texture, such as in image editors and requires the
10673application to be aware of the whole render tree as further
10674transforms may be applied that conflict with the desired effect
10675of this node.</doc>
10676        <source-position filename="gsk/gskrendernode.h" line="242"/>
10677        <return-value transfer-ownership="full">
10678          <doc xml:space="preserve"
10679               filename="gsk/gskrendernodeimpl.c"
10680               line="3015">A new `GskRenderNode`</doc>
10681          <type name="TextureScaleNode" c:type="GskRenderNode*"/>
10682        </return-value>
10683        <parameters>
10684          <parameter name="texture" transfer-ownership="none">
10685            <doc xml:space="preserve"
10686                 filename="gsk/gskrendernodeimpl.c"
10687                 line="2998">the texture to scale</doc>
10688            <type name="Gdk.Texture" c:type="GdkTexture*"/>
10689          </parameter>
10690          <parameter name="bounds" transfer-ownership="none">
10691            <doc xml:space="preserve"
10692                 filename="gsk/gskrendernodeimpl.c"
10693                 line="2999">the size of the texture to scale to</doc>
10694            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
10695          </parameter>
10696          <parameter name="filter" transfer-ownership="none">
10697            <doc xml:space="preserve"
10698                 filename="gsk/gskrendernodeimpl.c"
10699                 line="3000">how to scale the texture</doc>
10700            <type name="ScalingFilter" c:type="GskScalingFilter"/>
10701          </parameter>
10702        </parameters>
10703      </constructor>
10704      <method name="get_filter"
10705              c:identifier="gsk_texture_scale_node_get_filter"
10706              version="4.10">
10707        <doc xml:space="preserve"
10708             filename="gsk/gskrendernodeimpl.c"
10709             line="2978">Retrieves the `GskScalingFilter` used when creating this `GskRenderNode`.</doc>
10710        <source-position filename="gsk/gskrendernode.h" line="248"/>
10711        <return-value transfer-ownership="none">
10712          <doc xml:space="preserve"
10713               filename="gsk/gskrendernodeimpl.c"
10714               line="2984">the `GskScalingFilter`</doc>
10715          <type name="ScalingFilter" c:type="GskScalingFilter"/>
10716        </return-value>
10717        <parameters>
10718          <instance-parameter name="node" transfer-ownership="none">
10719            <doc xml:space="preserve"
10720                 filename="gsk/gskrendernodeimpl.c"
10721                 line="2980">a `GskRenderNode` of type %GSK_TEXTURE_SCALE_NODE</doc>
10722            <type name="TextureScaleNode" c:type="const GskRenderNode*"/>
10723          </instance-parameter>
10724        </parameters>
10725      </method>
10726      <method name="get_texture"
10727              c:identifier="gsk_texture_scale_node_get_texture"
10728              version="4.10">
10729        <doc xml:space="preserve"
10730             filename="gsk/gskrendernodeimpl.c"
10731             line="2960">Retrieves the `GdkTexture` used when creating this `GskRenderNode`.</doc>
10732        <source-position filename="gsk/gskrendernode.h" line="246"/>
10733        <return-value transfer-ownership="none">
10734          <doc xml:space="preserve"
10735               filename="gsk/gskrendernodeimpl.c"
10736               line="2966">the `GdkTexture`</doc>
10737          <type name="Gdk.Texture" c:type="GdkTexture*"/>
10738        </return-value>
10739        <parameters>
10740          <instance-parameter name="node" transfer-ownership="none">
10741            <doc xml:space="preserve"
10742                 filename="gsk/gskrendernodeimpl.c"
10743                 line="2962">a `GskRenderNode` of type %GSK_TEXTURE_SCALE_NODE</doc>
10744            <type name="TextureScaleNode" c:type="const GskRenderNode*"/>
10745          </instance-parameter>
10746        </parameters>
10747      </method>
10748    </class>
10749    <record name="Transform"
10750            c:type="GskTransform"
10751            opaque="1"
10752            glib:type-name="GskTransform"
10753            glib:get-type="gsk_transform_get_type"
10754            c:symbol-prefix="transform">
10755      <doc xml:space="preserve"
10756           filename="gsk/gsktransform.c"
10757           line="21">Describes a 3D transform.
10758
10759Unlike `graphene_matrix_t`, `GskTransform` retains the steps in how
10760a transform was constructed, and allows inspecting them. It is modeled
10761after the way CSS describes transforms.
10762
10763`GskTransform` objects are immutable and cannot be changed after creation.
10764This means code can safely expose them as properties of objects without
10765having to worry about others changing them.</doc>
10766      <source-position filename="gsk/gsktypes.h" line="36"/>
10767      <constructor name="new" c:identifier="gsk_transform_new">
10768        <doc xml:space="preserve"
10769             filename="gsk/gsktransform.c"
10770             line="2390">Creates a new identity transform.
10771
10772This function is meant to be used by language
10773bindings. For C code, this is equivalent to using `NULL`.</doc>
10774        <source-position filename="gsk/gsktransform.h" line="88"/>
10775        <return-value transfer-ownership="full">
10776          <doc xml:space="preserve"
10777               filename="gsk/gsktransform.c"
10778               line="2398">A new identity transform</doc>
10779          <type name="Transform" c:type="GskTransform*"/>
10780        </return-value>
10781      </constructor>
10782      <method name="equal" c:identifier="gsk_transform_equal">
10783        <doc xml:space="preserve"
10784             filename="gsk/gsktransform.c"
10785             line="2315">Checks two transforms for equality.</doc>
10786        <source-position filename="gsk/gsktransform.h" line="84"/>
10787        <return-value transfer-ownership="none">
10788          <doc xml:space="preserve"
10789               filename="gsk/gsktransform.c"
10790               line="2322">true if the two transforms perform the same operation</doc>
10791          <type name="gboolean" c:type="gboolean"/>
10792        </return-value>
10793        <parameters>
10794          <instance-parameter name="first"
10795                              transfer-ownership="none"
10796                              nullable="1"
10797                              allow-none="1">
10798            <doc xml:space="preserve"
10799                 filename="gsk/gsktransform.c"
10800                 line="2317">the first transform</doc>
10801            <type name="Transform" c:type="GskTransform*"/>
10802          </instance-parameter>
10803          <parameter name="second"
10804                     transfer-ownership="none"
10805                     nullable="1"
10806                     allow-none="1">
10807            <doc xml:space="preserve"
10808                 filename="gsk/gsktransform.c"
10809                 line="2318">the second transform</doc>
10810            <type name="Transform" c:type="GskTransform*"/>
10811          </parameter>
10812        </parameters>
10813      </method>
10814      <method name="get_category" c:identifier="gsk_transform_get_category">
10815        <doc xml:space="preserve"
10816             filename="gsk/gsktransform.c"
10817             line="2346">Returns the category this transform belongs to.</doc>
10818        <source-position filename="gsk/gsktransform.h" line="82"/>
10819        <return-value transfer-ownership="none">
10820          <doc xml:space="preserve"
10821               filename="gsk/gsktransform.c"
10822               line="2352">The category of the transform</doc>
10823          <type name="TransformCategory" c:type="GskTransformCategory"/>
10824        </return-value>
10825        <parameters>
10826          <instance-parameter name="self"
10827                              transfer-ownership="none"
10828                              nullable="1"
10829                              allow-none="1">
10830            <doc xml:space="preserve"
10831                 filename="gsk/gsktransform.c"
10832                 line="2348">a transform</doc>
10833            <type name="Transform" c:type="GskTransform*"/>
10834          </instance-parameter>
10835        </parameters>
10836      </method>
10837      <method name="invert" c:identifier="gsk_transform_invert">
10838        <doc xml:space="preserve"
10839             filename="gsk/gsktransform.c"
10840             line="2280">Inverts the given transform.
10841
10842If @self is not invertible, `NULL` is returned.
10843Note that inverting `NULL` also returns `NULL`, which is
10844the correct inverse of `NULL`. If you need to differentiate
10845between those cases, you should check @self is not `NULL`
10846before calling this function.
10847
10848This function consumes @self. Use [method@Gsk.Transform.ref] first
10849if you want to keep it around.</doc>
10850        <source-position filename="gsk/gsktransform.h" line="93"/>
10851        <return-value transfer-ownership="full" nullable="1">
10852          <doc xml:space="preserve"
10853               filename="gsk/gsktransform.c"
10854               line="2295">The inverted transform</doc>
10855          <type name="Transform" c:type="GskTransform*"/>
10856        </return-value>
10857        <parameters>
10858          <instance-parameter name="self"
10859                              transfer-ownership="full"
10860                              nullable="1"
10861                              allow-none="1">
10862            <doc xml:space="preserve"
10863                 filename="gsk/gsktransform.c"
10864                 line="2282">transform to invert</doc>
10865            <type name="Transform" c:type="GskTransform*"/>
10866          </instance-parameter>
10867        </parameters>
10868      </method>
10869      <method name="matrix" c:identifier="gsk_transform_matrix">
10870        <doc xml:space="preserve"
10871             filename="gsk/gsktransform.c"
10872             line="550">Multiplies @next with the given @matrix.
10873
10874This function consumes @next. Use [method@Gsk.Transform.ref] first
10875if you want to keep it around.</doc>
10876        <source-position filename="gsk/gsktransform.h" line="95"/>
10877        <return-value transfer-ownership="full">
10878          <doc xml:space="preserve"
10879               filename="gsk/gsktransform.c"
10880               line="560">The new transform</doc>
10881          <type name="Transform" c:type="GskTransform*"/>
10882        </return-value>
10883        <parameters>
10884          <instance-parameter name="next"
10885                              transfer-ownership="full"
10886                              nullable="1"
10887                              allow-none="1">
10888            <doc xml:space="preserve"
10889                 filename="gsk/gsktransform.c"
10890                 line="552">the next transform</doc>
10891            <type name="Transform" c:type="GskTransform*"/>
10892          </instance-parameter>
10893          <parameter name="matrix" transfer-ownership="none">
10894            <doc xml:space="preserve"
10895                 filename="gsk/gsktransform.c"
10896                 line="553">the matrix to multiply @next with</doc>
10897            <type name="Graphene.Matrix" c:type="const graphene_matrix_t*"/>
10898          </parameter>
10899        </parameters>
10900      </method>
10901      <method name="matrix_2d"
10902              c:identifier="gsk_transform_matrix_2d"
10903              version="4.20">
10904        <doc xml:space="preserve"
10905             filename="gsk/gsktransform.c"
10906             line="569">Multiplies @next with the matrix [ xx yx x0; xy yy y0; 0 0 1 ].
10907
10908The result of calling [method@Gsk.Transform.to_2d] on the returned
10909[struct@Gsk.Transform] should match the input passed to this
10910function.
10911
10912This function consumes @next. Use [method@Gsk.Transform.ref] first
10913if you want to keep it around.</doc>
10914        <source-position filename="gsk/gsktransform.h" line="98"/>
10915        <return-value transfer-ownership="full" nullable="1">
10916          <doc xml:space="preserve"
10917               filename="gsk/gsktransform.c"
10918               line="588">The new transform</doc>
10919          <type name="Transform" c:type="GskTransform*"/>
10920        </return-value>
10921        <parameters>
10922          <instance-parameter name="next"
10923                              transfer-ownership="full"
10924                              nullable="1"
10925                              allow-none="1">
10926            <doc xml:space="preserve"
10927                 filename="gsk/gsktransform.c"
10928                 line="571">the next transform</doc>
10929            <type name="Transform" c:type="GskTransform*"/>
10930          </instance-parameter>
10931          <parameter name="xx" transfer-ownership="none">
10932            <doc xml:space="preserve"
10933                 filename="gsk/gsktransform.c"
10934                 line="572">the xx member</doc>
10935            <type name="gfloat" c:type="float"/>
10936          </parameter>
10937          <parameter name="yx" transfer-ownership="none">
10938            <doc xml:space="preserve"
10939                 filename="gsk/gsktransform.c"
10940                 line="573">the yx member</doc>
10941            <type name="gfloat" c:type="float"/>
10942          </parameter>
10943          <parameter name="xy" transfer-ownership="none">
10944            <doc xml:space="preserve"
10945                 filename="gsk/gsktransform.c"
10946                 line="574">the xy member</doc>
10947            <type name="gfloat" c:type="float"/>
10948          </parameter>
10949          <parameter name="yy" transfer-ownership="none">
10950            <doc xml:space="preserve"
10951                 filename="gsk/gsktransform.c"
10952                 line="575">the yy member</doc>
10953            <type name="gfloat" c:type="float"/>
10954          </parameter>
10955          <parameter name="dx" transfer-ownership="none">
10956            <doc xml:space="preserve"
10957                 filename="gsk/gsktransform.c"
10958                 line="576">the x0 member</doc>
10959            <type name="gfloat" c:type="float"/>
10960          </parameter>
10961          <parameter name="dy" transfer-ownership="none">
10962            <doc xml:space="preserve"
10963                 filename="gsk/gsktransform.c"
10964                 line="577">the y0 member</doc>
10965            <type name="gfloat" c:type="float"/>
10966          </parameter>
10967        </parameters>
10968      </method>
10969      <method name="perspective" c:identifier="gsk_transform_perspective">
10970        <doc xml:space="preserve"
10971             filename="gsk/gsktransform.c"
10972             line="1729">Applies a perspective projection transform.
10973
10974This transform scales points in X and Y based on their Z value,
10975scaling points with positive Z values away from the origin, and
10976those with negative Z values towards the origin. Points
10977on the z=0 plane are unchanged.
10978
10979This function consumes @next. Use [method@Gsk.Transform.ref] first
10980if you want to keep it around.</doc>
10981        <source-position filename="gsk/gsktransform.h" line="133"/>
10982        <return-value transfer-ownership="full">
10983          <doc xml:space="preserve"
10984               filename="gsk/gsktransform.c"
10985               line="1746">The new transform</doc>
10986          <type name="Transform" c:type="GskTransform*"/>
10987        </return-value>
10988        <parameters>
10989          <instance-parameter name="next"
10990                              transfer-ownership="full"
10991                              nullable="1"
10992                              allow-none="1">
10993            <doc xml:space="preserve"
10994                 filename="gsk/gsktransform.c"
10995                 line="1731">the next transform</doc>
10996            <type name="Transform" c:type="GskTransform*"/>
10997          </instance-parameter>
10998          <parameter name="depth" transfer-ownership="none">
10999            <doc xml:space="preserve"
11000                 filename="gsk/gsktransform.c"
11001                 line="1732">distance of the z=0 plane. Lower values give a more
11002  flattened pyramid and therefore a more pronounced
11003  perspective effect.</doc>
11004            <type name="gfloat" c:type="float"/>
11005          </parameter>
11006        </parameters>
11007      </method>
11008      <method name="print" c:identifier="gsk_transform_print">
11009        <doc xml:space="preserve"
11010             filename="gsk/gsktransform.c"
11011             line="1809">Converts the transform into a human-readable representation.
11012
11013The result of this function can later be parsed with
11014[func@Gsk.Transform.parse].</doc>
11015        <source-position filename="gsk/gsktransform.h" line="43"/>
11016        <return-value transfer-ownership="none">
11017          <type name="none" c:type="void"/>
11018        </return-value>
11019        <parameters>
11020          <instance-parameter name="self"
11021                              transfer-ownership="none"
11022                              nullable="1"
11023                              allow-none="1">
11024            <doc xml:space="preserve"
11025                 filename="gsk/gsktransform.c"
11026                 line="1811">a transform</doc>
11027            <type name="Transform" c:type="GskTransform*"/>
11028          </instance-parameter>
11029          <parameter name="string" transfer-ownership="none">
11030            <doc xml:space="preserve"
11031                 filename="gsk/gsktransform.c"
11032                 line="1812">The string to print into</doc>
11033            <type name="GLib.String" c:type="GString*"/>
11034          </parameter>
11035        </parameters>
11036      </method>
11037      <method name="ref" c:identifier="gsk_transform_ref">
11038        <doc xml:space="preserve"
11039             filename="gsk/gsktransform.c"
11040             line="1774">Acquires a reference on the given transform.</doc>
11041        <source-position filename="gsk/gsktransform.h" line="38"/>
11042        <return-value transfer-ownership="none" nullable="1">
11043          <doc xml:space="preserve"
11044               filename="gsk/gsktransform.c"
11045               line="1780">the transform with an additional reference</doc>
11046          <type name="Transform" c:type="GskTransform*"/>
11047        </return-value>
11048        <parameters>
11049          <instance-parameter name="self"
11050                              transfer-ownership="none"
11051                              nullable="1"
11052                              allow-none="1">
11053            <doc xml:space="preserve"
11054                 filename="gsk/gsktransform.c"
11055                 line="1776">a transform</doc>
11056            <type name="Transform" c:type="GskTransform*"/>
11057          </instance-parameter>
11058        </parameters>
11059      </method>
11060      <method name="rotate" c:identifier="gsk_transform_rotate">
11061        <doc xml:space="preserve"
11062             filename="gsk/gsktransform.c"
11063             line="1030">Rotates @next by an angle around the Z axis.
11064
11065The rotation happens around the origin point of (0, 0).
11066
11067This function consumes @next. Use [method@Gsk.Transform.ref] first
11068if you want to keep it around.</doc>
11069        <source-position filename="gsk/gsktransform.h" line="117"/>
11070        <return-value transfer-ownership="full" nullable="1">
11071          <doc xml:space="preserve"
11072               filename="gsk/gsktransform.c"
11073               line="1042">The new transform</doc>
11074          <type name="Transform" c:type="GskTransform*"/>
11075        </return-value>
11076        <parameters>
11077          <instance-parameter name="next"
11078                              transfer-ownership="full"
11079                              nullable="1"
11080                              allow-none="1">
11081            <doc xml:space="preserve"
11082                 filename="gsk/gsktransform.c"
11083                 line="1032">the next transform</doc>
11084            <type name="Transform" c:type="GskTransform*"/>
11085          </instance-parameter>
11086          <parameter name="angle" transfer-ownership="none">
11087            <doc xml:space="preserve"
11088                 filename="gsk/gsktransform.c"
11089                 line="1033">the rotation angle, in degrees (clockwise)</doc>
11090            <type name="gfloat" c:type="float"/>
11091          </parameter>
11092        </parameters>
11093      </method>
11094      <method name="rotate_3d" c:identifier="gsk_transform_rotate_3d">
11095        <doc xml:space="preserve"
11096             filename="gsk/gsktransform.c"
11097             line="1163">Rotates @next @angle degrees around @axis.
11098
11099For a rotation in 2D space, use [method@Gsk.Transform.rotate]
11100
11101This function consumes @next. Use [method@Gsk.Transform.ref] first
11102if you want to keep it around.</doc>
11103        <source-position filename="gsk/gsktransform.h" line="120"/>
11104        <return-value transfer-ownership="full" nullable="1">
11105          <doc xml:space="preserve"
11106               filename="gsk/gsktransform.c"
11107               line="1176">The new transform</doc>
11108          <type name="Transform" c:type="GskTransform*"/>
11109        </return-value>
11110        <parameters>
11111          <instance-parameter name="next"
11112                              transfer-ownership="full"
11113                              nullable="1"
11114                              allow-none="1">
11115            <doc xml:space="preserve"
11116                 filename="gsk/gsktransform.c"
11117                 line="1165">the next transform</doc>
11118            <type name="Transform" c:type="GskTransform*"/>
11119          </instance-parameter>
11120          <parameter name="angle" transfer-ownership="none">
11121            <doc xml:space="preserve"
11122                 filename="gsk/gsktransform.c"
11123                 line="1166">the rotation angle, in degrees (clockwise)</doc>
11124            <type name="gfloat" c:type="float"/>
11125          </parameter>
11126          <parameter name="axis" transfer-ownership="none">
11127            <doc xml:space="preserve"
11128                 filename="gsk/gsktransform.c"
11129                 line="1167">The rotation axis</doc>
11130            <type name="Graphene.Vec3" c:type="const graphene_vec3_t*"/>
11131          </parameter>
11132        </parameters>
11133      </method>
11134      <method name="scale" c:identifier="gsk_transform_scale">
11135        <doc xml:space="preserve"
11136             filename="gsk/gsktransform.c"
11137             line="1565">Scales @next in 2-dimensional space by the given factors.
11138
11139Use [method@Gsk.Transform.scale_3d] to scale in all 3 dimensions.
11140
11141This function consumes @next. Use [method@Gsk.Transform.ref] first
11142if you want to keep it around.</doc>
11143        <source-position filename="gsk/gsktransform.h" line="124"/>
11144        <return-value transfer-ownership="full" nullable="1">
11145          <doc xml:space="preserve"
11146               filename="gsk/gsktransform.c"
11147               line="1578">The new transform</doc>
11148          <type name="Transform" c:type="GskTransform*"/>
11149        </return-value>
11150        <parameters>
11151          <instance-parameter name="next"
11152                              transfer-ownership="full"
11153                              nullable="1"
11154                              allow-none="1">
11155            <doc xml:space="preserve"
11156                 filename="gsk/gsktransform.c"
11157                 line="1567">the next transform</doc>
11158            <type name="Transform" c:type="GskTransform*"/>
11159          </instance-parameter>
11160          <parameter name="factor_x" transfer-ownership="none">
11161            <doc xml:space="preserve"
11162                 filename="gsk/gsktransform.c"
11163                 line="1568">scaling factor on the X axis</doc>
11164            <type name="gfloat" c:type="float"/>
11165          </parameter>
11166          <parameter name="factor_y" transfer-ownership="none">
11167            <doc xml:space="preserve"
11168                 filename="gsk/gsktransform.c"
11169                 line="1569">scaling factor on the Y axis</doc>
11170            <type name="gfloat" c:type="float"/>
11171          </parameter>
11172        </parameters>
11173      </method>
11174      <method name="scale_3d" c:identifier="gsk_transform_scale_3d">
11175        <doc xml:space="preserve"
11176             filename="gsk/gsktransform.c"
11177             line="1588">Scales @next by the given factors.
11178
11179This function consumes @next. Use [method@Gsk.Transform.ref] first
11180if you want to keep it around.</doc>
11181        <source-position filename="gsk/gsktransform.h" line="128"/>
11182        <return-value transfer-ownership="full" nullable="1">
11183          <doc xml:space="preserve"
11184               filename="gsk/gsktransform.c"
11185               line="1600">The new transform</doc>
11186          <type name="Transform" c:type="GskTransform*"/>
11187        </return-value>
11188        <parameters>
11189          <instance-parameter name="next"
11190                              transfer-ownership="full"
11191                              nullable="1"
11192                              allow-none="1">
11193            <doc xml:space="preserve"
11194                 filename="gsk/gsktransform.c"
11195                 line="1590">the next transform</doc>
11196            <type name="Transform" c:type="GskTransform*"/>
11197          </instance-parameter>
11198          <parameter name="factor_x" transfer-ownership="none">
11199            <doc xml:space="preserve"
11200                 filename="gsk/gsktransform.c"
11201                 line="1591">scaling factor on the X axis</doc>
11202            <type name="gfloat" c:type="float"/>
11203          </parameter>
11204          <parameter name="factor_y" transfer-ownership="none">
11205            <doc xml:space="preserve"
11206                 filename="gsk/gsktransform.c"
11207                 line="1592">scaling factor on the Y axis</doc>
11208            <type name="gfloat" c:type="float"/>
11209          </parameter>
11210          <parameter name="factor_z" transfer-ownership="none">
11211            <doc xml:space="preserve"
11212                 filename="gsk/gsktransform.c"
11213                 line="1593">scaling factor on the Z axis</doc>
11214            <type name="gfloat" c:type="float"/>
11215          </parameter>
11216        </parameters>
11217      </method>
11218      <method name="skew" c:identifier="gsk_transform_skew" version="4.6">
11219        <doc xml:space="preserve"
11220             filename="gsk/gsktransform.c"
11221             line="1346">Applies a skew transform.
11222
11223This function consumes @next. Use [method@Gsk.Transform.ref] first
11224if you want to keep it around.</doc>
11225        <source-position filename="gsk/gsktransform.h" line="113"/>
11226        <return-value transfer-ownership="full" nullable="1">
11227          <doc xml:space="preserve"
11228               filename="gsk/gsktransform.c"
11229               line="1357">The new transform</doc>
11230          <type name="Transform" c:type="GskTransform*"/>
11231        </return-value>
11232        <parameters>
11233          <instance-parameter name="next"
11234                              transfer-ownership="full"
11235                              nullable="1"
11236                              allow-none="1">
11237            <doc xml:space="preserve"
11238                 filename="gsk/gsktransform.c"
11239                 line="1348">the next transform</doc>
11240            <type name="Transform" c:type="GskTransform*"/>
11241          </instance-parameter>
11242          <parameter name="skew_x" transfer-ownership="none">
11243            <doc xml:space="preserve"
11244                 filename="gsk/gsktransform.c"
11245                 line="1349">skew factor, in degrees, on the X axis</doc>
11246            <type name="gfloat" c:type="float"/>
11247          </parameter>
11248          <parameter name="skew_y" transfer-ownership="none">
11249            <doc xml:space="preserve"
11250                 filename="gsk/gsktransform.c"
11251                 line="1350">skew factor, in degrees, on the Y axis</doc>
11252            <type name="gfloat" c:type="float"/>
11253          </parameter>
11254        </parameters>
11255      </method>
11256      <method name="to_2d" c:identifier="gsk_transform_to_2d">
11257        <doc xml:space="preserve"
11258             filename="gsk/gsktransform.c"
11259             line="1890">Converts a transform to a 2D transformation matrix.
11260
11261@self must be a 2D transformation. If you are not
11262sure, use
11263
11264    gsk_transform_get_category() &gt;= GSK_TRANSFORM_CATEGORY_2D
11265
11266to check.
11267
11268The returned values are a subset of the full 4x4 matrix that
11269is computed by [method@Gsk.Transform.to_matrix] and have the
11270following layout:
11271
11272```
11273  | xx yx |   |  a  b  0 |
11274  | xy yy | = |  c  d  0 |
11275  | dx dy |   | tx ty  1 |
11276```
11277
11278This function can be used to convert between a `GskTransform`
11279and a matrix type from other 2D drawing libraries, in particular
11280Cairo.</doc>
11281        <source-position filename="gsk/gsktransform.h" line="54"/>
11282        <return-value transfer-ownership="none">
11283          <type name="none" c:type="void"/>
11284        </return-value>
11285        <parameters>
11286          <instance-parameter name="self" transfer-ownership="none">
11287            <doc xml:space="preserve"
11288                 filename="gsk/gsktransform.c"
11289                 line="1892">a 2D transform</doc>
11290            <type name="Transform" c:type="GskTransform*"/>
11291          </instance-parameter>
11292          <parameter name="out_xx"
11293                     direction="out"
11294                     caller-allocates="0"
11295                     transfer-ownership="full">
11296            <doc xml:space="preserve"
11297                 filename="gsk/gsktransform.c"
11298                 line="1893">return location for the xx member</doc>
11299            <type name="gfloat" c:type="float*"/>
11300          </parameter>
11301          <parameter name="out_yx"
11302                     direction="out"
11303                     caller-allocates="0"
11304                     transfer-ownership="full">
11305            <doc xml:space="preserve"
11306                 filename="gsk/gsktransform.c"
11307                 line="1894">return location for the yx member</doc>
11308            <type name="gfloat" c:type="float*"/>
11309          </parameter>
11310          <parameter name="out_xy"
11311                     direction="out"
11312                     caller-allocates="0"
11313                     transfer-ownership="full">
11314            <doc xml:space="preserve"
11315                 filename="gsk/gsktransform.c"
11316                 line="1895">return location for the xy member</doc>
11317            <type name="gfloat" c:type="float*"/>
11318          </parameter>
11319          <parameter name="out_yy"
11320                     direction="out"
11321                     caller-allocates="0"
11322                     transfer-ownership="full">
11323            <doc xml:space="preserve"
11324                 filename="gsk/gsktransform.c"
11325                 line="1896">return location for the yy member</doc>
11326            <type name="gfloat" c:type="float*"/>
11327          </parameter>
11328          <parameter name="out_dx"
11329                     direction="out"
11330                     caller-allocates="0"
11331                     transfer-ownership="full">
11332            <doc xml:space="preserve"
11333                 filename="gsk/gsktransform.c"
11334                 line="1897">return location for the x0 member</doc>
11335            <type name="gfloat" c:type="float*"/>
11336          </parameter>
11337          <parameter name="out_dy"
11338                     direction="out"
11339                     caller-allocates="0"
11340                     transfer-ownership="full">
11341            <doc xml:space="preserve"
11342                 filename="gsk/gsktransform.c"
11343                 line="1898">return location for the y0 member</doc>
11344            <type name="gfloat" c:type="float*"/>
11345          </parameter>
11346        </parameters>
11347      </method>
11348      <method name="to_2d_components"
11349              c:identifier="gsk_transform_to_2d_components"
11350              version="4.6">
11351        <doc xml:space="preserve"
11352             filename="gsk/gsktransform.c"
11353             line="1961">Converts a transform to 2D transformation factors.
11354
11355To recreate an equivalent transform from the factors returned
11356by this function, use
11357
11358    gsk_transform_skew (
11359        gsk_transform_scale (
11360            gsk_transform_rotate (
11361                gsk_transform_translate (NULL, &amp;GRAPHENE_POINT_T (dx, dy)),
11362                angle),
11363            scale_x, scale_y),
11364        skew_x, skew_y)
11365
11366@self must be a 2D transformation. If you are not sure, use
11367
11368    gsk_transform_get_category() &gt;= GSK_TRANSFORM_CATEGORY_2D
11369
11370to check.</doc>
11371        <source-position filename="gsk/gsktransform.h" line="62"/>
11372        <return-value transfer-ownership="none">
11373          <type name="none" c:type="void"/>
11374        </return-value>
11375        <parameters>
11376          <instance-parameter name="self" transfer-ownership="none">
11377            <doc xml:space="preserve"
11378                 filename="gsk/gsktransform.c"
11379                 line="1963">a transform</doc>
11380            <type name="Transform" c:type="GskTransform*"/>
11381          </instance-parameter>
11382          <parameter name="out_skew_x"
11383                     direction="out"
11384                     caller-allocates="0"
11385                     transfer-ownership="full">
11386            <doc xml:space="preserve"
11387                 filename="gsk/gsktransform.c"
11388                 line="1964">return location for the skew factor
11389  in the  x direction</doc>
11390            <type name="gfloat" c:type="float*"/>
11391          </parameter>
11392          <parameter name="out_skew_y"
11393                     direction="out"
11394                     caller-allocates="0"
11395                     transfer-ownership="full">
11396            <doc xml:space="preserve"
11397                 filename="gsk/gsktransform.c"
11398                 line="1966">return location for the skew factor
11399  in the  y direction</doc>
11400            <type name="gfloat" c:type="float*"/>
11401          </parameter>
11402          <parameter name="out_scale_x"
11403                     direction="out"
11404                     caller-allocates="0"
11405                     transfer-ownership="full">
11406            <doc xml:space="preserve"
11407                 filename="gsk/gsktransform.c"
11408                 line="1968">return location for the scale
11409  factor in the x direction</doc>
11410            <type name="gfloat" c:type="float*"/>
11411          </parameter>
11412          <parameter name="out_scale_y"
11413                     direction="out"
11414                     caller-allocates="0"
11415                     transfer-ownership="full">
11416            <doc xml:space="preserve"
11417                 filename="gsk/gsktransform.c"
11418                 line="1970">return location for the scale
11419  factor in the y direction</doc>
11420            <type name="gfloat" c:type="float*"/>
11421          </parameter>
11422          <parameter name="out_angle"
11423                     direction="out"
11424                     caller-allocates="0"
11425                     transfer-ownership="full">
11426            <doc xml:space="preserve"
11427                 filename="gsk/gsktransform.c"
11428                 line="1972">return location for the rotation angle</doc>
11429            <type name="gfloat" c:type="float*"/>
11430          </parameter>
11431          <parameter name="out_dx"
11432                     direction="out"
11433                     caller-allocates="0"
11434                     transfer-ownership="full">
11435            <doc xml:space="preserve"
11436                 filename="gsk/gsktransform.c"
11437                 line="1973">return location for the translation
11438  in the x direction</doc>
11439            <type name="gfloat" c:type="float*"/>
11440          </parameter>
11441          <parameter name="out_dy"
11442                     direction="out"
11443                     caller-allocates="0"
11444                     transfer-ownership="full">
11445            <doc xml:space="preserve"
11446                 filename="gsk/gsktransform.c"
11447                 line="1975">return location for the translation
11448  in the y direction</doc>
11449            <type name="gfloat" c:type="float*"/>
11450          </parameter>
11451        </parameters>
11452      </method>
11453      <method name="to_affine" c:identifier="gsk_transform_to_affine">
11454        <doc xml:space="preserve"
11455             filename="gsk/gsktransform.c"
11456             line="2050">Converts a transform to 2D affine transformation factors.
11457
11458To recreate an equivalent transform from the factors returned
11459by this function, use
11460
11461    gsk_transform_scale (
11462        gsk_transform_translate (
11463            NULL,
11464            &amp;GRAPHENE_POINT_T (dx, dy)),
11465        sx, sy)
11466
11467@self must be a 2D affine transformation. If you are not
11468sure, use
11469
11470    gsk_transform_get_category() &gt;= GSK_TRANSFORM_CATEGORY_2D_AFFINE
11471
11472to check.</doc>
11473        <source-position filename="gsk/gsktransform.h" line="71"/>
11474        <return-value transfer-ownership="none">
11475          <type name="none" c:type="void"/>
11476        </return-value>
11477        <parameters>
11478          <instance-parameter name="self" transfer-ownership="none">
11479            <doc xml:space="preserve"
11480                 filename="gsk/gsktransform.c"
11481                 line="2052">a transform</doc>
11482            <type name="Transform" c:type="GskTransform*"/>
11483          </instance-parameter>
11484          <parameter name="out_scale_x"
11485                     direction="out"
11486                     caller-allocates="0"
11487                     transfer-ownership="full">
11488            <doc xml:space="preserve"
11489                 filename="gsk/gsktransform.c"
11490                 line="2053">return location for the scale
11491  factor in the x direction</doc>
11492            <type name="gfloat" c:type="float*"/>
11493          </parameter>
11494          <parameter name="out_scale_y"
11495                     direction="out"
11496                     caller-allocates="0"
11497                     transfer-ownership="full">
11498            <doc xml:space="preserve"
11499                 filename="gsk/gsktransform.c"
11500                 line="2055">return location for the scale
11501  factor in the y direction</doc>
11502            <type name="gfloat" c:type="float*"/>
11503          </parameter>
11504          <parameter name="out_dx"
11505                     direction="out"
11506                     caller-allocates="0"
11507                     transfer-ownership="full">
11508            <doc xml:space="preserve"
11509                 filename="gsk/gsktransform.c"
11510                 line="2057">return location for the translation
11511  in the x direction</doc>
11512            <type name="gfloat" c:type="float*"/>
11513          </parameter>
11514          <parameter name="out_dy"
11515                     direction="out"
11516                     caller-allocates="0"
11517                     transfer-ownership="full">
11518            <doc xml:space="preserve"
11519                 filename="gsk/gsktransform.c"
11520                 line="2059">return location for the translation
11521  in the y direction</doc>
11522            <type name="gfloat" c:type="float*"/>
11523          </parameter>
11524        </parameters>
11525      </method>
11526      <method name="to_matrix" c:identifier="gsk_transform_to_matrix">
11527        <doc xml:space="preserve"
11528             filename="gsk/gsktransform.c"
11529             line="1864">Computes the 4x4 matrix for the transform.
11530
11531The previous value of @out_matrix will be ignored.</doc>
11532        <source-position filename="gsk/gsktransform.h" line="51"/>
11533        <return-value transfer-ownership="none">
11534          <type name="none" c:type="void"/>
11535        </return-value>
11536        <parameters>
11537          <instance-parameter name="self"
11538                              transfer-ownership="none"
11539                              nullable="1"
11540                              allow-none="1">
11541            <doc xml:space="preserve"
11542                 filename="gsk/gsktransform.c"
11543                 line="1866">a transform</doc>
11544            <type name="Transform" c:type="GskTransform*"/>
11545          </instance-parameter>
11546          <parameter name="out_matrix"
11547                     direction="out"
11548                     caller-allocates="1"
11549                     transfer-ownership="none">
11550            <doc xml:space="preserve"
11551                 filename="gsk/gsktransform.c"
11552                 line="1867">return location for the matrix</doc>
11553            <type name="Graphene.Matrix" c:type="graphene_matrix_t*"/>
11554          </parameter>
11555        </parameters>
11556      </method>
11557      <method name="to_string" c:identifier="gsk_transform_to_string">
11558        <doc xml:space="preserve"
11559             filename="gsk/gsktransform.c"
11560             line="1840">Converts the transform into a human-readable string.
11561
11562The resulting string can be parsed with [func@Gsk.Transform.parse].
11563
11564This is a wrapper around [method@Gsk.Transform.print].</doc>
11565        <source-position filename="gsk/gsktransform.h" line="46"/>
11566        <return-value transfer-ownership="full">
11567          <doc xml:space="preserve"
11568               filename="gsk/gsktransform.c"
11569               line="1850">A new string for @self</doc>
11570          <type name="utf8" c:type="char*"/>
11571        </return-value>
11572        <parameters>
11573          <instance-parameter name="self"
11574                              transfer-ownership="none"
11575                              nullable="1"
11576                              allow-none="1">
11577            <doc xml:space="preserve"
11578                 filename="gsk/gsktransform.c"
11579                 line="1842">a transform</doc>
11580            <type name="Transform" c:type="GskTransform*"/>
11581          </instance-parameter>
11582        </parameters>
11583      </method>
11584      <method name="to_translate" c:identifier="gsk_transform_to_translate">
11585        <doc xml:space="preserve"
11586             filename="gsk/gsktransform.c"
11587             line="2204">Converts a transform to a translation operation.
11588
11589@self must be a 2D transformation. If you are not
11590sure, use
11591
11592    gsk_transform_get_category() &gt;= GSK_TRANSFORM_CATEGORY_2D_TRANSLATE
11593
11594to check.</doc>
11595        <source-position filename="gsk/gsktransform.h" line="77"/>
11596        <return-value transfer-ownership="none">
11597          <type name="none" c:type="void"/>
11598        </return-value>
11599        <parameters>
11600          <instance-parameter name="self" transfer-ownership="none">
11601            <doc xml:space="preserve"
11602                 filename="gsk/gsktransform.c"
11603                 line="2206">a transform</doc>
11604            <type name="Transform" c:type="GskTransform*"/>
11605          </instance-parameter>
11606          <parameter name="out_dx"
11607                     direction="out"
11608                     caller-allocates="0"
11609                     transfer-ownership="full">
11610            <doc xml:space="preserve"
11611                 filename="gsk/gsktransform.c"
11612                 line="2207">return location for the translation
11613  in the x direction</doc>
11614            <type name="gfloat" c:type="float*"/>
11615          </parameter>
11616          <parameter name="out_dy"
11617                     direction="out"
11618                     caller-allocates="0"
11619                     transfer-ownership="full">
11620            <doc xml:space="preserve"
11621                 filename="gsk/gsktransform.c"
11622                 line="2209">return location for the translation
11623  in the y direction</doc>
11624            <type name="gfloat" c:type="float*"/>
11625          </parameter>
11626        </parameters>
11627      </method>
11628      <method name="transform" c:identifier="gsk_transform_transform">
11629        <doc xml:space="preserve"
11630             filename="gsk/gsktransform.c"
11631             line="2246">Applies all the operations from @other to @next.
11632
11633This function consumes @next. Use [method@Gsk.Transform.ref] first
11634if you want to keep it around.</doc>
11635        <source-position filename="gsk/gsktransform.h" line="90"/>
11636        <return-value transfer-ownership="full" nullable="1">
11637          <doc xml:space="preserve"
11638               filename="gsk/gsktransform.c"
11639               line="2256">The new transform</doc>
11640          <type name="Transform" c:type="GskTransform*"/>
11641        </return-value>
11642        <parameters>
11643          <instance-parameter name="next"
11644                              transfer-ownership="full"
11645                              nullable="1"
11646                              allow-none="1">
11647            <doc xml:space="preserve"
11648                 filename="gsk/gsktransform.c"
11649                 line="2248">transform to apply @other to</doc>
11650            <type name="Transform" c:type="GskTransform*"/>
11651          </instance-parameter>
11652          <parameter name="other"
11653                     transfer-ownership="none"
11654                     nullable="1"
11655                     allow-none="1">
11656            <doc xml:space="preserve"
11657                 filename="gsk/gsktransform.c"
11658                 line="2249">transform to apply</doc>
11659            <type name="Transform" c:type="GskTransform*"/>
11660          </parameter>
11661        </parameters>
11662      </method>
11663      <method name="transform_bounds"
11664              c:identifier="gsk_transform_transform_bounds">
11665        <doc xml:space="preserve"
11666             filename="gsk/gsktransform.c"
11667             line="2406">Transforms a rectangle using the given transform.
11668
11669The result is the bounding box containing the coplanar quad.</doc>
11670        <source-position filename="gsk/gsktransform.h" line="137"/>
11671        <return-value transfer-ownership="none">
11672          <type name="none" c:type="void"/>
11673        </return-value>
11674        <parameters>
11675          <instance-parameter name="self" transfer-ownership="none">
11676            <doc xml:space="preserve"
11677                 filename="gsk/gsktransform.c"
11678                 line="2408">a transform</doc>
11679            <type name="Transform" c:type="GskTransform*"/>
11680          </instance-parameter>
11681          <parameter name="rect" transfer-ownership="none">
11682            <doc xml:space="preserve"
11683                 filename="gsk/gsktransform.c"
11684                 line="2409">the rectangle to transform</doc>
11685            <type name="Graphene.Rect" c:type="const graphene_rect_t*"/>
11686          </parameter>
11687          <parameter name="out_rect"
11688                     direction="out"
11689                     caller-allocates="1"
11690                     transfer-ownership="none">
11691            <doc xml:space="preserve"
11692                 filename="gsk/gsktransform.c"
11693                 line="2410">return location for the bounds
11694  of the transformed rectangle</doc>
11695            <type name="Graphene.Rect" c:type="graphene_rect_t*"/>
11696          </parameter>
11697        </parameters>
11698      </method>
11699      <method name="transform_point"
11700              c:identifier="gsk_transform_transform_point">
11701        <doc xml:space="preserve"
11702             filename="gsk/gsktransform.c"
11703             line="2487">Transforms a point using the given transform.</doc>
11704        <source-position filename="gsk/gsktransform.h" line="141"/>
11705        <return-value transfer-ownership="none">
11706          <type name="none" c:type="void"/>
11707        </return-value>
11708        <parameters>
11709          <instance-parameter name="self" transfer-ownership="none">
11710            <doc xml:space="preserve"
11711                 filename="gsk/gsktransform.c"
11712                 line="2489">a transform</doc>
11713            <type name="Transform" c:type="GskTransform*"/>
11714          </instance-parameter>
11715          <parameter name="point" transfer-ownership="none">
11716            <doc xml:space="preserve"
11717                 filename="gsk/gsktransform.c"
11718                 line="2490">the point to transform</doc>
11719            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
11720          </parameter>
11721          <parameter name="out_point"
11722                     direction="out"
11723                     caller-allocates="1"
11724                     transfer-ownership="none">
11725            <doc xml:space="preserve"
11726                 filename="gsk/gsktransform.c"
11727                 line="2491">return location for
11728  the transformed point</doc>
11729            <type name="Graphene.Point" c:type="graphene_point_t*"/>
11730          </parameter>
11731        </parameters>
11732      </method>
11733      <method name="translate" c:identifier="gsk_transform_translate">
11734        <doc xml:space="preserve"
11735             filename="gsk/gsktransform.c"
11736             line="771">Translates @next in 2-dimensional space by @point.
11737
11738This function consumes @next. Use [method@Gsk.Transform.ref] first
11739if you want to keep it around.</doc>
11740        <source-position filename="gsk/gsktransform.h" line="107"/>
11741        <return-value transfer-ownership="full" nullable="1">
11742          <doc xml:space="preserve"
11743               filename="gsk/gsktransform.c"
11744               line="781">The new transform</doc>
11745          <type name="Transform" c:type="GskTransform*"/>
11746        </return-value>
11747        <parameters>
11748          <instance-parameter name="next"
11749                              transfer-ownership="full"
11750                              nullable="1"
11751                              allow-none="1">
11752            <doc xml:space="preserve"
11753                 filename="gsk/gsktransform.c"
11754                 line="773">the next transform</doc>
11755            <type name="Transform" c:type="GskTransform*"/>
11756          </instance-parameter>
11757          <parameter name="point" transfer-ownership="none">
11758            <doc xml:space="preserve"
11759                 filename="gsk/gsktransform.c"
11760                 line="774">the point to translate the transform by</doc>
11761            <type name="Graphene.Point" c:type="const graphene_point_t*"/>
11762          </parameter>
11763        </parameters>
11764      </method>
11765      <method name="translate_3d" c:identifier="gsk_transform_translate_3d">
11766        <doc xml:space="preserve"
11767             filename="gsk/gsktransform.c"
11768             line="794">Translates @next by @point.
11769
11770This function consumes @next. Use [method@Gsk.Transform.ref] first
11771if you want to keep it around.</doc>
11772        <source-position filename="gsk/gsktransform.h" line="110"/>
11773        <return-value transfer-ownership="full" nullable="1">
11774          <doc xml:space="preserve"
11775               filename="gsk/gsktransform.c"
11776               line="804">The new transform</doc>
11777          <type name="Transform" c:type="GskTransform*"/>
11778        </return-value>
11779        <parameters>
11780          <instance-parameter name="next"
11781                              transfer-ownership="full"
11782                              nullable="1"
11783                              allow-none="1">
11784            <doc xml:space="preserve"
11785                 filename="gsk/gsktransform.c"
11786                 line="796">the next transform</doc>
11787            <type name="Transform" c:type="GskTransform*"/>
11788          </instance-parameter>
11789          <parameter name="point" transfer-ownership="none">
11790            <doc xml:space="preserve"
11791                 filename="gsk/gsktransform.c"
11792                 line="797">the point to translate the transform by</doc>
11793            <type name="Graphene.Point3D" c:type="const graphene_point3d_t*"/>
11794          </parameter>
11795        </parameters>
11796      </method>
11797      <method name="unref" c:identifier="gsk_transform_unref">
11798        <doc xml:space="preserve"
11799             filename="gsk/gsktransform.c"
11800             line="1791">Releases a reference on the given transform.
11801
11802If the reference was the last, the resources associated to the @self are
11803freed.</doc>
11804        <source-position filename="gsk/gsktransform.h" line="40"/>
11805        <return-value transfer-ownership="none">
11806          <type name="none" c:type="void"/>
11807        </return-value>
11808        <parameters>
11809          <instance-parameter name="self"
11810                              transfer-ownership="none"
11811                              nullable="1"
11812                              allow-none="1">
11813            <doc xml:space="preserve"
11814                 filename="gsk/gsktransform.c"
11815                 line="1793">a transform</doc>
11816            <type name="Transform" c:type="GskTransform*"/>
11817          </instance-parameter>
11818        </parameters>
11819      </method>
11820      <function name="parse" c:identifier="gsk_transform_parse">
11821        <doc xml:space="preserve"
11822             filename="gsk/gsktransform.c"
11823             line="2782">Parses a given into a transform.
11824
11825Strings printed via [method@Gsk.Transform.to_string]
11826can be read in again successfully using this function.
11827
11828If @string does not describe a valid transform, false
11829is returned and `NULL` is put in @out_transform.</doc>
11830        <source-position filename="gsk/gsktransform.h" line="48"/>
11831        <return-value transfer-ownership="none">
11832          <doc xml:space="preserve"
11833               filename="gsk/gsktransform.c"
11834               line="2795">true if @string described a valid transform</doc>
11835          <type name="gboolean" c:type="gboolean"/>
11836        </return-value>
11837        <parameters>
11838          <parameter name="string" transfer-ownership="none">
11839            <doc xml:space="preserve"
11840                 filename="gsk/gsktransform.c"
11841                 line="2784">the string to parse</doc>
11842            <type name="utf8" c:type="const char*"/>
11843          </parameter>
11844          <parameter name="out_transform"
11845                     direction="out"
11846                     caller-allocates="0"
11847                     transfer-ownership="full">
11848            <doc xml:space="preserve"
11849                 filename="gsk/gsktransform.c"
11850                 line="2785">return location for the transform</doc>
11851            <type name="Transform" c:type="GskTransform**"/>
11852          </parameter>
11853        </parameters>
11854      </function>
11855    </record>
11856    <enumeration name="TransformCategory"
11857                 glib:type-name="GskTransformCategory"
11858                 glib:get-type="gsk_transform_category_get_type"
11859                 c:type="GskTransformCategory">
11860      <doc xml:space="preserve"
11861           filename="gsk/gskenums.h"
11862           line="397">The categories of matrices relevant for GSK and GTK.
11863
11864Note that any category includes matrices of all later categories.
11865So if you want to for example check if a matrix is a 2D matrix,
11866`category &gt;= GSK_TRANSFORM_CATEGORY_2D` is the way to do this.
11867
11868Also keep in mind that rounding errors may cause matrices to not
11869conform to their categories. Otherwise, matrix operations done via
11870multiplication will not worsen categories. So for the matrix
11871multiplication `C = A * B`, `category(C) = MIN (category(A), category(B))`.</doc>
11872      <member name="unknown"
11873              value="0"
11874              c:identifier="GSK_TRANSFORM_CATEGORY_UNKNOWN"
11875              glib:nick="unknown"
11876              glib:name="GSK_TRANSFORM_CATEGORY_UNKNOWN">
11877        <doc xml:space="preserve"
11878             filename="gsk/gskenums.h"
11879             line="399">The category of the matrix has not been
11880  determined.</doc>
11881      </member>
11882      <member name="any"
11883              value="1"
11884              c:identifier="GSK_TRANSFORM_CATEGORY_ANY"
11885              glib:nick="any"
11886              glib:name="GSK_TRANSFORM_CATEGORY_ANY">
11887        <doc xml:space="preserve"
11888             filename="gsk/gskenums.h"
11889             line="401">Analyzing the matrix concluded that it does
11890  not fit in any other category.</doc>
11891      </member>
11892      <member name="3d"
11893              value="2"
11894              c:identifier="GSK_TRANSFORM_CATEGORY_3D"
11895              glib:nick="3d"
11896              glib:name="GSK_TRANSFORM_CATEGORY_3D">
11897        <doc xml:space="preserve"
11898             filename="gsk/gskenums.h"
11899             line="403">The matrix is a 3D matrix. This means that
11900  the w column (the last column) has the values (0, 0, 0, 1).</doc>
11901      </member>
11902      <member name="2d"
11903              value="3"
11904              c:identifier="GSK_TRANSFORM_CATEGORY_2D"
11905              glib:nick="2d"
11906              glib:name="GSK_TRANSFORM_CATEGORY_2D">
11907        <doc xml:space="preserve"
11908             filename="gsk/gskenums.h"
11909             line="405">The matrix is a 2D matrix. This is equivalent
11910  to graphene_matrix_is_2d() returning %TRUE. In particular, this
11911  means that Cairo can deal with the matrix.</doc>
11912      </member>
11913      <member name="2d_affine"
11914              value="4"
11915              c:identifier="GSK_TRANSFORM_CATEGORY_2D_AFFINE"
11916              glib:nick="2d-affine"
11917              glib:name="GSK_TRANSFORM_CATEGORY_2D_AFFINE">
11918        <doc xml:space="preserve"
11919             filename="gsk/gskenums.h"
11920             line="408">The matrix is a combination of 2D scale
11921  and 2D translation operations. In particular, this means that any
11922  rectangle can be transformed exactly using this matrix.</doc>
11923      </member>
11924      <member name="2d_translate"
11925              value="5"
11926              c:identifier="GSK_TRANSFORM_CATEGORY_2D_TRANSLATE"
11927              glib:nick="2d-translate"
11928              glib:name="GSK_TRANSFORM_CATEGORY_2D_TRANSLATE">
11929        <doc xml:space="preserve"
11930             filename="gsk/gskenums.h"
11931             line="411">The matrix is a 2D translation.</doc>
11932      </member>
11933      <member name="identity"
11934              value="6"
11935              c:identifier="GSK_TRANSFORM_CATEGORY_IDENTITY"
11936              glib:nick="identity"
11937              glib:name="GSK_TRANSFORM_CATEGORY_IDENTITY">
11938        <doc xml:space="preserve"
11939             filename="gsk/gskenums.h"
11940             line="412">The matrix is the identity matrix.</doc>
11941      </member>
11942    </enumeration>
11943    <class name="TransformNode"
11944           c:symbol-prefix="transform_node"
11945           c:type="GskTransformNode"
11946           parent="RenderNode"
11947           glib:type-name="GskTransformNode"
11948           glib:get-type="gsk_transform_node_get_type"
11949           glib:fundamental="1">
11950      <doc xml:space="preserve"
11951           filename="gsk/gskrendernodeimpl.c"
11952           line="4593">A render node applying a `GskTransform` to its single child node.</doc>
11953      <constructor name="new" c:identifier="gsk_transform_node_new">
11954        <doc xml:space="preserve"
11955             filename="gsk/gskrendernodeimpl.c"
11956             line="4773">Creates a `GskRenderNode` that will transform the given @child
11957with the given @transform.</doc>
11958        <source-position filename="gsk/gskrendernode.h" line="416"/>
11959        <return-value transfer-ownership="full">
11960          <doc xml:space="preserve"
11961               filename="gsk/gskrendernodeimpl.c"
11962               line="4781">A new `GskRenderNode`</doc>
11963          <type name="TransformNode" c:type="GskRenderNode*"/>
11964        </return-value>
11965        <parameters>
11966          <parameter name="child" transfer-ownership="none">
11967            <doc xml:space="preserve"
11968                 filename="gsk/gskrendernodeimpl.c"
11969                 line="4775">The node to transform</doc>
11970            <type name="RenderNode" c:type="GskRenderNode*"/>
11971          </parameter>
11972          <parameter name="transform" transfer-ownership="none">
11973            <doc xml:space="preserve"
11974                 filename="gsk/gskrendernodeimpl.c"
11975                 line="4776">The transform to apply</doc>
11976            <type name="Transform" c:type="GskTransform*"/>
11977          </parameter>
11978        </parameters>
11979      </constructor>
11980      <method name="get_child" c:identifier="gsk_transform_node_get_child">
11981        <doc xml:space="preserve"
11982             filename="gsk/gskrendernodeimpl.c"
11983             line="4818">Gets the child node that is getting transformed by the given @node.</doc>
11984        <source-position filename="gsk/gskrendernode.h" line="419"/>
11985        <return-value transfer-ownership="none">
11986          <doc xml:space="preserve"
11987               filename="gsk/gskrendernodeimpl.c"
11988               line="4824">The child that is getting transformed</doc>
11989          <type name="RenderNode" c:type="GskRenderNode*"/>
11990        </return-value>
11991        <parameters>
11992          <instance-parameter name="node" transfer-ownership="none">
11993            <doc xml:space="preserve"
11994                 filename="gsk/gskrendernodeimpl.c"
11995                 line="4820">a `GskRenderNode` for a transform</doc>
11996            <type name="TransformNode" c:type="const GskRenderNode*"/>
11997          </instance-parameter>
11998        </parameters>
11999      </method>
12000      <method name="get_transform"
12001              c:identifier="gsk_transform_node_get_transform">
12002        <doc xml:space="preserve"
12003             filename="gsk/gskrendernodeimpl.c"
12004             line="4834">Retrieves the `GskTransform` used by the @node.</doc>
12005        <source-position filename="gsk/gskrendernode.h" line="421"/>
12006        <return-value transfer-ownership="none">
12007          <doc xml:space="preserve"
12008               filename="gsk/gskrendernodeimpl.c"
12009               line="4840">a `GskTransform`</doc>
12010          <type name="Transform" c:type="GskTransform*"/>
12011        </return-value>
12012        <parameters>
12013          <instance-parameter name="node" transfer-ownership="none">
12014            <doc xml:space="preserve"
12015                 filename="gsk/gskrendernodeimpl.c"
12016                 line="4836">a `GskRenderNode` for a transform</doc>
12017            <type name="TransformNode" c:type="const GskRenderNode*"/>
12018          </instance-parameter>
12019        </parameters>
12020      </method>
12021    </class>
12022    <function-macro name="VALUE_HOLDS_RENDER_NODE"
12023                    c:identifier="GSK_VALUE_HOLDS_RENDER_NODE"
12024                    introspectable="0">
12025      <doc xml:space="preserve"
12026           filename="gsk/gskrendernode.h"
12027           line="636">Evaluates to true if @value was initialized with `GSK_TYPE_RENDER_NODE`.</doc>
12028      <source-position filename="gsk/gskrendernode.h" line="642"/>
12029      <parameters>
12030        <parameter name="value">
12031          <doc xml:space="preserve"
12032               filename="gsk/gskrendernode.h"
12033               line="638">a `GValue`</doc>
12034        </parameter>
12035      </parameters>
12036    </function-macro>
12037    <function-macro name="VULKAN_RENDERER"
12038                    c:identifier="GSK_VULKAN_RENDERER"
12039                    introspectable="0">
12040      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="27"/>
12041      <parameters>
12042        <parameter name="obj">
12043        </parameter>
12044      </parameters>
12045    </function-macro>
12046    <function-macro name="VULKAN_RENDERER_CLASS"
12047                    c:identifier="GSK_VULKAN_RENDERER_CLASS"
12048                    introspectable="0">
12049      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="29"/>
12050      <parameters>
12051        <parameter name="klass">
12052        </parameter>
12053      </parameters>
12054    </function-macro>
12055    <function-macro name="VULKAN_RENDERER_GET_CLASS"
12056                    c:identifier="GSK_VULKAN_RENDERER_GET_CLASS"
12057                    introspectable="0">
12058      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="31"/>
12059      <parameters>
12060        <parameter name="obj">
12061        </parameter>
12062      </parameters>
12063    </function-macro>
12064    <class name="VulkanRenderer"
12065           c:symbol-prefix="vulkan_renderer"
12066           c:type="GskVulkanRenderer"
12067           parent="Renderer"
12068           glib:type-name="GskVulkanRenderer"
12069           glib:get-type="gsk_vulkan_renderer_get_type"
12070           glib:type-struct="VulkanRendererClass">
12071      <doc xml:space="preserve"
12072           filename="gsk/gpu/gskvulkanrenderer.h"
12073           line="33">Renders a GSK rendernode tree with Vulkan.
12074
12075This renderer will fail to realize if Vulkan is not supported.</doc>
12076      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="41"/>
12077      <constructor name="new" c:identifier="gsk_vulkan_renderer_new">
12078        <doc xml:space="preserve"
12079             filename="gsk/gpu/gskvulkanrenderer.c"
12080             line="192">Creates a new Vulkan renderer.
12081
12082The Vulkan renderer is a renderer that uses the Vulkan library for
12083rendering.
12084
12085This renderer will fail to realize when GTK was not compiled with
12086Vulkan support.</doc>
12087        <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="47"/>
12088        <return-value transfer-ownership="full">
12089          <doc xml:space="preserve"
12090               filename="gsk/gpu/gskvulkanrenderer.c"
12091               line="203">a new Vulkan renderer</doc>
12092          <type name="Renderer" c:type="GskRenderer*"/>
12093        </return-value>
12094      </constructor>
12095    </class>
12096    <record name="VulkanRendererClass"
12097            c:type="GskVulkanRendererClass"
12098            disguised="1"
12099            opaque="1"
12100            glib:is-gtype-struct-for="VulkanRenderer">
12101      <source-position filename="gsk/gpu/gskvulkanrenderer.h" line="41"/>
12102    </record>
12103    <function name="component_transfer_equal"
12104              c:identifier="gsk_component_transfer_equal"
12105              moved-to="ComponentTransfer.equal"
12106              version="4.20">
12107      <doc xml:space="preserve"
12108           filename="gsk/gskcomponenttransfer.c"
12109           line="313">Compares two component transfers for equality.</doc>
12110      <source-position filename="gsk/gskcomponenttransfer.h" line="57"/>
12111      <return-value transfer-ownership="none">
12112        <doc xml:space="preserve"
12113             filename="gsk/gskcomponenttransfer.c"
12114             line="320">true if @self and @other are equal</doc>
12115        <type name="gboolean" c:type="gboolean"/>
12116      </return-value>
12117      <parameters>
12118        <parameter name="self" transfer-ownership="none">
12119          <doc xml:space="preserve"
12120               filename="gsk/gskcomponenttransfer.c"
12121               line="315">a component transfer</doc>
12122          <type name="gpointer" c:type="gconstpointer"/>
12123        </parameter>
12124        <parameter name="other" transfer-ownership="none">
12125          <doc xml:space="preserve"
12126               filename="gsk/gskcomponenttransfer.c"
12127               line="316">another component transfer</doc>
12128          <type name="gpointer" c:type="gconstpointer"/>
12129        </parameter>
12130      </parameters>
12131    </function>
12132    <function name="path_parse"
12133              c:identifier="gsk_path_parse"
12134              moved-to="Path.parse"
12135              version="4.14">
12136      <doc xml:space="preserve"
12137           filename="gsk/gskpathparser.c"
12138           line="358">Constructs a path from a serialized form.
12139
12140The string is expected to be in (a superset of)
12141[SVG path syntax](https://www.w3.org/TR/SVG11/paths.html#PathData),
12142as e.g. produced by [method@Gsk.Path.to_string].
12143
12144A high-level summary of the syntax:
12145
12146- `M x y` Move to `(x, y)`
12147- `L x y` Add a line from the current point to `(x, y)`
12148- `Q x1 y1 x2 y2` Add a quadratic Bézier from the current point to `(x2, y2)`, with control point `(x1, y1)`
12149- `C x1 y1 x2 y2 x3 y3` Add a cubic Bézier from the current point to `(x3, y3)`, with control points `(x1, y1)` and `(x2, y2)`
12150- `Z` Close the contour by drawing a line back to the start point
12151- `H x` Add a horizontal line from the current point to the given x value
12152- `V y` Add a vertical line from the current point to the given y value
12153- `T x2 y2` Add a quadratic Bézier, using the reflection of the previous segments' control point as control point
12154- `S x2 y2 x3 y3` Add a cubic Bézier, using the reflection of the previous segments' second control point as first control point
12155- `A rx ry r l s x y` Add an elliptical arc from the current point to `(x, y)` with radii rx and ry. See the SVG documentation for how the other parameters influence the arc.
12156- `O x1 y1 x2 y2 w` Add a rational quadratic Bézier from the current point to `(x2, y2)` with control point `(x1, y1)` and weight `w`.
12157
12158All the commands have lowercase variants that interpret coordinates
12159relative to the current point.
12160
12161The `O` command is an extension that is not supported in SVG.</doc>
12162      <source-position filename="gsk/gskpath.h" line="100"/>
12163      <return-value transfer-ownership="full" nullable="1">
12164        <doc xml:space="preserve"
12165             filename="gsk/gskpathparser.c"
12166             line="387">a new `GskPath`, or `NULL` if @string could not be parsed</doc>
12167        <type name="Path" c:type="GskPath*"/>
12168      </return-value>
12169      <parameters>
12170        <parameter name="string" transfer-ownership="none">
12171          <doc xml:space="preserve"
12172               filename="gsk/gskpathparser.c"
12173               line="360">a string</doc>
12174          <type name="utf8" c:type="const char*"/>
12175        </parameter>
12176      </parameters>
12177    </function>
12178    <function name="serialization_error_quark"
12179              c:identifier="gsk_serialization_error_quark"
12180              moved-to="SerializationError.quark">
12181      <doc xml:space="preserve"
12182           filename="gsk/gskrendernode.c"
12183           line="53">Registers an error quark for [class@Gsk.RenderNode] errors.</doc>
12184      <return-value transfer-ownership="none">
12185        <doc xml:space="preserve"
12186             filename="gsk/gskrendernode.c"
12187             line="58">the error quark</doc>
12188        <type name="GLib.Quark" c:type="GQuark"/>
12189      </return-value>
12190    </function>
12191    <function name="stroke_equal"
12192              c:identifier="gsk_stroke_equal"
12193              moved-to="Stroke.equal"
12194              version="4.14">
12195      <doc xml:space="preserve"
12196           filename="gsk/gskstroke.c"
12197           line="172">Checks if two strokes are identical.</doc>
12198      <source-position filename="gsk/gskstroke.h" line="43"/>
12199      <return-value transfer-ownership="none">
12200        <doc xml:space="preserve"
12201             filename="gsk/gskstroke.c"
12202             line="179">true if the two strokes are equal, false otherwise</doc>
12203        <type name="gboolean" c:type="gboolean"/>
12204      </return-value>
12205      <parameters>
12206        <parameter name="stroke1"
12207                   transfer-ownership="none"
12208                   nullable="1"
12209                   allow-none="1">
12210          <doc xml:space="preserve"
12211               filename="gsk/gskstroke.c"
12212               line="174">the first stroke</doc>
12213          <type name="gpointer" c:type="gconstpointer"/>
12214        </parameter>
12215        <parameter name="stroke2"
12216                   transfer-ownership="none"
12217                   nullable="1"
12218                   allow-none="1">
12219          <doc xml:space="preserve"
12220               filename="gsk/gskstroke.c"
12221               line="175">the second stroke</doc>
12222          <type name="gpointer" c:type="gconstpointer"/>
12223        </parameter>
12224      </parameters>
12225    </function>
12226    <function name="transform_parse"
12227              c:identifier="gsk_transform_parse"
12228              moved-to="Transform.parse">
12229      <doc xml:space="preserve"
12230           filename="gsk/gsktransform.c"
12231           line="2782">Parses a given into a transform.
12232
12233Strings printed via [method@Gsk.Transform.to_string]
12234can be read in again successfully using this function.
12235
12236If @string does not describe a valid transform, false
12237is returned and `NULL` is put in @out_transform.</doc>
12238      <source-position filename="gsk/gsktransform.h" line="48"/>
12239      <return-value transfer-ownership="none">
12240        <doc xml:space="preserve"
12241             filename="gsk/gsktransform.c"
12242             line="2795">true if @string described a valid transform</doc>
12243        <type name="gboolean" c:type="gboolean"/>
12244      </return-value>
12245      <parameters>
12246        <parameter name="string" transfer-ownership="none">
12247          <doc xml:space="preserve"
12248               filename="gsk/gsktransform.c"
12249               line="2784">the string to parse</doc>
12250          <type name="utf8" c:type="const char*"/>
12251        </parameter>
12252        <parameter name="out_transform"
12253                   direction="out"
12254                   caller-allocates="0"
12255                   transfer-ownership="full">
12256          <doc xml:space="preserve"
12257               filename="gsk/gsktransform.c"
12258               line="2785">return location for the transform</doc>
12259          <type name="Transform" c:type="GskTransform**"/>
12260        </parameter>
12261      </parameters>
12262    </function>
12263    <function name="value_dup_render_node"
12264              c:identifier="gsk_value_dup_render_node"
12265              version="4.6">
12266      <doc xml:space="preserve"
12267           filename="gsk/gskrendernode.c"
12268           line="793">Retrieves the render node stored inside a `GValue`,
12269and acquires a reference to it.</doc>
12270      <source-position filename="gsk/gskrendernode.h" line="653"/>
12271      <return-value transfer-ownership="full" nullable="1">
12272        <doc xml:space="preserve"
12273             filename="gsk/gskrendernode.c"
12274             line="800">the render node</doc>
12275        <type name="RenderNode" c:type="GskRenderNode*"/>
12276      </return-value>
12277      <parameters>
12278        <parameter name="value" transfer-ownership="none">
12279          <doc xml:space="preserve"
12280               filename="gsk/gskrendernode.c"
12281               line="795">a [struct@GObject.Value] initialized with type `GSK_TYPE_RENDER_NODE`</doc>
12282          <type name="GObject.Value" c:type="const GValue*"/>
12283        </parameter>
12284      </parameters>
12285    </function>
12286    <function name="value_get_render_node"
12287              c:identifier="gsk_value_get_render_node"
12288              version="4.6">
12289      <doc xml:space="preserve"
12290           filename="gsk/gskrendernode.c"
12291           line="775">Retrieves the render node stored inside a `GValue`.</doc>
12292      <source-position filename="gsk/gskrendernode.h" line="651"/>
12293      <return-value transfer-ownership="none" nullable="1">
12294        <doc xml:space="preserve"
12295             filename="gsk/gskrendernode.c"
12296             line="781">the render node</doc>
12297        <type name="RenderNode" c:type="GskRenderNode*"/>
12298      </return-value>
12299      <parameters>
12300        <parameter name="value" transfer-ownership="none">
12301          <doc xml:space="preserve"
12302               filename="gsk/gskrendernode.c"
12303               line="777">a `GValue` initialized with type `GSK_TYPE_RENDER_NODE`</doc>
12304          <type name="GObject.Value" c:type="const GValue*"/>
12305        </parameter>
12306      </parameters>
12307    </function>
12308    <function name="value_set_render_node"
12309              c:identifier="gsk_value_set_render_node"
12310              version="4.6">
12311      <doc xml:space="preserve"
12312           filename="gsk/gskrendernode.c"
12313           line="701">Stores the given render node inside a `GValue`.
12314
12315The [struct@GObject.Value] will acquire a reference
12316to the render node.</doc>
12317      <source-position filename="gsk/gskrendernode.h" line="645"/>
12318      <return-value transfer-ownership="none">
12319        <type name="none" c:type="void"/>
12320      </return-value>
12321      <parameters>
12322        <parameter name="value" transfer-ownership="none">
12323          <doc xml:space="preserve"
12324               filename="gsk/gskrendernode.c"
12325               line="703">a [struct@GObject.Value] initialized with type `GSK_TYPE_RENDER_NODE`</doc>
12326          <type name="GObject.Value" c:type="GValue*"/>
12327        </parameter>
12328        <parameter name="node" transfer-ownership="none">
12329          <doc xml:space="preserve"
12330               filename="gsk/gskrendernode.c"
12331               line="704">a render node</doc>
12332          <type name="RenderNode" c:type="GskRenderNode*"/>
12333        </parameter>
12334      </parameters>
12335    </function>
12336    <function name="value_take_render_node"
12337              c:identifier="gsk_value_take_render_node"
12338              version="4.6">
12339      <doc xml:space="preserve"
12340           filename="gsk/gskrendernode.c"
12341           line="738">Stores the given render node inside a `GValue`.
12342
12343This function transfers the ownership of the
12344render node to the `GValue`.</doc>
12345      <source-position filename="gsk/gskrendernode.h" line="648"/>
12346      <return-value transfer-ownership="none">
12347        <type name="none" c:type="void"/>
12348      </return-value>
12349      <parameters>
12350        <parameter name="value" transfer-ownership="none">
12351          <doc xml:space="preserve"
12352               filename="gsk/gskrendernode.c"
12353               line="740">a [struct@GObject.Value] initialized with type `GSK_TYPE_RENDER_NODE`</doc>
12354          <type name="GObject.Value" c:type="GValue*"/>
12355        </parameter>
12356        <parameter name="node"
12357                   transfer-ownership="full"
12358                   nullable="1"
12359                   allow-none="1">
12360          <doc xml:space="preserve"
12361               filename="gsk/gskrendernode.c"
12362               line="741">a render node</doc>
12363          <type name="RenderNode" c:type="GskRenderNode*"/>
12364        </parameter>
12365      </parameters>
12366    </function>
12367  </namespace>
12368</repository>

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 102

↑↓ moveenter openesc close