gsk4/auto/
enums.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::ffi;
6use glib::{prelude::*, translate::*};
7
8/// The blend modes available for render nodes.
9///
10/// The implementation of each blend mode is deferred to the
11/// rendering pipeline.
12///
13/// See <https://www.w3.org/TR/compositing-1/#blending> for more information
14/// on blending and blend modes.
15#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
16#[non_exhaustive]
17#[doc(alias = "GskBlendMode")]
18pub enum BlendMode {
19    /// The default blend mode, which specifies no blending
20    #[doc(alias = "GSK_BLEND_MODE_DEFAULT")]
21    Default,
22    /// The source color is multiplied by the destination
23    ///   and replaces the destination
24    #[doc(alias = "GSK_BLEND_MODE_MULTIPLY")]
25    Multiply,
26    /// Multiplies the complements of the destination and source
27    ///   color values, then complements the result.
28    #[doc(alias = "GSK_BLEND_MODE_SCREEN")]
29    Screen,
30    /// Multiplies or screens the colors, depending on the
31    ///   destination color value. This is the inverse of hard-list
32    #[doc(alias = "GSK_BLEND_MODE_OVERLAY")]
33    Overlay,
34    /// Selects the darker of the destination and source colors
35    #[doc(alias = "GSK_BLEND_MODE_DARKEN")]
36    Darken,
37    /// Selects the lighter of the destination and source colors
38    #[doc(alias = "GSK_BLEND_MODE_LIGHTEN")]
39    Lighten,
40    /// Brightens the destination color to reflect the source color
41    #[doc(alias = "GSK_BLEND_MODE_COLOR_DODGE")]
42    ColorDodge,
43    /// Darkens the destination color to reflect the source color
44    #[doc(alias = "GSK_BLEND_MODE_COLOR_BURN")]
45    ColorBurn,
46    /// Multiplies or screens the colors, depending on the source color value
47    #[doc(alias = "GSK_BLEND_MODE_HARD_LIGHT")]
48    HardLight,
49    /// Darkens or lightens the colors, depending on the source color value
50    #[doc(alias = "GSK_BLEND_MODE_SOFT_LIGHT")]
51    SoftLight,
52    /// Subtracts the darker of the two constituent colors from the lighter color
53    #[doc(alias = "GSK_BLEND_MODE_DIFFERENCE")]
54    Difference,
55    /// Produces an effect similar to that of the difference mode but lower in contrast
56    #[doc(alias = "GSK_BLEND_MODE_EXCLUSION")]
57    Exclusion,
58    /// Creates a color with the hue and saturation of the source color and the luminosity of the destination color
59    #[doc(alias = "GSK_BLEND_MODE_COLOR")]
60    Color,
61    /// Creates a color with the hue of the source color and the saturation and luminosity of the destination color
62    #[doc(alias = "GSK_BLEND_MODE_HUE")]
63    Hue,
64    /// Creates a color with the saturation of the source color and the hue and luminosity of the destination color
65    #[doc(alias = "GSK_BLEND_MODE_SATURATION")]
66    Saturation,
67    /// Creates a color with the luminosity of the source color and the hue and saturation of the destination color
68    #[doc(alias = "GSK_BLEND_MODE_LUMINOSITY")]
69    Luminosity,
70    #[doc(hidden)]
71    __Unknown(i32),
72}
73
74#[doc(hidden)]
75impl IntoGlib for BlendMode {
76    type GlibType = ffi::GskBlendMode;
77
78    fn into_glib(self) -> ffi::GskBlendMode {
79        match self {
80            Self::Default => ffi::GSK_BLEND_MODE_DEFAULT,
81            Self::Multiply => ffi::GSK_BLEND_MODE_MULTIPLY,
82            Self::Screen => ffi::GSK_BLEND_MODE_SCREEN,
83            Self::Overlay => ffi::GSK_BLEND_MODE_OVERLAY,
84            Self::Darken => ffi::GSK_BLEND_MODE_DARKEN,
85            Self::Lighten => ffi::GSK_BLEND_MODE_LIGHTEN,
86            Self::ColorDodge => ffi::GSK_BLEND_MODE_COLOR_DODGE,
87            Self::ColorBurn => ffi::GSK_BLEND_MODE_COLOR_BURN,
88            Self::HardLight => ffi::GSK_BLEND_MODE_HARD_LIGHT,
89            Self::SoftLight => ffi::GSK_BLEND_MODE_SOFT_LIGHT,
90            Self::Difference => ffi::GSK_BLEND_MODE_DIFFERENCE,
91            Self::Exclusion => ffi::GSK_BLEND_MODE_EXCLUSION,
92            Self::Color => ffi::GSK_BLEND_MODE_COLOR,
93            Self::Hue => ffi::GSK_BLEND_MODE_HUE,
94            Self::Saturation => ffi::GSK_BLEND_MODE_SATURATION,
95            Self::Luminosity => ffi::GSK_BLEND_MODE_LUMINOSITY,
96            Self::__Unknown(value) => value,
97        }
98    }
99}
100
101#[doc(hidden)]
102impl FromGlib<ffi::GskBlendMode> for BlendMode {
103    unsafe fn from_glib(value: ffi::GskBlendMode) -> Self {
104        skip_assert_initialized!();
105
106        match value {
107            ffi::GSK_BLEND_MODE_DEFAULT => Self::Default,
108            ffi::GSK_BLEND_MODE_MULTIPLY => Self::Multiply,
109            ffi::GSK_BLEND_MODE_SCREEN => Self::Screen,
110            ffi::GSK_BLEND_MODE_OVERLAY => Self::Overlay,
111            ffi::GSK_BLEND_MODE_DARKEN => Self::Darken,
112            ffi::GSK_BLEND_MODE_LIGHTEN => Self::Lighten,
113            ffi::GSK_BLEND_MODE_COLOR_DODGE => Self::ColorDodge,
114            ffi::GSK_BLEND_MODE_COLOR_BURN => Self::ColorBurn,
115            ffi::GSK_BLEND_MODE_HARD_LIGHT => Self::HardLight,
116            ffi::GSK_BLEND_MODE_SOFT_LIGHT => Self::SoftLight,
117            ffi::GSK_BLEND_MODE_DIFFERENCE => Self::Difference,
118            ffi::GSK_BLEND_MODE_EXCLUSION => Self::Exclusion,
119            ffi::GSK_BLEND_MODE_COLOR => Self::Color,
120            ffi::GSK_BLEND_MODE_HUE => Self::Hue,
121            ffi::GSK_BLEND_MODE_SATURATION => Self::Saturation,
122            ffi::GSK_BLEND_MODE_LUMINOSITY => Self::Luminosity,
123            value => Self::__Unknown(value),
124        }
125    }
126}
127
128impl StaticType for BlendMode {
129    #[inline]
130    #[doc(alias = "gsk_blend_mode_get_type")]
131    fn static_type() -> glib::Type {
132        unsafe { from_glib(ffi::gsk_blend_mode_get_type()) }
133    }
134}
135
136impl glib::HasParamSpec for BlendMode {
137    type ParamSpec = glib::ParamSpecEnum;
138    type SetValue = Self;
139    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
140
141    fn param_spec_builder() -> Self::BuilderFn {
142        Self::ParamSpec::builder_with_default
143    }
144}
145
146impl glib::value::ValueType for BlendMode {
147    type Type = Self;
148}
149
150unsafe impl<'a> glib::value::FromValue<'a> for BlendMode {
151    type Checker = glib::value::GenericValueTypeChecker<Self>;
152
153    #[inline]
154    unsafe fn from_value(value: &'a glib::Value) -> Self {
155        skip_assert_initialized!();
156        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
157    }
158}
159
160impl ToValue for BlendMode {
161    #[inline]
162    fn to_value(&self) -> glib::Value {
163        let mut value = glib::Value::for_value_type::<Self>();
164        unsafe {
165            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
166        }
167        value
168    }
169
170    #[inline]
171    fn value_type(&self) -> glib::Type {
172        Self::static_type()
173    }
174}
175
176impl From<BlendMode> for glib::Value {
177    #[inline]
178    fn from(v: BlendMode) -> Self {
179        skip_assert_initialized!();
180        ToValue::to_value(&v)
181    }
182}
183
184/// The corner indices used by [`RoundedRect`][crate::RoundedRect].
185#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
186#[non_exhaustive]
187#[doc(alias = "GskCorner")]
188pub enum Corner {
189    /// The top left corner
190    #[doc(alias = "GSK_CORNER_TOP_LEFT")]
191    TopLeft,
192    /// The top right corner
193    #[doc(alias = "GSK_CORNER_TOP_RIGHT")]
194    TopRight,
195    /// The bottom right corner
196    #[doc(alias = "GSK_CORNER_BOTTOM_RIGHT")]
197    BottomRight,
198    /// The bottom left corner
199    #[doc(alias = "GSK_CORNER_BOTTOM_LEFT")]
200    BottomLeft,
201    #[doc(hidden)]
202    __Unknown(i32),
203}
204
205#[doc(hidden)]
206impl IntoGlib for Corner {
207    type GlibType = ffi::GskCorner;
208
209    #[inline]
210    fn into_glib(self) -> ffi::GskCorner {
211        match self {
212            Self::TopLeft => ffi::GSK_CORNER_TOP_LEFT,
213            Self::TopRight => ffi::GSK_CORNER_TOP_RIGHT,
214            Self::BottomRight => ffi::GSK_CORNER_BOTTOM_RIGHT,
215            Self::BottomLeft => ffi::GSK_CORNER_BOTTOM_LEFT,
216            Self::__Unknown(value) => value,
217        }
218    }
219}
220
221#[doc(hidden)]
222impl FromGlib<ffi::GskCorner> for Corner {
223    #[inline]
224    unsafe fn from_glib(value: ffi::GskCorner) -> Self {
225        skip_assert_initialized!();
226
227        match value {
228            ffi::GSK_CORNER_TOP_LEFT => Self::TopLeft,
229            ffi::GSK_CORNER_TOP_RIGHT => Self::TopRight,
230            ffi::GSK_CORNER_BOTTOM_RIGHT => Self::BottomRight,
231            ffi::GSK_CORNER_BOTTOM_LEFT => Self::BottomLeft,
232            value => Self::__Unknown(value),
233        }
234    }
235}
236
237impl StaticType for Corner {
238    #[inline]
239    #[doc(alias = "gsk_corner_get_type")]
240    fn static_type() -> glib::Type {
241        unsafe { from_glib(ffi::gsk_corner_get_type()) }
242    }
243}
244
245impl glib::HasParamSpec for Corner {
246    type ParamSpec = glib::ParamSpecEnum;
247    type SetValue = Self;
248    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
249
250    fn param_spec_builder() -> Self::BuilderFn {
251        Self::ParamSpec::builder_with_default
252    }
253}
254
255impl glib::value::ValueType for Corner {
256    type Type = Self;
257}
258
259unsafe impl<'a> glib::value::FromValue<'a> for Corner {
260    type Checker = glib::value::GenericValueTypeChecker<Self>;
261
262    #[inline]
263    unsafe fn from_value(value: &'a glib::Value) -> Self {
264        skip_assert_initialized!();
265        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
266    }
267}
268
269impl ToValue for Corner {
270    #[inline]
271    fn to_value(&self) -> glib::Value {
272        let mut value = glib::Value::for_value_type::<Self>();
273        unsafe {
274            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
275        }
276        value
277    }
278
279    #[inline]
280    fn value_type(&self) -> glib::Type {
281        Self::static_type()
282    }
283}
284
285impl From<Corner> for glib::Value {
286    #[inline]
287    fn from(v: Corner) -> Self {
288        skip_assert_initialized!();
289        ToValue::to_value(&v)
290    }
291}
292
293/// Specifies how paths are filled.
294///
295/// Whether or not a point is included in the fill is determined by taking
296/// a ray from that point to infinity and looking at intersections with the
297/// path. The ray can be in any direction, as long as it doesn't pass through
298/// the end point of a segment or have a tricky intersection such as
299/// intersecting tangent to the path.
300///
301/// (Note that filling is not actually implemented in this way. This
302/// is just a description of the rule that is applied.)
303///
304/// New entries may be added in future versions.
305#[cfg(feature = "v4_14")]
306#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
307#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
308#[non_exhaustive]
309#[doc(alias = "GskFillRule")]
310pub enum FillRule {
311    /// If the path crosses the ray from
312    ///   left-to-right, counts +1. If the path crosses the ray
313    ///   from right to left, counts -1. (Left and right are determined
314    ///   from the perspective of looking along the ray from the starting
315    ///   point.) If the total count is non-zero, the point will be filled.
316    #[doc(alias = "GSK_FILL_RULE_WINDING")]
317    Winding,
318    /// Counts the total number of
319    ///   intersections, without regard to the orientation of the contour. If
320    ///   the total number of intersections is odd, the point will be
321    ///   filled.
322    #[doc(alias = "GSK_FILL_RULE_EVEN_ODD")]
323    EvenOdd,
324    #[doc(hidden)]
325    __Unknown(i32),
326}
327
328#[cfg(feature = "v4_14")]
329#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
330#[doc(hidden)]
331impl IntoGlib for FillRule {
332    type GlibType = ffi::GskFillRule;
333
334    #[inline]
335    fn into_glib(self) -> ffi::GskFillRule {
336        match self {
337            Self::Winding => ffi::GSK_FILL_RULE_WINDING,
338            Self::EvenOdd => ffi::GSK_FILL_RULE_EVEN_ODD,
339            Self::__Unknown(value) => value,
340        }
341    }
342}
343
344#[cfg(feature = "v4_14")]
345#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
346#[doc(hidden)]
347impl FromGlib<ffi::GskFillRule> for FillRule {
348    #[inline]
349    unsafe fn from_glib(value: ffi::GskFillRule) -> Self {
350        skip_assert_initialized!();
351
352        match value {
353            ffi::GSK_FILL_RULE_WINDING => Self::Winding,
354            ffi::GSK_FILL_RULE_EVEN_ODD => Self::EvenOdd,
355            value => Self::__Unknown(value),
356        }
357    }
358}
359
360#[cfg(feature = "v4_14")]
361#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
362impl StaticType for FillRule {
363    #[inline]
364    #[doc(alias = "gsk_fill_rule_get_type")]
365    fn static_type() -> glib::Type {
366        unsafe { from_glib(ffi::gsk_fill_rule_get_type()) }
367    }
368}
369
370#[cfg(feature = "v4_14")]
371#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
372impl glib::HasParamSpec for FillRule {
373    type ParamSpec = glib::ParamSpecEnum;
374    type SetValue = Self;
375    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
376
377    fn param_spec_builder() -> Self::BuilderFn {
378        Self::ParamSpec::builder_with_default
379    }
380}
381
382#[cfg(feature = "v4_14")]
383#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
384impl glib::value::ValueType for FillRule {
385    type Type = Self;
386}
387
388#[cfg(feature = "v4_14")]
389#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
390unsafe impl<'a> glib::value::FromValue<'a> for FillRule {
391    type Checker = glib::value::GenericValueTypeChecker<Self>;
392
393    #[inline]
394    unsafe fn from_value(value: &'a glib::Value) -> Self {
395        skip_assert_initialized!();
396        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
397    }
398}
399
400#[cfg(feature = "v4_14")]
401#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
402impl ToValue for FillRule {
403    #[inline]
404    fn to_value(&self) -> glib::Value {
405        let mut value = glib::Value::for_value_type::<Self>();
406        unsafe {
407            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
408        }
409        value
410    }
411
412    #[inline]
413    fn value_type(&self) -> glib::Type {
414        Self::static_type()
415    }
416}
417
418#[cfg(feature = "v4_14")]
419#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
420impl From<FillRule> for glib::Value {
421    #[inline]
422    fn from(v: FillRule) -> Self {
423        skip_assert_initialized!();
424        ToValue::to_value(&v)
425    }
426}
427
428/// Defines the types of the uniforms that `GskGLShaders` declare.
429///
430/// It defines both what the type is called in the GLSL shader
431/// code, and what the corresponding C type is on the Gtk side.
432///
433/// # Deprecated since 4.16
434///
435#[cfg_attr(feature = "v4_16", deprecated = "Since 4.16")]
436#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
437#[non_exhaustive]
438#[doc(alias = "GskGLUniformType")]
439pub enum GLUniformType {
440    /// No type, used for uninitialized or unspecified values.
441    #[doc(alias = "GSK_GL_UNIFORM_TYPE_NONE")]
442    None,
443    /// A float uniform
444    #[doc(alias = "GSK_GL_UNIFORM_TYPE_FLOAT")]
445    Float,
446    /// A GLSL int / gint32 uniform
447    #[doc(alias = "GSK_GL_UNIFORM_TYPE_INT")]
448    Int,
449    /// A GLSL uint / guint32 uniform
450    #[doc(alias = "GSK_GL_UNIFORM_TYPE_UINT")]
451    Uint,
452    /// A GLSL bool / gboolean uniform
453    #[doc(alias = "GSK_GL_UNIFORM_TYPE_BOOL")]
454    Bool,
455    /// A GLSL vec2 / graphene_vec2_t uniform
456    #[doc(alias = "GSK_GL_UNIFORM_TYPE_VEC2")]
457    Vec2,
458    /// A GLSL vec3 / graphene_vec3_t uniform
459    #[doc(alias = "GSK_GL_UNIFORM_TYPE_VEC3")]
460    Vec3,
461    /// A GLSL vec4 / graphene_vec4_t uniform
462    #[doc(alias = "GSK_GL_UNIFORM_TYPE_VEC4")]
463    Vec4,
464    #[doc(hidden)]
465    __Unknown(i32),
466}
467
468#[allow(deprecated)]
469#[doc(hidden)]
470impl IntoGlib for GLUniformType {
471    type GlibType = ffi::GskGLUniformType;
472
473    #[inline]
474    fn into_glib(self) -> ffi::GskGLUniformType {
475        match self {
476            Self::None => ffi::GSK_GL_UNIFORM_TYPE_NONE,
477            Self::Float => ffi::GSK_GL_UNIFORM_TYPE_FLOAT,
478            Self::Int => ffi::GSK_GL_UNIFORM_TYPE_INT,
479            Self::Uint => ffi::GSK_GL_UNIFORM_TYPE_UINT,
480            Self::Bool => ffi::GSK_GL_UNIFORM_TYPE_BOOL,
481            Self::Vec2 => ffi::GSK_GL_UNIFORM_TYPE_VEC2,
482            Self::Vec3 => ffi::GSK_GL_UNIFORM_TYPE_VEC3,
483            Self::Vec4 => ffi::GSK_GL_UNIFORM_TYPE_VEC4,
484            Self::__Unknown(value) => value,
485        }
486    }
487}
488
489#[allow(deprecated)]
490#[doc(hidden)]
491impl FromGlib<ffi::GskGLUniformType> for GLUniformType {
492    #[inline]
493    unsafe fn from_glib(value: ffi::GskGLUniformType) -> Self {
494        skip_assert_initialized!();
495
496        match value {
497            ffi::GSK_GL_UNIFORM_TYPE_NONE => Self::None,
498            ffi::GSK_GL_UNIFORM_TYPE_FLOAT => Self::Float,
499            ffi::GSK_GL_UNIFORM_TYPE_INT => Self::Int,
500            ffi::GSK_GL_UNIFORM_TYPE_UINT => Self::Uint,
501            ffi::GSK_GL_UNIFORM_TYPE_BOOL => Self::Bool,
502            ffi::GSK_GL_UNIFORM_TYPE_VEC2 => Self::Vec2,
503            ffi::GSK_GL_UNIFORM_TYPE_VEC3 => Self::Vec3,
504            ffi::GSK_GL_UNIFORM_TYPE_VEC4 => Self::Vec4,
505            value => Self::__Unknown(value),
506        }
507    }
508}
509
510#[allow(deprecated)]
511impl StaticType for GLUniformType {
512    #[inline]
513    #[doc(alias = "gsk_gl_uniform_type_get_type")]
514    fn static_type() -> glib::Type {
515        unsafe { from_glib(ffi::gsk_gl_uniform_type_get_type()) }
516    }
517}
518
519#[allow(deprecated)]
520impl glib::HasParamSpec for GLUniformType {
521    type ParamSpec = glib::ParamSpecEnum;
522    type SetValue = Self;
523    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
524
525    fn param_spec_builder() -> Self::BuilderFn {
526        Self::ParamSpec::builder_with_default
527    }
528}
529
530#[allow(deprecated)]
531impl glib::value::ValueType for GLUniformType {
532    type Type = Self;
533}
534
535#[allow(deprecated)]
536unsafe impl<'a> glib::value::FromValue<'a> for GLUniformType {
537    type Checker = glib::value::GenericValueTypeChecker<Self>;
538
539    #[inline]
540    unsafe fn from_value(value: &'a glib::Value) -> Self {
541        skip_assert_initialized!();
542        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
543    }
544}
545
546#[allow(deprecated)]
547impl ToValue for GLUniformType {
548    #[inline]
549    fn to_value(&self) -> glib::Value {
550        let mut value = glib::Value::for_value_type::<Self>();
551        unsafe {
552            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
553        }
554        value
555    }
556
557    #[inline]
558    fn value_type(&self) -> glib::Type {
559        Self::static_type()
560    }
561}
562
563#[allow(deprecated)]
564impl From<GLUniformType> for glib::Value {
565    #[inline]
566    fn from(v: GLUniformType) -> Self {
567        skip_assert_initialized!();
568        ToValue::to_value(&v)
569    }
570}
571
572/// Specifies how to render the start and end points of contours or
573/// dashes when stroking.
574///
575/// The default line cap style is `GSK_LINE_CAP_BUTT`.
576///
577/// New entries may be added in future versions.
578///
579/// <figure>
580///   <picture>
581///     <source srcset="caps-dark.png" media="(prefers-color-scheme: dark)">
582///     <img alt="Line Cap Styles" src="caps-light.png">
583///   </picture>
584///   <figcaption>GSK_LINE_CAP_BUTT, GSK_LINE_CAP_ROUND, GSK_LINE_CAP_SQUARE</figcaption>
585/// </figure>
586#[cfg(feature = "v4_14")]
587#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
588#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
589#[non_exhaustive]
590#[doc(alias = "GskLineCap")]
591pub enum LineCap {
592    /// Start and stop the line exactly at the start
593    ///   and end point
594    #[doc(alias = "GSK_LINE_CAP_BUTT")]
595    Butt,
596    /// Use a round ending, the center of the circle
597    ///   is the start or end point
598    #[doc(alias = "GSK_LINE_CAP_ROUND")]
599    Round,
600    /// use squared ending, the center of the square
601    ///   is the start or end point
602    #[doc(alias = "GSK_LINE_CAP_SQUARE")]
603    Square,
604    #[doc(hidden)]
605    __Unknown(i32),
606}
607
608#[cfg(feature = "v4_14")]
609#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
610#[doc(hidden)]
611impl IntoGlib for LineCap {
612    type GlibType = ffi::GskLineCap;
613
614    #[inline]
615    fn into_glib(self) -> ffi::GskLineCap {
616        match self {
617            Self::Butt => ffi::GSK_LINE_CAP_BUTT,
618            Self::Round => ffi::GSK_LINE_CAP_ROUND,
619            Self::Square => ffi::GSK_LINE_CAP_SQUARE,
620            Self::__Unknown(value) => value,
621        }
622    }
623}
624
625#[cfg(feature = "v4_14")]
626#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
627#[doc(hidden)]
628impl FromGlib<ffi::GskLineCap> for LineCap {
629    #[inline]
630    unsafe fn from_glib(value: ffi::GskLineCap) -> Self {
631        skip_assert_initialized!();
632
633        match value {
634            ffi::GSK_LINE_CAP_BUTT => Self::Butt,
635            ffi::GSK_LINE_CAP_ROUND => Self::Round,
636            ffi::GSK_LINE_CAP_SQUARE => Self::Square,
637            value => Self::__Unknown(value),
638        }
639    }
640}
641
642#[cfg(feature = "v4_14")]
643#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
644impl StaticType for LineCap {
645    #[inline]
646    #[doc(alias = "gsk_line_cap_get_type")]
647    fn static_type() -> glib::Type {
648        unsafe { from_glib(ffi::gsk_line_cap_get_type()) }
649    }
650}
651
652#[cfg(feature = "v4_14")]
653#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
654impl glib::HasParamSpec for LineCap {
655    type ParamSpec = glib::ParamSpecEnum;
656    type SetValue = Self;
657    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
658
659    fn param_spec_builder() -> Self::BuilderFn {
660        Self::ParamSpec::builder_with_default
661    }
662}
663
664#[cfg(feature = "v4_14")]
665#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
666impl glib::value::ValueType for LineCap {
667    type Type = Self;
668}
669
670#[cfg(feature = "v4_14")]
671#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
672unsafe impl<'a> glib::value::FromValue<'a> for LineCap {
673    type Checker = glib::value::GenericValueTypeChecker<Self>;
674
675    #[inline]
676    unsafe fn from_value(value: &'a glib::Value) -> Self {
677        skip_assert_initialized!();
678        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
679    }
680}
681
682#[cfg(feature = "v4_14")]
683#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
684impl ToValue for LineCap {
685    #[inline]
686    fn to_value(&self) -> glib::Value {
687        let mut value = glib::Value::for_value_type::<Self>();
688        unsafe {
689            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
690        }
691        value
692    }
693
694    #[inline]
695    fn value_type(&self) -> glib::Type {
696        Self::static_type()
697    }
698}
699
700#[cfg(feature = "v4_14")]
701#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
702impl From<LineCap> for glib::Value {
703    #[inline]
704    fn from(v: LineCap) -> Self {
705        skip_assert_initialized!();
706        ToValue::to_value(&v)
707    }
708}
709
710/// Specifies how to render the junction of two lines when stroking.
711///
712/// The default line join style is `GSK_LINE_JOIN_MITER`.
713///
714/// New entries may be added in future versions.
715///
716/// <figure>
717///   <picture>
718///     <source srcset="join-dark.png" media="(prefers-color-scheme: dark)">
719///     <img alt="Line Join Styles" src="join-light.png">
720///   </picture>
721///   <figcaption>GSK_LINE_JOINT_MITER, GSK_LINE_JOINT_ROUND, GSK_LINE_JOIN_BEVEL</figcaption>
722/// </figure>
723#[cfg(feature = "v4_14")]
724#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
725#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
726#[non_exhaustive]
727#[doc(alias = "GskLineJoin")]
728pub enum LineJoin {
729    /// Use a sharp angled corner
730    #[doc(alias = "GSK_LINE_JOIN_MITER")]
731    Miter,
732    /// Use a round join, the center of the circle is
733    ///   the join point
734    #[doc(alias = "GSK_LINE_JOIN_ROUND")]
735    Round,
736    /// use a cut-off join, the join is cut off at half
737    ///   the line width from the joint point
738    #[doc(alias = "GSK_LINE_JOIN_BEVEL")]
739    Bevel,
740    #[doc(hidden)]
741    __Unknown(i32),
742}
743
744#[cfg(feature = "v4_14")]
745#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
746#[doc(hidden)]
747impl IntoGlib for LineJoin {
748    type GlibType = ffi::GskLineJoin;
749
750    #[inline]
751    fn into_glib(self) -> ffi::GskLineJoin {
752        match self {
753            Self::Miter => ffi::GSK_LINE_JOIN_MITER,
754            Self::Round => ffi::GSK_LINE_JOIN_ROUND,
755            Self::Bevel => ffi::GSK_LINE_JOIN_BEVEL,
756            Self::__Unknown(value) => value,
757        }
758    }
759}
760
761#[cfg(feature = "v4_14")]
762#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
763#[doc(hidden)]
764impl FromGlib<ffi::GskLineJoin> for LineJoin {
765    #[inline]
766    unsafe fn from_glib(value: ffi::GskLineJoin) -> Self {
767        skip_assert_initialized!();
768
769        match value {
770            ffi::GSK_LINE_JOIN_MITER => Self::Miter,
771            ffi::GSK_LINE_JOIN_ROUND => Self::Round,
772            ffi::GSK_LINE_JOIN_BEVEL => Self::Bevel,
773            value => Self::__Unknown(value),
774        }
775    }
776}
777
778#[cfg(feature = "v4_14")]
779#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
780impl StaticType for LineJoin {
781    #[inline]
782    #[doc(alias = "gsk_line_join_get_type")]
783    fn static_type() -> glib::Type {
784        unsafe { from_glib(ffi::gsk_line_join_get_type()) }
785    }
786}
787
788#[cfg(feature = "v4_14")]
789#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
790impl glib::HasParamSpec for LineJoin {
791    type ParamSpec = glib::ParamSpecEnum;
792    type SetValue = Self;
793    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
794
795    fn param_spec_builder() -> Self::BuilderFn {
796        Self::ParamSpec::builder_with_default
797    }
798}
799
800#[cfg(feature = "v4_14")]
801#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
802impl glib::value::ValueType for LineJoin {
803    type Type = Self;
804}
805
806#[cfg(feature = "v4_14")]
807#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
808unsafe impl<'a> glib::value::FromValue<'a> for LineJoin {
809    type Checker = glib::value::GenericValueTypeChecker<Self>;
810
811    #[inline]
812    unsafe fn from_value(value: &'a glib::Value) -> Self {
813        skip_assert_initialized!();
814        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
815    }
816}
817
818#[cfg(feature = "v4_14")]
819#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
820impl ToValue for LineJoin {
821    #[inline]
822    fn to_value(&self) -> glib::Value {
823        let mut value = glib::Value::for_value_type::<Self>();
824        unsafe {
825            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
826        }
827        value
828    }
829
830    #[inline]
831    fn value_type(&self) -> glib::Type {
832        Self::static_type()
833    }
834}
835
836#[cfg(feature = "v4_14")]
837#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
838impl From<LineJoin> for glib::Value {
839    #[inline]
840    fn from(v: LineJoin) -> Self {
841        skip_assert_initialized!();
842        ToValue::to_value(&v)
843    }
844}
845
846/// The mask modes available for mask nodes.
847#[cfg(feature = "v4_10")]
848#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
849#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
850#[non_exhaustive]
851#[doc(alias = "GskMaskMode")]
852pub enum MaskMode {
853    /// Use the alpha channel of the mask
854    #[doc(alias = "GSK_MASK_MODE_ALPHA")]
855    Alpha,
856    /// Use the inverted alpha channel of the mask
857    #[doc(alias = "GSK_MASK_MODE_INVERTED_ALPHA")]
858    InvertedAlpha,
859    /// Use the luminance of the mask,
860    ///     multiplied by mask alpha
861    #[doc(alias = "GSK_MASK_MODE_LUMINANCE")]
862    Luminance,
863    /// Use the inverted luminance of the mask,
864    ///     multiplied by mask alpha
865    #[doc(alias = "GSK_MASK_MODE_INVERTED_LUMINANCE")]
866    InvertedLuminance,
867    #[doc(hidden)]
868    __Unknown(i32),
869}
870
871#[cfg(feature = "v4_10")]
872#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
873#[doc(hidden)]
874impl IntoGlib for MaskMode {
875    type GlibType = ffi::GskMaskMode;
876
877    #[inline]
878    fn into_glib(self) -> ffi::GskMaskMode {
879        match self {
880            Self::Alpha => ffi::GSK_MASK_MODE_ALPHA,
881            Self::InvertedAlpha => ffi::GSK_MASK_MODE_INVERTED_ALPHA,
882            Self::Luminance => ffi::GSK_MASK_MODE_LUMINANCE,
883            Self::InvertedLuminance => ffi::GSK_MASK_MODE_INVERTED_LUMINANCE,
884            Self::__Unknown(value) => value,
885        }
886    }
887}
888
889#[cfg(feature = "v4_10")]
890#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
891#[doc(hidden)]
892impl FromGlib<ffi::GskMaskMode> for MaskMode {
893    #[inline]
894    unsafe fn from_glib(value: ffi::GskMaskMode) -> Self {
895        skip_assert_initialized!();
896
897        match value {
898            ffi::GSK_MASK_MODE_ALPHA => Self::Alpha,
899            ffi::GSK_MASK_MODE_INVERTED_ALPHA => Self::InvertedAlpha,
900            ffi::GSK_MASK_MODE_LUMINANCE => Self::Luminance,
901            ffi::GSK_MASK_MODE_INVERTED_LUMINANCE => Self::InvertedLuminance,
902            value => Self::__Unknown(value),
903        }
904    }
905}
906
907#[cfg(feature = "v4_10")]
908#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
909impl StaticType for MaskMode {
910    #[inline]
911    #[doc(alias = "gsk_mask_mode_get_type")]
912    fn static_type() -> glib::Type {
913        unsafe { from_glib(ffi::gsk_mask_mode_get_type()) }
914    }
915}
916
917#[cfg(feature = "v4_10")]
918#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
919impl glib::HasParamSpec for MaskMode {
920    type ParamSpec = glib::ParamSpecEnum;
921    type SetValue = Self;
922    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
923
924    fn param_spec_builder() -> Self::BuilderFn {
925        Self::ParamSpec::builder_with_default
926    }
927}
928
929#[cfg(feature = "v4_10")]
930#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
931impl glib::value::ValueType for MaskMode {
932    type Type = Self;
933}
934
935#[cfg(feature = "v4_10")]
936#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
937unsafe impl<'a> glib::value::FromValue<'a> for MaskMode {
938    type Checker = glib::value::GenericValueTypeChecker<Self>;
939
940    #[inline]
941    unsafe fn from_value(value: &'a glib::Value) -> Self {
942        skip_assert_initialized!();
943        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
944    }
945}
946
947#[cfg(feature = "v4_10")]
948#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
949impl ToValue for MaskMode {
950    #[inline]
951    fn to_value(&self) -> glib::Value {
952        let mut value = glib::Value::for_value_type::<Self>();
953        unsafe {
954            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
955        }
956        value
957    }
958
959    #[inline]
960    fn value_type(&self) -> glib::Type {
961        Self::static_type()
962    }
963}
964
965#[cfg(feature = "v4_10")]
966#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
967impl From<MaskMode> for glib::Value {
968    #[inline]
969    fn from(v: MaskMode) -> Self {
970        skip_assert_initialized!();
971        ToValue::to_value(&v)
972    }
973}
974
975/// Used to pick one of the four tangents at a given point on the path.
976///
977/// Note that the directions for @GSK_PATH_FROM_START/@GSK_PATH_TO_END and
978/// @GSK_PATH_TO_START/@GSK_PATH_FROM_END will coincide for smooth points.
979/// Only sharp turns will exhibit four different directions.
980///
981/// <picture>
982///   <source srcset="directions-dark.png" media="(prefers-color-scheme: dark)">
983///   <img alt="Path Tangents" src="directions-light.png">
984/// </picture>
985#[cfg(feature = "v4_14")]
986#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
987#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
988#[non_exhaustive]
989#[doc(alias = "GskPathDirection")]
990pub enum PathDirection {
991    /// The tangent in path direction of the incoming side
992    ///   of the path
993    #[doc(alias = "GSK_PATH_FROM_START")]
994    FromStart,
995    /// The tangent against path direction of the incoming side
996    ///   of the path
997    #[doc(alias = "GSK_PATH_TO_START")]
998    ToStart,
999    /// The tangent in path direction of the outgoing side
1000    ///   of the path
1001    #[doc(alias = "GSK_PATH_TO_END")]
1002    ToEnd,
1003    /// The tangent against path direction of the outgoing
1004    ///   side of the path
1005    #[doc(alias = "GSK_PATH_FROM_END")]
1006    FromEnd,
1007    #[doc(hidden)]
1008    __Unknown(i32),
1009}
1010
1011#[cfg(feature = "v4_14")]
1012#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1013#[doc(hidden)]
1014impl IntoGlib for PathDirection {
1015    type GlibType = ffi::GskPathDirection;
1016
1017    #[inline]
1018    fn into_glib(self) -> ffi::GskPathDirection {
1019        match self {
1020            Self::FromStart => ffi::GSK_PATH_FROM_START,
1021            Self::ToStart => ffi::GSK_PATH_TO_START,
1022            Self::ToEnd => ffi::GSK_PATH_TO_END,
1023            Self::FromEnd => ffi::GSK_PATH_FROM_END,
1024            Self::__Unknown(value) => value,
1025        }
1026    }
1027}
1028
1029#[cfg(feature = "v4_14")]
1030#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1031#[doc(hidden)]
1032impl FromGlib<ffi::GskPathDirection> for PathDirection {
1033    #[inline]
1034    unsafe fn from_glib(value: ffi::GskPathDirection) -> Self {
1035        skip_assert_initialized!();
1036
1037        match value {
1038            ffi::GSK_PATH_FROM_START => Self::FromStart,
1039            ffi::GSK_PATH_TO_START => Self::ToStart,
1040            ffi::GSK_PATH_TO_END => Self::ToEnd,
1041            ffi::GSK_PATH_FROM_END => Self::FromEnd,
1042            value => Self::__Unknown(value),
1043        }
1044    }
1045}
1046
1047#[cfg(feature = "v4_14")]
1048#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1049impl StaticType for PathDirection {
1050    #[inline]
1051    #[doc(alias = "gsk_path_direction_get_type")]
1052    fn static_type() -> glib::Type {
1053        unsafe { from_glib(ffi::gsk_path_direction_get_type()) }
1054    }
1055}
1056
1057#[cfg(feature = "v4_14")]
1058#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1059impl glib::HasParamSpec for PathDirection {
1060    type ParamSpec = glib::ParamSpecEnum;
1061    type SetValue = Self;
1062    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1063
1064    fn param_spec_builder() -> Self::BuilderFn {
1065        Self::ParamSpec::builder_with_default
1066    }
1067}
1068
1069#[cfg(feature = "v4_14")]
1070#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1071impl glib::value::ValueType for PathDirection {
1072    type Type = Self;
1073}
1074
1075#[cfg(feature = "v4_14")]
1076#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1077unsafe impl<'a> glib::value::FromValue<'a> for PathDirection {
1078    type Checker = glib::value::GenericValueTypeChecker<Self>;
1079
1080    #[inline]
1081    unsafe fn from_value(value: &'a glib::Value) -> Self {
1082        skip_assert_initialized!();
1083        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1084    }
1085}
1086
1087#[cfg(feature = "v4_14")]
1088#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1089impl ToValue for PathDirection {
1090    #[inline]
1091    fn to_value(&self) -> glib::Value {
1092        let mut value = glib::Value::for_value_type::<Self>();
1093        unsafe {
1094            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1095        }
1096        value
1097    }
1098
1099    #[inline]
1100    fn value_type(&self) -> glib::Type {
1101        Self::static_type()
1102    }
1103}
1104
1105#[cfg(feature = "v4_14")]
1106#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1107impl From<PathDirection> for glib::Value {
1108    #[inline]
1109    fn from(v: PathDirection) -> Self {
1110        skip_assert_initialized!();
1111        ToValue::to_value(&v)
1112    }
1113}
1114
1115/// The values of this enumeration classify intersections
1116/// between paths.
1117#[cfg(feature = "v4_20")]
1118#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1119#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1120#[non_exhaustive]
1121#[doc(alias = "GskPathIntersection")]
1122pub enum PathIntersection {
1123    /// No intersection
1124    #[doc(alias = "GSK_PATH_INTERSECTION_NONE")]
1125    None,
1126    /// A normal intersection, where the two paths
1127    ///   cross each other
1128    #[doc(alias = "GSK_PATH_INTERSECTION_NORMAL")]
1129    Normal,
1130    /// The start of a segment where the two paths coincide
1131    #[doc(alias = "GSK_PATH_INTERSECTION_START")]
1132    Start,
1133    /// The end of a segment where the two paths coincide
1134    #[doc(alias = "GSK_PATH_INTERSECTION_END")]
1135    End,
1136    #[doc(hidden)]
1137    __Unknown(i32),
1138}
1139
1140#[cfg(feature = "v4_20")]
1141#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1142#[doc(hidden)]
1143impl IntoGlib for PathIntersection {
1144    type GlibType = ffi::GskPathIntersection;
1145
1146    #[inline]
1147    fn into_glib(self) -> ffi::GskPathIntersection {
1148        match self {
1149            Self::None => ffi::GSK_PATH_INTERSECTION_NONE,
1150            Self::Normal => ffi::GSK_PATH_INTERSECTION_NORMAL,
1151            Self::Start => ffi::GSK_PATH_INTERSECTION_START,
1152            Self::End => ffi::GSK_PATH_INTERSECTION_END,
1153            Self::__Unknown(value) => value,
1154        }
1155    }
1156}
1157
1158#[cfg(feature = "v4_20")]
1159#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1160#[doc(hidden)]
1161impl FromGlib<ffi::GskPathIntersection> for PathIntersection {
1162    #[inline]
1163    unsafe fn from_glib(value: ffi::GskPathIntersection) -> Self {
1164        skip_assert_initialized!();
1165
1166        match value {
1167            ffi::GSK_PATH_INTERSECTION_NONE => Self::None,
1168            ffi::GSK_PATH_INTERSECTION_NORMAL => Self::Normal,
1169            ffi::GSK_PATH_INTERSECTION_START => Self::Start,
1170            ffi::GSK_PATH_INTERSECTION_END => Self::End,
1171            value => Self::__Unknown(value),
1172        }
1173    }
1174}
1175
1176#[cfg(feature = "v4_20")]
1177#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1178impl StaticType for PathIntersection {
1179    #[inline]
1180    #[doc(alias = "gsk_path_intersection_get_type")]
1181    fn static_type() -> glib::Type {
1182        unsafe { from_glib(ffi::gsk_path_intersection_get_type()) }
1183    }
1184}
1185
1186#[cfg(feature = "v4_20")]
1187#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1188impl glib::HasParamSpec for PathIntersection {
1189    type ParamSpec = glib::ParamSpecEnum;
1190    type SetValue = Self;
1191    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1192
1193    fn param_spec_builder() -> Self::BuilderFn {
1194        Self::ParamSpec::builder_with_default
1195    }
1196}
1197
1198#[cfg(feature = "v4_20")]
1199#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1200impl glib::value::ValueType for PathIntersection {
1201    type Type = Self;
1202}
1203
1204#[cfg(feature = "v4_20")]
1205#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1206unsafe impl<'a> glib::value::FromValue<'a> for PathIntersection {
1207    type Checker = glib::value::GenericValueTypeChecker<Self>;
1208
1209    #[inline]
1210    unsafe fn from_value(value: &'a glib::Value) -> Self {
1211        skip_assert_initialized!();
1212        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1213    }
1214}
1215
1216#[cfg(feature = "v4_20")]
1217#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1218impl ToValue for PathIntersection {
1219    #[inline]
1220    fn to_value(&self) -> glib::Value {
1221        let mut value = glib::Value::for_value_type::<Self>();
1222        unsafe {
1223            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1224        }
1225        value
1226    }
1227
1228    #[inline]
1229    fn value_type(&self) -> glib::Type {
1230        Self::static_type()
1231    }
1232}
1233
1234#[cfg(feature = "v4_20")]
1235#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1236impl From<PathIntersection> for glib::Value {
1237    #[inline]
1238    fn from(v: PathIntersection) -> Self {
1239        skip_assert_initialized!();
1240        ToValue::to_value(&v)
1241    }
1242}
1243
1244/// Describes the segments of a [`Path`][crate::Path].
1245///
1246/// More values may be added in the future.
1247#[cfg(feature = "v4_14")]
1248#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1249#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1250#[non_exhaustive]
1251#[doc(alias = "GskPathOperation")]
1252pub enum PathOperation {
1253    /// A move-to operation, with 1 point describing the target point.
1254    #[doc(alias = "GSK_PATH_MOVE")]
1255    Move,
1256    /// A close operation ending the current contour with a line back
1257    ///   to the starting point. Two points describe the start and end of the line.
1258    #[doc(alias = "GSK_PATH_CLOSE")]
1259    Close,
1260    /// A line-to operation, with 2 points describing the start and
1261    ///   end point of a straight line.
1262    #[doc(alias = "GSK_PATH_LINE")]
1263    Line,
1264    /// A curve-to operation describing a quadratic Bézier curve
1265    ///   with 3 points describing the start point, the control point and the end
1266    ///   point of the curve.
1267    #[doc(alias = "GSK_PATH_QUAD")]
1268    Quad,
1269    /// A curve-to operation describing a cubic Bézier curve with 4
1270    ///   points describing the start point, the two control points and the end point
1271    ///   of the curve.
1272    #[doc(alias = "GSK_PATH_CUBIC")]
1273    Cubic,
1274    /// A rational quadratic Bézier curve with 3 points describing
1275    ///   the start point, control point and end point of the curve. A weight for the
1276    ///   curve will be passed, too.
1277    #[doc(alias = "GSK_PATH_CONIC")]
1278    Conic,
1279    #[doc(hidden)]
1280    __Unknown(i32),
1281}
1282
1283#[cfg(feature = "v4_14")]
1284#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1285#[doc(hidden)]
1286impl IntoGlib for PathOperation {
1287    type GlibType = ffi::GskPathOperation;
1288
1289    #[inline]
1290    fn into_glib(self) -> ffi::GskPathOperation {
1291        match self {
1292            Self::Move => ffi::GSK_PATH_MOVE,
1293            Self::Close => ffi::GSK_PATH_CLOSE,
1294            Self::Line => ffi::GSK_PATH_LINE,
1295            Self::Quad => ffi::GSK_PATH_QUAD,
1296            Self::Cubic => ffi::GSK_PATH_CUBIC,
1297            Self::Conic => ffi::GSK_PATH_CONIC,
1298            Self::__Unknown(value) => value,
1299        }
1300    }
1301}
1302
1303#[cfg(feature = "v4_14")]
1304#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1305#[doc(hidden)]
1306impl FromGlib<ffi::GskPathOperation> for PathOperation {
1307    #[inline]
1308    unsafe fn from_glib(value: ffi::GskPathOperation) -> Self {
1309        skip_assert_initialized!();
1310
1311        match value {
1312            ffi::GSK_PATH_MOVE => Self::Move,
1313            ffi::GSK_PATH_CLOSE => Self::Close,
1314            ffi::GSK_PATH_LINE => Self::Line,
1315            ffi::GSK_PATH_QUAD => Self::Quad,
1316            ffi::GSK_PATH_CUBIC => Self::Cubic,
1317            ffi::GSK_PATH_CONIC => Self::Conic,
1318            value => Self::__Unknown(value),
1319        }
1320    }
1321}
1322
1323#[cfg(feature = "v4_14")]
1324#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1325impl StaticType for PathOperation {
1326    #[inline]
1327    #[doc(alias = "gsk_path_operation_get_type")]
1328    fn static_type() -> glib::Type {
1329        unsafe { from_glib(ffi::gsk_path_operation_get_type()) }
1330    }
1331}
1332
1333#[cfg(feature = "v4_14")]
1334#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1335impl glib::HasParamSpec for PathOperation {
1336    type ParamSpec = glib::ParamSpecEnum;
1337    type SetValue = Self;
1338    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1339
1340    fn param_spec_builder() -> Self::BuilderFn {
1341        Self::ParamSpec::builder_with_default
1342    }
1343}
1344
1345#[cfg(feature = "v4_14")]
1346#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1347impl glib::value::ValueType for PathOperation {
1348    type Type = Self;
1349}
1350
1351#[cfg(feature = "v4_14")]
1352#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1353unsafe impl<'a> glib::value::FromValue<'a> for PathOperation {
1354    type Checker = glib::value::GenericValueTypeChecker<Self>;
1355
1356    #[inline]
1357    unsafe fn from_value(value: &'a glib::Value) -> Self {
1358        skip_assert_initialized!();
1359        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1360    }
1361}
1362
1363#[cfg(feature = "v4_14")]
1364#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1365impl ToValue for PathOperation {
1366    #[inline]
1367    fn to_value(&self) -> glib::Value {
1368        let mut value = glib::Value::for_value_type::<Self>();
1369        unsafe {
1370            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1371        }
1372        value
1373    }
1374
1375    #[inline]
1376    fn value_type(&self) -> glib::Type {
1377        Self::static_type()
1378    }
1379}
1380
1381#[cfg(feature = "v4_14")]
1382#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1383impl From<PathOperation> for glib::Value {
1384    #[inline]
1385    fn from(v: PathOperation) -> Self {
1386        skip_assert_initialized!();
1387        ToValue::to_value(&v)
1388    }
1389}
1390
1391/// GSK_PORTER_DUFF_SOURCE:
1392/// GSK_PORTER_DUFF_DEST:
1393/// GSK_PORTER_DUFF_SOURCE_OVER_DEST:
1394/// GSK_PORTER_DUFF_DEST_OVER_SOURCE:
1395/// GSK_PORTER_DUFF_SOURCE_IN_DEST:
1396/// GSK_PORTER_DUFF_DEST_IN_SOURCE:
1397/// GSK_PORTER_DUFF_SOURCE_OUT_DEST:
1398/// GSK_PORTER_DUFF_DEST_OUT_SOURCE:
1399/// GSK_PORTER_DUFF_SOURCE_ATOP_DEST:
1400/// GSK_PORTER_DUFF_DEST_ATOP_SOURCE:
1401/// GSK_PORTER_DUFF_XOR:
1402/// GSK_PORTER_DUFF_CLEAR:
1403/// The 12 compositing modes defined by the seminal paper
1404/// by Thomas Porter and Tom Duff.
1405///
1406/// They are used in SVG, PDF and in Cairo with `cairo_operator_t`.
1407#[cfg(feature = "v4_22")]
1408#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1409#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1410#[non_exhaustive]
1411#[doc(alias = "GskPorterDuff")]
1412pub enum PorterDuff {
1413    #[doc(alias = "GSK_PORTER_DUFF_SOURCE")]
1414    Source,
1415    #[doc(alias = "GSK_PORTER_DUFF_DEST")]
1416    Dest,
1417    #[doc(alias = "GSK_PORTER_DUFF_SOURCE_OVER_DEST")]
1418    SourceOverDest,
1419    #[doc(alias = "GSK_PORTER_DUFF_DEST_OVER_SOURCE")]
1420    DestOverSource,
1421    #[doc(alias = "GSK_PORTER_DUFF_SOURCE_IN_DEST")]
1422    SourceInDest,
1423    #[doc(alias = "GSK_PORTER_DUFF_DEST_IN_SOURCE")]
1424    DestInSource,
1425    #[doc(alias = "GSK_PORTER_DUFF_SOURCE_OUT_DEST")]
1426    SourceOutDest,
1427    #[doc(alias = "GSK_PORTER_DUFF_DEST_OUT_SOURCE")]
1428    DestOutSource,
1429    #[doc(alias = "GSK_PORTER_DUFF_SOURCE_ATOP_DEST")]
1430    SourceAtopDest,
1431    #[doc(alias = "GSK_PORTER_DUFF_DEST_ATOP_SOURCE")]
1432    DestAtopSource,
1433    #[doc(alias = "GSK_PORTER_DUFF_XOR")]
1434    Xor,
1435    #[doc(alias = "GSK_PORTER_DUFF_CLEAR")]
1436    Clear,
1437    #[doc(hidden)]
1438    __Unknown(i32),
1439}
1440
1441#[cfg(feature = "v4_22")]
1442#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1443#[doc(hidden)]
1444impl IntoGlib for PorterDuff {
1445    type GlibType = ffi::GskPorterDuff;
1446
1447    #[inline]
1448    fn into_glib(self) -> ffi::GskPorterDuff {
1449        match self {
1450            Self::Source => ffi::GSK_PORTER_DUFF_SOURCE,
1451            Self::Dest => ffi::GSK_PORTER_DUFF_DEST,
1452            Self::SourceOverDest => ffi::GSK_PORTER_DUFF_SOURCE_OVER_DEST,
1453            Self::DestOverSource => ffi::GSK_PORTER_DUFF_DEST_OVER_SOURCE,
1454            Self::SourceInDest => ffi::GSK_PORTER_DUFF_SOURCE_IN_DEST,
1455            Self::DestInSource => ffi::GSK_PORTER_DUFF_DEST_IN_SOURCE,
1456            Self::SourceOutDest => ffi::GSK_PORTER_DUFF_SOURCE_OUT_DEST,
1457            Self::DestOutSource => ffi::GSK_PORTER_DUFF_DEST_OUT_SOURCE,
1458            Self::SourceAtopDest => ffi::GSK_PORTER_DUFF_SOURCE_ATOP_DEST,
1459            Self::DestAtopSource => ffi::GSK_PORTER_DUFF_DEST_ATOP_SOURCE,
1460            Self::Xor => ffi::GSK_PORTER_DUFF_XOR,
1461            Self::Clear => ffi::GSK_PORTER_DUFF_CLEAR,
1462            Self::__Unknown(value) => value,
1463        }
1464    }
1465}
1466
1467#[cfg(feature = "v4_22")]
1468#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1469#[doc(hidden)]
1470impl FromGlib<ffi::GskPorterDuff> for PorterDuff {
1471    #[inline]
1472    unsafe fn from_glib(value: ffi::GskPorterDuff) -> Self {
1473        skip_assert_initialized!();
1474
1475        match value {
1476            ffi::GSK_PORTER_DUFF_SOURCE => Self::Source,
1477            ffi::GSK_PORTER_DUFF_DEST => Self::Dest,
1478            ffi::GSK_PORTER_DUFF_SOURCE_OVER_DEST => Self::SourceOverDest,
1479            ffi::GSK_PORTER_DUFF_DEST_OVER_SOURCE => Self::DestOverSource,
1480            ffi::GSK_PORTER_DUFF_SOURCE_IN_DEST => Self::SourceInDest,
1481            ffi::GSK_PORTER_DUFF_DEST_IN_SOURCE => Self::DestInSource,
1482            ffi::GSK_PORTER_DUFF_SOURCE_OUT_DEST => Self::SourceOutDest,
1483            ffi::GSK_PORTER_DUFF_DEST_OUT_SOURCE => Self::DestOutSource,
1484            ffi::GSK_PORTER_DUFF_SOURCE_ATOP_DEST => Self::SourceAtopDest,
1485            ffi::GSK_PORTER_DUFF_DEST_ATOP_SOURCE => Self::DestAtopSource,
1486            ffi::GSK_PORTER_DUFF_XOR => Self::Xor,
1487            ffi::GSK_PORTER_DUFF_CLEAR => Self::Clear,
1488            value => Self::__Unknown(value),
1489        }
1490    }
1491}
1492
1493#[cfg(feature = "v4_22")]
1494#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1495impl StaticType for PorterDuff {
1496    #[inline]
1497    #[doc(alias = "gsk_porter_duff_get_type")]
1498    fn static_type() -> glib::Type {
1499        unsafe { from_glib(ffi::gsk_porter_duff_get_type()) }
1500    }
1501}
1502
1503#[cfg(feature = "v4_22")]
1504#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1505impl glib::HasParamSpec for PorterDuff {
1506    type ParamSpec = glib::ParamSpecEnum;
1507    type SetValue = Self;
1508    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1509
1510    fn param_spec_builder() -> Self::BuilderFn {
1511        Self::ParamSpec::builder_with_default
1512    }
1513}
1514
1515#[cfg(feature = "v4_22")]
1516#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1517impl glib::value::ValueType for PorterDuff {
1518    type Type = Self;
1519}
1520
1521#[cfg(feature = "v4_22")]
1522#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1523unsafe impl<'a> glib::value::FromValue<'a> for PorterDuff {
1524    type Checker = glib::value::GenericValueTypeChecker<Self>;
1525
1526    #[inline]
1527    unsafe fn from_value(value: &'a glib::Value) -> Self {
1528        skip_assert_initialized!();
1529        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1530    }
1531}
1532
1533#[cfg(feature = "v4_22")]
1534#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1535impl ToValue for PorterDuff {
1536    #[inline]
1537    fn to_value(&self) -> glib::Value {
1538        let mut value = glib::Value::for_value_type::<Self>();
1539        unsafe {
1540            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1541        }
1542        value
1543    }
1544
1545    #[inline]
1546    fn value_type(&self) -> glib::Type {
1547        Self::static_type()
1548    }
1549}
1550
1551#[cfg(feature = "v4_22")]
1552#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1553impl From<PorterDuff> for glib::Value {
1554    #[inline]
1555    fn from(v: PorterDuff) -> Self {
1556        skip_assert_initialized!();
1557        ToValue::to_value(&v)
1558    }
1559}
1560
1561/// The type of a node determines what the node is rendering.
1562#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1563#[non_exhaustive]
1564#[doc(alias = "GskRenderNodeType")]
1565pub enum RenderNodeType {
1566    /// Error type. No node will ever have this type.
1567    #[doc(alias = "GSK_NOT_A_RENDER_NODE")]
1568    NotARenderNode,
1569    /// A node containing a stack of children
1570    #[doc(alias = "GSK_CONTAINER_NODE")]
1571    ContainerNode,
1572    /// A node drawing a [`cairo::Surface`][crate::cairo::Surface]
1573    #[doc(alias = "GSK_CAIRO_NODE")]
1574    CairoNode,
1575    /// A node drawing a single color rectangle
1576    #[doc(alias = "GSK_COLOR_NODE")]
1577    ColorNode,
1578    /// A node drawing a linear gradient
1579    #[doc(alias = "GSK_LINEAR_GRADIENT_NODE")]
1580    LinearGradientNode,
1581    /// A node drawing a repeating linear gradient
1582    #[doc(alias = "GSK_REPEATING_LINEAR_GRADIENT_NODE")]
1583    RepeatingLinearGradientNode,
1584    /// A node drawing a radial gradient
1585    #[doc(alias = "GSK_RADIAL_GRADIENT_NODE")]
1586    RadialGradientNode,
1587    /// A node drawing a repeating radial gradient
1588    #[doc(alias = "GSK_REPEATING_RADIAL_GRADIENT_NODE")]
1589    RepeatingRadialGradientNode,
1590    /// A node drawing a conic gradient
1591    #[doc(alias = "GSK_CONIC_GRADIENT_NODE")]
1592    ConicGradientNode,
1593    /// A node stroking a border around an area
1594    #[doc(alias = "GSK_BORDER_NODE")]
1595    BorderNode,
1596    /// A node drawing a [`gdk::Texture`][crate::gdk::Texture]
1597    #[doc(alias = "GSK_TEXTURE_NODE")]
1598    TextureNode,
1599    /// A node drawing an inset shadow
1600    #[doc(alias = "GSK_INSET_SHADOW_NODE")]
1601    InsetShadowNode,
1602    /// A node drawing an outset shadow
1603    #[doc(alias = "GSK_OUTSET_SHADOW_NODE")]
1604    OutsetShadowNode,
1605    /// A node that renders its child after applying a matrix transform
1606    #[doc(alias = "GSK_TRANSFORM_NODE")]
1607    TransformNode,
1608    /// A node that changes the opacity of its child
1609    #[doc(alias = "GSK_OPACITY_NODE")]
1610    OpacityNode,
1611    /// A node that applies a color matrix to every pixel
1612    #[doc(alias = "GSK_COLOR_MATRIX_NODE")]
1613    ColorMatrixNode,
1614    /// A node that repeats the child's contents
1615    #[doc(alias = "GSK_REPEAT_NODE")]
1616    RepeatNode,
1617    /// A node that clips its child to a rectangular area
1618    #[doc(alias = "GSK_CLIP_NODE")]
1619    ClipNode,
1620    /// A node that clips its child to a rounded rectangle
1621    #[doc(alias = "GSK_ROUNDED_CLIP_NODE")]
1622    RoundedClipNode,
1623    /// A node that draws a shadow below its child
1624    #[doc(alias = "GSK_SHADOW_NODE")]
1625    ShadowNode,
1626    /// A node that blends two children together
1627    #[doc(alias = "GSK_BLEND_NODE")]
1628    BlendNode,
1629    /// A node that cross-fades between two children
1630    #[doc(alias = "GSK_CROSS_FADE_NODE")]
1631    CrossFadeNode,
1632    /// A node containing a glyph string
1633    #[doc(alias = "GSK_TEXT_NODE")]
1634    TextNode,
1635    /// A node that applies a blur
1636    #[doc(alias = "GSK_BLUR_NODE")]
1637    BlurNode,
1638    /// Debug information that does not affect the rendering
1639    #[doc(alias = "GSK_DEBUG_NODE")]
1640    DebugNode,
1641    /// A node that uses OpenGL fragment shaders to render
1642    #[doc(alias = "GSK_GL_SHADER_NODE")]
1643    GlShaderNode,
1644    /// A node drawing a [`gdk::Texture`][crate::gdk::Texture] scaled and filtered.
1645    #[cfg(feature = "v4_10")]
1646    #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
1647    #[doc(alias = "GSK_TEXTURE_SCALE_NODE")]
1648    TextureScaleNode,
1649    /// A node that masks one child with another.
1650    #[cfg(feature = "v4_10")]
1651    #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
1652    #[doc(alias = "GSK_MASK_NODE")]
1653    MaskNode,
1654    /// A node that fills a path.
1655    #[cfg(feature = "v4_14")]
1656    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1657    #[doc(alias = "GSK_FILL_NODE")]
1658    FillNode,
1659    /// A node that strokes a path.
1660    #[cfg(feature = "v4_14")]
1661    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1662    #[doc(alias = "GSK_STROKE_NODE")]
1663    StrokeNode,
1664    /// A node that possibly redirects part of the scene graph to a subsurface.
1665    #[cfg(feature = "v4_14")]
1666    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1667    #[doc(alias = "GSK_SUBSURFACE_NODE")]
1668    SubsurfaceNode,
1669    /// A node that applies some function to each color component.
1670    #[cfg(feature = "v4_20")]
1671    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1672    #[doc(alias = "GSK_COMPONENT_TRANSFER_NODE")]
1673    ComponentTransferNode,
1674    /// A node that copies the rendering canvas to be pasted later.
1675    #[cfg(feature = "v4_22")]
1676    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1677    #[doc(alias = "GSK_COPY_NODE")]
1678    CopyNode,
1679    /// A node that pastes a previously copied canvas.
1680    #[cfg(feature = "v4_22")]
1681    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1682    #[doc(alias = "GSK_PASTE_NODE")]
1683    PasteNode,
1684    /// A node that combines a child with the background using Porter/Duff
1685    /// operations.
1686    #[cfg(feature = "v4_22")]
1687    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1688    #[doc(alias = "GSK_COMPOSITE_NODE")]
1689    CompositeNode,
1690    /// A node that isolated content of its child from previous content.
1691    #[cfg(feature = "v4_22")]
1692    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1693    #[doc(alias = "GSK_ISOLATION_NODE")]
1694    IsolationNode,
1695    /// A node that displaces content according to some mask.
1696    #[cfg(feature = "v4_22")]
1697    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1698    #[doc(alias = "GSK_DISPLACEMENT_NODE")]
1699    DisplacementNode,
1700    /// A node that combines two child nodes in an arithmetic way.
1701    #[cfg(feature = "v4_22")]
1702    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
1703    #[doc(alias = "GSK_ARITHMETIC_NODE")]
1704    ArithmeticNode,
1705    #[doc(hidden)]
1706    __Unknown(i32),
1707}
1708
1709#[doc(hidden)]
1710impl IntoGlib for RenderNodeType {
1711    type GlibType = ffi::GskRenderNodeType;
1712
1713    fn into_glib(self) -> ffi::GskRenderNodeType {
1714        match self {
1715            Self::NotARenderNode => ffi::GSK_NOT_A_RENDER_NODE,
1716            Self::ContainerNode => ffi::GSK_CONTAINER_NODE,
1717            Self::CairoNode => ffi::GSK_CAIRO_NODE,
1718            Self::ColorNode => ffi::GSK_COLOR_NODE,
1719            Self::LinearGradientNode => ffi::GSK_LINEAR_GRADIENT_NODE,
1720            Self::RepeatingLinearGradientNode => ffi::GSK_REPEATING_LINEAR_GRADIENT_NODE,
1721            Self::RadialGradientNode => ffi::GSK_RADIAL_GRADIENT_NODE,
1722            Self::RepeatingRadialGradientNode => ffi::GSK_REPEATING_RADIAL_GRADIENT_NODE,
1723            Self::ConicGradientNode => ffi::GSK_CONIC_GRADIENT_NODE,
1724            Self::BorderNode => ffi::GSK_BORDER_NODE,
1725            Self::TextureNode => ffi::GSK_TEXTURE_NODE,
1726            Self::InsetShadowNode => ffi::GSK_INSET_SHADOW_NODE,
1727            Self::OutsetShadowNode => ffi::GSK_OUTSET_SHADOW_NODE,
1728            Self::TransformNode => ffi::GSK_TRANSFORM_NODE,
1729            Self::OpacityNode => ffi::GSK_OPACITY_NODE,
1730            Self::ColorMatrixNode => ffi::GSK_COLOR_MATRIX_NODE,
1731            Self::RepeatNode => ffi::GSK_REPEAT_NODE,
1732            Self::ClipNode => ffi::GSK_CLIP_NODE,
1733            Self::RoundedClipNode => ffi::GSK_ROUNDED_CLIP_NODE,
1734            Self::ShadowNode => ffi::GSK_SHADOW_NODE,
1735            Self::BlendNode => ffi::GSK_BLEND_NODE,
1736            Self::CrossFadeNode => ffi::GSK_CROSS_FADE_NODE,
1737            Self::TextNode => ffi::GSK_TEXT_NODE,
1738            Self::BlurNode => ffi::GSK_BLUR_NODE,
1739            Self::DebugNode => ffi::GSK_DEBUG_NODE,
1740            Self::GlShaderNode => ffi::GSK_GL_SHADER_NODE,
1741            #[cfg(feature = "v4_10")]
1742            Self::TextureScaleNode => ffi::GSK_TEXTURE_SCALE_NODE,
1743            #[cfg(feature = "v4_10")]
1744            Self::MaskNode => ffi::GSK_MASK_NODE,
1745            #[cfg(feature = "v4_14")]
1746            Self::FillNode => ffi::GSK_FILL_NODE,
1747            #[cfg(feature = "v4_14")]
1748            Self::StrokeNode => ffi::GSK_STROKE_NODE,
1749            #[cfg(feature = "v4_14")]
1750            Self::SubsurfaceNode => ffi::GSK_SUBSURFACE_NODE,
1751            #[cfg(feature = "v4_20")]
1752            Self::ComponentTransferNode => ffi::GSK_COMPONENT_TRANSFER_NODE,
1753            #[cfg(feature = "v4_22")]
1754            Self::CopyNode => ffi::GSK_COPY_NODE,
1755            #[cfg(feature = "v4_22")]
1756            Self::PasteNode => ffi::GSK_PASTE_NODE,
1757            #[cfg(feature = "v4_22")]
1758            Self::CompositeNode => ffi::GSK_COMPOSITE_NODE,
1759            #[cfg(feature = "v4_22")]
1760            Self::IsolationNode => ffi::GSK_ISOLATION_NODE,
1761            #[cfg(feature = "v4_22")]
1762            Self::DisplacementNode => ffi::GSK_DISPLACEMENT_NODE,
1763            #[cfg(feature = "v4_22")]
1764            Self::ArithmeticNode => ffi::GSK_ARITHMETIC_NODE,
1765            Self::__Unknown(value) => value,
1766        }
1767    }
1768}
1769
1770#[doc(hidden)]
1771impl FromGlib<ffi::GskRenderNodeType> for RenderNodeType {
1772    unsafe fn from_glib(value: ffi::GskRenderNodeType) -> Self {
1773        skip_assert_initialized!();
1774
1775        match value {
1776            ffi::GSK_NOT_A_RENDER_NODE => Self::NotARenderNode,
1777            ffi::GSK_CONTAINER_NODE => Self::ContainerNode,
1778            ffi::GSK_CAIRO_NODE => Self::CairoNode,
1779            ffi::GSK_COLOR_NODE => Self::ColorNode,
1780            ffi::GSK_LINEAR_GRADIENT_NODE => Self::LinearGradientNode,
1781            ffi::GSK_REPEATING_LINEAR_GRADIENT_NODE => Self::RepeatingLinearGradientNode,
1782            ffi::GSK_RADIAL_GRADIENT_NODE => Self::RadialGradientNode,
1783            ffi::GSK_REPEATING_RADIAL_GRADIENT_NODE => Self::RepeatingRadialGradientNode,
1784            ffi::GSK_CONIC_GRADIENT_NODE => Self::ConicGradientNode,
1785            ffi::GSK_BORDER_NODE => Self::BorderNode,
1786            ffi::GSK_TEXTURE_NODE => Self::TextureNode,
1787            ffi::GSK_INSET_SHADOW_NODE => Self::InsetShadowNode,
1788            ffi::GSK_OUTSET_SHADOW_NODE => Self::OutsetShadowNode,
1789            ffi::GSK_TRANSFORM_NODE => Self::TransformNode,
1790            ffi::GSK_OPACITY_NODE => Self::OpacityNode,
1791            ffi::GSK_COLOR_MATRIX_NODE => Self::ColorMatrixNode,
1792            ffi::GSK_REPEAT_NODE => Self::RepeatNode,
1793            ffi::GSK_CLIP_NODE => Self::ClipNode,
1794            ffi::GSK_ROUNDED_CLIP_NODE => Self::RoundedClipNode,
1795            ffi::GSK_SHADOW_NODE => Self::ShadowNode,
1796            ffi::GSK_BLEND_NODE => Self::BlendNode,
1797            ffi::GSK_CROSS_FADE_NODE => Self::CrossFadeNode,
1798            ffi::GSK_TEXT_NODE => Self::TextNode,
1799            ffi::GSK_BLUR_NODE => Self::BlurNode,
1800            ffi::GSK_DEBUG_NODE => Self::DebugNode,
1801            ffi::GSK_GL_SHADER_NODE => Self::GlShaderNode,
1802            #[cfg(feature = "v4_10")]
1803            ffi::GSK_TEXTURE_SCALE_NODE => Self::TextureScaleNode,
1804            #[cfg(feature = "v4_10")]
1805            ffi::GSK_MASK_NODE => Self::MaskNode,
1806            #[cfg(feature = "v4_14")]
1807            ffi::GSK_FILL_NODE => Self::FillNode,
1808            #[cfg(feature = "v4_14")]
1809            ffi::GSK_STROKE_NODE => Self::StrokeNode,
1810            #[cfg(feature = "v4_14")]
1811            ffi::GSK_SUBSURFACE_NODE => Self::SubsurfaceNode,
1812            #[cfg(feature = "v4_20")]
1813            ffi::GSK_COMPONENT_TRANSFER_NODE => Self::ComponentTransferNode,
1814            #[cfg(feature = "v4_22")]
1815            ffi::GSK_COPY_NODE => Self::CopyNode,
1816            #[cfg(feature = "v4_22")]
1817            ffi::GSK_PASTE_NODE => Self::PasteNode,
1818            #[cfg(feature = "v4_22")]
1819            ffi::GSK_COMPOSITE_NODE => Self::CompositeNode,
1820            #[cfg(feature = "v4_22")]
1821            ffi::GSK_ISOLATION_NODE => Self::IsolationNode,
1822            #[cfg(feature = "v4_22")]
1823            ffi::GSK_DISPLACEMENT_NODE => Self::DisplacementNode,
1824            #[cfg(feature = "v4_22")]
1825            ffi::GSK_ARITHMETIC_NODE => Self::ArithmeticNode,
1826            value => Self::__Unknown(value),
1827        }
1828    }
1829}
1830
1831impl StaticType for RenderNodeType {
1832    #[inline]
1833    #[doc(alias = "gsk_render_node_type_get_type")]
1834    fn static_type() -> glib::Type {
1835        unsafe { from_glib(ffi::gsk_render_node_type_get_type()) }
1836    }
1837}
1838
1839impl glib::HasParamSpec for RenderNodeType {
1840    type ParamSpec = glib::ParamSpecEnum;
1841    type SetValue = Self;
1842    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1843
1844    fn param_spec_builder() -> Self::BuilderFn {
1845        Self::ParamSpec::builder_with_default
1846    }
1847}
1848
1849impl glib::value::ValueType for RenderNodeType {
1850    type Type = Self;
1851}
1852
1853unsafe impl<'a> glib::value::FromValue<'a> for RenderNodeType {
1854    type Checker = glib::value::GenericValueTypeChecker<Self>;
1855
1856    #[inline]
1857    unsafe fn from_value(value: &'a glib::Value) -> Self {
1858        skip_assert_initialized!();
1859        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1860    }
1861}
1862
1863impl ToValue for RenderNodeType {
1864    #[inline]
1865    fn to_value(&self) -> glib::Value {
1866        let mut value = glib::Value::for_value_type::<Self>();
1867        unsafe {
1868            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1869        }
1870        value
1871    }
1872
1873    #[inline]
1874    fn value_type(&self) -> glib::Type {
1875        Self::static_type()
1876    }
1877}
1878
1879impl From<RenderNodeType> for glib::Value {
1880    #[inline]
1881    fn from(v: RenderNodeType) -> Self {
1882        skip_assert_initialized!();
1883        ToValue::to_value(&v)
1884    }
1885}
1886
1887/// The filters used when scaling texture data.
1888///
1889/// The actual implementation of each filter is deferred to the
1890/// rendering pipeline.
1891#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1892#[non_exhaustive]
1893#[doc(alias = "GskScalingFilter")]
1894pub enum ScalingFilter {
1895    /// linear interpolation filter
1896    #[doc(alias = "GSK_SCALING_FILTER_LINEAR")]
1897    Linear,
1898    /// nearest neighbor interpolation filter
1899    #[doc(alias = "GSK_SCALING_FILTER_NEAREST")]
1900    Nearest,
1901    /// linear interpolation along each axis,
1902    ///   plus mipmap generation, with linear interpolation along the mipmap
1903    ///   levels
1904    #[doc(alias = "GSK_SCALING_FILTER_TRILINEAR")]
1905    Trilinear,
1906    #[doc(hidden)]
1907    __Unknown(i32),
1908}
1909
1910#[doc(hidden)]
1911impl IntoGlib for ScalingFilter {
1912    type GlibType = ffi::GskScalingFilter;
1913
1914    #[inline]
1915    fn into_glib(self) -> ffi::GskScalingFilter {
1916        match self {
1917            Self::Linear => ffi::GSK_SCALING_FILTER_LINEAR,
1918            Self::Nearest => ffi::GSK_SCALING_FILTER_NEAREST,
1919            Self::Trilinear => ffi::GSK_SCALING_FILTER_TRILINEAR,
1920            Self::__Unknown(value) => value,
1921        }
1922    }
1923}
1924
1925#[doc(hidden)]
1926impl FromGlib<ffi::GskScalingFilter> for ScalingFilter {
1927    #[inline]
1928    unsafe fn from_glib(value: ffi::GskScalingFilter) -> Self {
1929        skip_assert_initialized!();
1930
1931        match value {
1932            ffi::GSK_SCALING_FILTER_LINEAR => Self::Linear,
1933            ffi::GSK_SCALING_FILTER_NEAREST => Self::Nearest,
1934            ffi::GSK_SCALING_FILTER_TRILINEAR => Self::Trilinear,
1935            value => Self::__Unknown(value),
1936        }
1937    }
1938}
1939
1940impl StaticType for ScalingFilter {
1941    #[inline]
1942    #[doc(alias = "gsk_scaling_filter_get_type")]
1943    fn static_type() -> glib::Type {
1944        unsafe { from_glib(ffi::gsk_scaling_filter_get_type()) }
1945    }
1946}
1947
1948impl glib::HasParamSpec for ScalingFilter {
1949    type ParamSpec = glib::ParamSpecEnum;
1950    type SetValue = Self;
1951    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1952
1953    fn param_spec_builder() -> Self::BuilderFn {
1954        Self::ParamSpec::builder_with_default
1955    }
1956}
1957
1958impl glib::value::ValueType for ScalingFilter {
1959    type Type = Self;
1960}
1961
1962unsafe impl<'a> glib::value::FromValue<'a> for ScalingFilter {
1963    type Checker = glib::value::GenericValueTypeChecker<Self>;
1964
1965    #[inline]
1966    unsafe fn from_value(value: &'a glib::Value) -> Self {
1967        skip_assert_initialized!();
1968        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1969    }
1970}
1971
1972impl ToValue for ScalingFilter {
1973    #[inline]
1974    fn to_value(&self) -> glib::Value {
1975        let mut value = glib::Value::for_value_type::<Self>();
1976        unsafe {
1977            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1978        }
1979        value
1980    }
1981
1982    #[inline]
1983    fn value_type(&self) -> glib::Type {
1984        Self::static_type()
1985    }
1986}
1987
1988impl From<ScalingFilter> for glib::Value {
1989    #[inline]
1990    fn from(v: ScalingFilter) -> Self {
1991        skip_assert_initialized!();
1992        ToValue::to_value(&v)
1993    }
1994}
1995
1996/// Errors that can happen during (de)serialization.
1997#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1998#[non_exhaustive]
1999#[doc(alias = "GskSerializationError")]
2000pub enum SerializationError {
2001    /// The format can not be identified
2002    #[doc(alias = "GSK_SERIALIZATION_UNSUPPORTED_FORMAT")]
2003    UnsupportedFormat,
2004    /// The version of the data is not
2005    ///   understood
2006    #[doc(alias = "GSK_SERIALIZATION_UNSUPPORTED_VERSION")]
2007    UnsupportedVersion,
2008    /// The given data may not exist in
2009    ///   a proper serialization
2010    #[doc(alias = "GSK_SERIALIZATION_INVALID_DATA")]
2011    InvalidData,
2012    #[doc(hidden)]
2013    __Unknown(i32),
2014}
2015
2016#[doc(hidden)]
2017impl IntoGlib for SerializationError {
2018    type GlibType = ffi::GskSerializationError;
2019
2020    #[inline]
2021    fn into_glib(self) -> ffi::GskSerializationError {
2022        match self {
2023            Self::UnsupportedFormat => ffi::GSK_SERIALIZATION_UNSUPPORTED_FORMAT,
2024            Self::UnsupportedVersion => ffi::GSK_SERIALIZATION_UNSUPPORTED_VERSION,
2025            Self::InvalidData => ffi::GSK_SERIALIZATION_INVALID_DATA,
2026            Self::__Unknown(value) => value,
2027        }
2028    }
2029}
2030
2031#[doc(hidden)]
2032impl FromGlib<ffi::GskSerializationError> for SerializationError {
2033    #[inline]
2034    unsafe fn from_glib(value: ffi::GskSerializationError) -> Self {
2035        skip_assert_initialized!();
2036
2037        match value {
2038            ffi::GSK_SERIALIZATION_UNSUPPORTED_FORMAT => Self::UnsupportedFormat,
2039            ffi::GSK_SERIALIZATION_UNSUPPORTED_VERSION => Self::UnsupportedVersion,
2040            ffi::GSK_SERIALIZATION_INVALID_DATA => Self::InvalidData,
2041            value => Self::__Unknown(value),
2042        }
2043    }
2044}
2045
2046impl glib::error::ErrorDomain for SerializationError {
2047    #[inline]
2048    fn domain() -> glib::Quark {
2049        skip_assert_initialized!();
2050
2051        unsafe { from_glib(ffi::gsk_serialization_error_quark()) }
2052    }
2053
2054    #[inline]
2055    fn code(self) -> i32 {
2056        self.into_glib()
2057    }
2058
2059    #[inline]
2060    #[allow(clippy::match_single_binding)]
2061    fn from(code: i32) -> Option<Self> {
2062        skip_assert_initialized!();
2063        match unsafe { from_glib(code) } {
2064            value => Some(value),
2065        }
2066    }
2067}
2068
2069impl StaticType for SerializationError {
2070    #[inline]
2071    #[doc(alias = "gsk_serialization_error_get_type")]
2072    fn static_type() -> glib::Type {
2073        unsafe { from_glib(ffi::gsk_serialization_error_get_type()) }
2074    }
2075}
2076
2077impl glib::HasParamSpec for SerializationError {
2078    type ParamSpec = glib::ParamSpecEnum;
2079    type SetValue = Self;
2080    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2081
2082    fn param_spec_builder() -> Self::BuilderFn {
2083        Self::ParamSpec::builder_with_default
2084    }
2085}
2086
2087impl glib::value::ValueType for SerializationError {
2088    type Type = Self;
2089}
2090
2091unsafe impl<'a> glib::value::FromValue<'a> for SerializationError {
2092    type Checker = glib::value::GenericValueTypeChecker<Self>;
2093
2094    #[inline]
2095    unsafe fn from_value(value: &'a glib::Value) -> Self {
2096        skip_assert_initialized!();
2097        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2098    }
2099}
2100
2101impl ToValue for SerializationError {
2102    #[inline]
2103    fn to_value(&self) -> glib::Value {
2104        let mut value = glib::Value::for_value_type::<Self>();
2105        unsafe {
2106            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2107        }
2108        value
2109    }
2110
2111    #[inline]
2112    fn value_type(&self) -> glib::Type {
2113        Self::static_type()
2114    }
2115}
2116
2117impl From<SerializationError> for glib::Value {
2118    #[inline]
2119    fn from(v: SerializationError) -> Self {
2120        skip_assert_initialized!();
2121        ToValue::to_value(&v)
2122    }
2123}
2124
2125/// The categories of matrices relevant for GSK and GTK.
2126///
2127/// Note that any category includes matrices of all later categories.
2128/// So if you want to for example check if a matrix is a 2D matrix,
2129/// `category >= GSK_TRANSFORM_CATEGORY_2D` is the way to do this.
2130///
2131/// Also keep in mind that rounding errors may cause matrices to not
2132/// conform to their categories. Otherwise, matrix operations done via
2133/// multiplication will not worsen categories. So for the matrix
2134/// multiplication `C = A * B`, `category(C) = MIN (category(A), category(B))`.
2135#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2136#[non_exhaustive]
2137#[doc(alias = "GskTransformCategory")]
2138pub enum TransformCategory {
2139    /// The category of the matrix has not been
2140    ///   determined.
2141    #[doc(alias = "GSK_TRANSFORM_CATEGORY_UNKNOWN")]
2142    Unknown,
2143    /// Analyzing the matrix concluded that it does
2144    ///   not fit in any other category.
2145    #[doc(alias = "GSK_TRANSFORM_CATEGORY_ANY")]
2146    Any,
2147    /// The matrix is a 3D matrix. This means that
2148    ///   the w column (the last column) has the values (0, 0, 0, 1).
2149    #[doc(alias = "GSK_TRANSFORM_CATEGORY_3D")]
2150    _3d,
2151    /// The matrix is a 2D matrix. This is equivalent
2152    ///   to graphene_matrix_is_2d() returning [`true`]. In particular, this
2153    ///   means that Cairo can deal with the matrix.
2154    #[doc(alias = "GSK_TRANSFORM_CATEGORY_2D")]
2155    _2d,
2156    /// The matrix is a combination of 2D scale
2157    ///   and 2D translation operations. In particular, this means that any
2158    ///   rectangle can be transformed exactly using this matrix.
2159    #[doc(alias = "GSK_TRANSFORM_CATEGORY_2D_AFFINE")]
2160    _2dAffine,
2161    /// The matrix is a 2D translation.
2162    #[doc(alias = "GSK_TRANSFORM_CATEGORY_2D_TRANSLATE")]
2163    _2dTranslate,
2164    /// The matrix is the identity matrix.
2165    #[doc(alias = "GSK_TRANSFORM_CATEGORY_IDENTITY")]
2166    Identity,
2167    #[doc(hidden)]
2168    __Unknown(i32),
2169}
2170
2171#[doc(hidden)]
2172impl IntoGlib for TransformCategory {
2173    type GlibType = ffi::GskTransformCategory;
2174
2175    #[inline]
2176    fn into_glib(self) -> ffi::GskTransformCategory {
2177        match self {
2178            Self::Unknown => ffi::GSK_TRANSFORM_CATEGORY_UNKNOWN,
2179            Self::Any => ffi::GSK_TRANSFORM_CATEGORY_ANY,
2180            Self::_3d => ffi::GSK_TRANSFORM_CATEGORY_3D,
2181            Self::_2d => ffi::GSK_TRANSFORM_CATEGORY_2D,
2182            Self::_2dAffine => ffi::GSK_TRANSFORM_CATEGORY_2D_AFFINE,
2183            Self::_2dTranslate => ffi::GSK_TRANSFORM_CATEGORY_2D_TRANSLATE,
2184            Self::Identity => ffi::GSK_TRANSFORM_CATEGORY_IDENTITY,
2185            Self::__Unknown(value) => value,
2186        }
2187    }
2188}
2189
2190#[doc(hidden)]
2191impl FromGlib<ffi::GskTransformCategory> for TransformCategory {
2192    #[inline]
2193    unsafe fn from_glib(value: ffi::GskTransformCategory) -> Self {
2194        skip_assert_initialized!();
2195
2196        match value {
2197            ffi::GSK_TRANSFORM_CATEGORY_UNKNOWN => Self::Unknown,
2198            ffi::GSK_TRANSFORM_CATEGORY_ANY => Self::Any,
2199            ffi::GSK_TRANSFORM_CATEGORY_3D => Self::_3d,
2200            ffi::GSK_TRANSFORM_CATEGORY_2D => Self::_2d,
2201            ffi::GSK_TRANSFORM_CATEGORY_2D_AFFINE => Self::_2dAffine,
2202            ffi::GSK_TRANSFORM_CATEGORY_2D_TRANSLATE => Self::_2dTranslate,
2203            ffi::GSK_TRANSFORM_CATEGORY_IDENTITY => Self::Identity,
2204            value => Self::__Unknown(value),
2205        }
2206    }
2207}
2208
2209impl StaticType for TransformCategory {
2210    #[inline]
2211    #[doc(alias = "gsk_transform_category_get_type")]
2212    fn static_type() -> glib::Type {
2213        unsafe { from_glib(ffi::gsk_transform_category_get_type()) }
2214    }
2215}
2216
2217impl glib::HasParamSpec for TransformCategory {
2218    type ParamSpec = glib::ParamSpecEnum;
2219    type SetValue = Self;
2220    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2221
2222    fn param_spec_builder() -> Self::BuilderFn {
2223        Self::ParamSpec::builder_with_default
2224    }
2225}
2226
2227impl glib::value::ValueType for TransformCategory {
2228    type Type = Self;
2229}
2230
2231unsafe impl<'a> glib::value::FromValue<'a> for TransformCategory {
2232    type Checker = glib::value::GenericValueTypeChecker<Self>;
2233
2234    #[inline]
2235    unsafe fn from_value(value: &'a glib::Value) -> Self {
2236        skip_assert_initialized!();
2237        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2238    }
2239}
2240
2241impl ToValue for TransformCategory {
2242    #[inline]
2243    fn to_value(&self) -> glib::Value {
2244        let mut value = glib::Value::for_value_type::<Self>();
2245        unsafe {
2246            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2247        }
2248        value
2249    }
2250
2251    #[inline]
2252    fn value_type(&self) -> glib::Type {
2253        Self::static_type()
2254    }
2255}
2256
2257impl From<TransformCategory> for glib::Value {
2258    #[inline]
2259    fn from(v: TransformCategory) -> Self {
2260        skip_assert_initialized!();
2261        ToValue::to_value(&v)
2262    }
2263}