Skip to main content

gstreamer_editing_services/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// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::ffi;
7#[cfg(feature = "v1_16")]
8#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
9use glib::GStr;
10use glib::{prelude::*, translate::*};
11
12#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13#[non_exhaustive]
14#[doc(alias = "GESAssetLoadingReturn")]
15pub enum AssetLoadingReturn {
16    /// Indicates that an error occurred
17    #[doc(alias = "GES_ASSET_LOADING_ERROR")]
18    Error,
19    /// Indicates that the loading is being performed
20    /// asynchronously
21    #[doc(alias = "GES_ASSET_LOADING_ASYNC")]
22    Async,
23    /// Indicates that the loading is complete, without
24    /// error
25    #[doc(alias = "GES_ASSET_LOADING_OK")]
26    Ok,
27    #[doc(hidden)]
28    __Unknown(i32),
29}
30
31#[doc(hidden)]
32impl IntoGlib for AssetLoadingReturn {
33    type GlibType = ffi::GESAssetLoadingReturn;
34
35    #[inline]
36    fn into_glib(self) -> ffi::GESAssetLoadingReturn {
37        match self {
38            Self::Error => ffi::GES_ASSET_LOADING_ERROR,
39            Self::Async => ffi::GES_ASSET_LOADING_ASYNC,
40            Self::Ok => ffi::GES_ASSET_LOADING_OK,
41            Self::__Unknown(value) => value,
42        }
43    }
44}
45
46#[doc(hidden)]
47impl FromGlib<ffi::GESAssetLoadingReturn> for AssetLoadingReturn {
48    #[inline]
49    unsafe fn from_glib(value: ffi::GESAssetLoadingReturn) -> Self {
50        skip_assert_initialized!();
51
52        match value {
53            ffi::GES_ASSET_LOADING_ERROR => Self::Error,
54            ffi::GES_ASSET_LOADING_ASYNC => Self::Async,
55            ffi::GES_ASSET_LOADING_OK => Self::Ok,
56            value => Self::__Unknown(value),
57        }
58    }
59}
60
61/// To be used by subclasses only. This indicate how to handle a change in
62/// a child.
63#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
64#[non_exhaustive]
65#[doc(alias = "GESChildrenControlMode")]
66pub enum ChildrenControlMode {
67    #[doc(alias = "GES_CHILDREN_UPDATE")]
68    Update,
69    #[doc(alias = "GES_CHILDREN_IGNORE_NOTIFIES")]
70    IgnoreNotifies,
71    #[doc(alias = "GES_CHILDREN_UPDATE_OFFSETS")]
72    UpdateOffsets,
73    #[doc(alias = "GES_CHILDREN_UPDATE_ALL_VALUES")]
74    UpdateAllValues,
75    #[doc(alias = "GES_CHILDREN_LAST")]
76    Last,
77    #[doc(hidden)]
78    __Unknown(i32),
79}
80
81#[doc(hidden)]
82impl IntoGlib for ChildrenControlMode {
83    type GlibType = ffi::GESChildrenControlMode;
84
85    #[inline]
86    fn into_glib(self) -> ffi::GESChildrenControlMode {
87        match self {
88            Self::Update => ffi::GES_CHILDREN_UPDATE,
89            Self::IgnoreNotifies => ffi::GES_CHILDREN_IGNORE_NOTIFIES,
90            Self::UpdateOffsets => ffi::GES_CHILDREN_UPDATE_OFFSETS,
91            Self::UpdateAllValues => ffi::GES_CHILDREN_UPDATE_ALL_VALUES,
92            Self::Last => ffi::GES_CHILDREN_LAST,
93            Self::__Unknown(value) => value,
94        }
95    }
96}
97
98#[doc(hidden)]
99impl FromGlib<ffi::GESChildrenControlMode> for ChildrenControlMode {
100    #[inline]
101    unsafe fn from_glib(value: ffi::GESChildrenControlMode) -> Self {
102        skip_assert_initialized!();
103
104        match value {
105            ffi::GES_CHILDREN_UPDATE => Self::Update,
106            ffi::GES_CHILDREN_IGNORE_NOTIFIES => Self::IgnoreNotifies,
107            ffi::GES_CHILDREN_UPDATE_OFFSETS => Self::UpdateOffsets,
108            ffi::GES_CHILDREN_UPDATE_ALL_VALUES => Self::UpdateAllValues,
109            ffi::GES_CHILDREN_LAST => Self::Last,
110            value => Self::__Unknown(value),
111        }
112    }
113}
114
115/// The edges of an object contain in a [`Timeline`][crate::Timeline] or [`Track`][crate::Track]
116#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
117#[non_exhaustive]
118#[doc(alias = "GESEdge")]
119pub enum Edge {
120    /// Represents the start of an object.
121    #[doc(alias = "GES_EDGE_START")]
122    Start,
123    /// Represents the end of an object.
124    #[doc(alias = "GES_EDGE_END")]
125    End,
126    /// Represent the fact we are not working with any edge of an
127    ///  object.
128    #[doc(alias = "GES_EDGE_NONE")]
129    None,
130    #[doc(hidden)]
131    __Unknown(i32),
132}
133
134impl Edge {
135    #[cfg(feature = "v1_16")]
136    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
137    pub fn name<'a>(self) -> &'a GStr {
138        unsafe {
139            GStr::from_ptr(
140                ffi::ges_edge_name(self.into_glib())
141                    .as_ref()
142                    .expect("ges_edge_name returned NULL"),
143            )
144        }
145    }
146}
147
148#[cfg(feature = "v1_16")]
149#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
150impl std::fmt::Display for Edge {
151    #[inline]
152    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
153        f.write_str(&self.name())
154    }
155}
156
157#[doc(hidden)]
158impl IntoGlib for Edge {
159    type GlibType = ffi::GESEdge;
160
161    #[inline]
162    fn into_glib(self) -> ffi::GESEdge {
163        match self {
164            Self::Start => ffi::GES_EDGE_START,
165            Self::End => ffi::GES_EDGE_END,
166            Self::None => ffi::GES_EDGE_NONE,
167            Self::__Unknown(value) => value,
168        }
169    }
170}
171
172#[doc(hidden)]
173impl FromGlib<ffi::GESEdge> for Edge {
174    #[inline]
175    unsafe fn from_glib(value: ffi::GESEdge) -> Self {
176        skip_assert_initialized!();
177
178        match value {
179            ffi::GES_EDGE_START => Self::Start,
180            ffi::GES_EDGE_END => Self::End,
181            ffi::GES_EDGE_NONE => Self::None,
182            value => Self::__Unknown(value),
183        }
184    }
185}
186
187impl StaticType for Edge {
188    #[inline]
189    #[doc(alias = "ges_edge_get_type")]
190    fn static_type() -> glib::Type {
191        unsafe { from_glib(ffi::ges_edge_get_type()) }
192    }
193}
194
195impl glib::HasParamSpec for Edge {
196    type ParamSpec = glib::ParamSpecEnum;
197    type SetValue = Self;
198    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
199
200    fn param_spec_builder() -> Self::BuilderFn {
201        Self::ParamSpec::builder_with_default
202    }
203}
204
205impl glib::value::ValueType for Edge {
206    type Type = Self;
207}
208
209unsafe impl<'a> glib::value::FromValue<'a> for Edge {
210    type Checker = glib::value::GenericValueTypeChecker<Self>;
211
212    #[inline]
213    unsafe fn from_value(value: &'a glib::Value) -> Self {
214        skip_assert_initialized!();
215        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
216    }
217}
218
219impl ToValue for Edge {
220    #[inline]
221    fn to_value(&self) -> glib::Value {
222        let mut value = glib::Value::for_value_type::<Self>();
223        unsafe {
224            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
225        }
226        value
227    }
228
229    #[inline]
230    fn value_type(&self) -> glib::Type {
231        Self::static_type()
232    }
233}
234
235impl From<Edge> for glib::Value {
236    #[inline]
237    fn from(v: Edge) -> Self {
238        skip_assert_initialized!();
239        ToValue::to_value(&v)
240    }
241}
242
243/// When a single timeline element is edited within its timeline at some
244/// position, using [`TimelineElementExt::edit()`][crate::prelude::TimelineElementExt::edit()], depending on the edit
245/// mode, its [`start`][struct@crate::TimelineElement#start], [`duration`][struct@crate::TimelineElement#duration] or
246/// [`in-point`][struct@crate::TimelineElement#in-point] will be adjusted accordingly. In addition,
247/// any clips may change [`layer`][struct@crate::Clip#layer].
248///
249/// Each edit can be broken down into a combination of three basic edits:
250///
251/// + MOVE: This moves the start of the element to the edit position.
252/// + START-TRIM: This cuts or grows the start of the element, whilst
253///  maintaining the time at which its internal content appears in the
254///  timeline data output. If the element is made shorter, the data that
255///  appeared at the edit position will still appear in the timeline at
256///  the same time. If the element is made longer, the data that appeared
257///  at the previous start of the element will still appear in the
258///  timeline at the same time.
259/// + END-TRIM: Similar to START-TRIM, but the end of the element is cut or
260///  grown.
261///
262/// In particular, when editing a [`Clip`][crate::Clip]:
263///
264/// + MOVE: This will set the [`start`][struct@crate::TimelineElement#start] of the clip to the
265///  edit position.
266/// + START-TRIM: This will set the [`start`][struct@crate::TimelineElement#start] of the clip
267///  to the edit position. To keep the end time the same, the
268///  [`duration`][struct@crate::TimelineElement#duration] of the clip will be adjusted in the
269///  opposite direction. In addition, the [`in-point`][struct@crate::TimelineElement#in-point] of
270///  the clip will be shifted such that the content that appeared at the
271///  new or previous start time, whichever is latest, still appears at the
272///  same timeline time. For example, if a frame appeared at the start of
273///  the clip, and the start of the clip is reduced, the in-point of the
274///  clip will also reduce such that the frame will appear later within
275///  the clip, but at the same timeline position.
276/// + END-TRIM: This will set the [`duration`][struct@crate::TimelineElement#duration] of the clip
277///  such that its end time will match the edit position.
278///
279/// When editing a [`Group`][crate::Group]:
280///
281/// + MOVE: This will set the [`start`][struct@crate::Group#start] of the clip to the edit
282///  position by shifting all of its children by the same amount. So each
283///  child will maintain their relative positions.
284/// + START-TRIM: If the group is made shorter, this will START-TRIM any
285///  clips under the group that start after the edit position to the same
286///  edit position. If the group is made longer, this will START-TRIM any
287///  clip under the group whose start matches the start of the group to
288///  the same edit position.
289/// + END-TRIM: If the group is made shorter, this will END-TRIM any clips
290///  under the group that end after the edit position to the same edit
291///  position. If the group is made longer, this will END-TRIM any clip
292///  under the group whose end matches the end of the group to the same
293///  edit position.
294///
295/// When editing a [`TrackElement`][crate::TrackElement], if it has a [`Clip`][crate::Clip] parent, this
296/// will be edited instead. Otherwise it is edited in the same way as a
297/// [`Clip`][crate::Clip].
298///
299/// The layer priority of a [`Group`][crate::Group] is the lowest layer priority of any
300/// [`Clip`][crate::Clip] underneath it. When a group is edited to a new layer
301/// priority, it will shift all clips underneath it by the same amount,
302/// such that their relative layers stay the same.
303///
304/// If the [`Timeline`][crate::Timeline] has a [`snapping-distance`][struct@crate::Timeline#snapping-distance], then snapping
305/// may occur for some of the edges of the **main** edited element:
306///
307/// + MOVE: The start or end edge of *any* [`Source`][crate::Source] under the element may
308///  be snapped.
309/// + START-TRIM: The start edge of a [`Source`][crate::Source] whose start edge touches
310///  the start edge of the element may snap.
311/// + END-TRIM: The end edge of a [`Source`][crate::Source] whose end edge touches the end
312///  edge of the element may snap.
313///
314/// These edges may snap with either the start or end edge of *any* other
315/// [`Source`][crate::Source] in the timeline that is not also being moved by the element,
316/// including those in different layers, if they are within the
317/// [`snapping-distance`][struct@crate::Timeline#snapping-distance]. During an edit, only up to one snap can
318/// occur. This will shift the edit position such that the snapped edges
319/// will touch once the edit has completed.
320///
321/// Note that snapping can cause an edit to fail where it would have
322/// otherwise succeeded because it may push the edit position such that the
323/// edit would result in an unsupported timeline configuration. Similarly,
324/// snapping can cause an edit to succeed where it would have otherwise
325/// failed.
326///
327/// For example, in [`Ripple`][Self::Ripple] acting on [`Edge::None`][crate::Edge::None], the
328/// main element is the MOVED toplevel of the edited element. Any source
329/// under the main MOVED toplevel may have its start or end edge snapped.
330/// Note, these sources cannot snap with each other. The edit may also
331/// push other elements, but any sources under these elements cannot snap,
332/// nor can they be snapped with. If a snap does occur, the MOVE of the
333/// toplevel *and* all other elements pushed by the ripple will be shifted
334/// by the same amount such that the snapped edges will touch.
335///
336/// You can also find more explanation about the behaviour of those modes at:
337/// [trim, ripple and roll](http://pitivi.org/manual/trimming.html)
338/// and [clip management](http://pitivi.org/manual/usingclips.html).
339#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
340#[non_exhaustive]
341#[doc(alias = "GESEditMode")]
342pub enum EditMode {
343    /// The element is edited the normal way (default).
344    ///  If acting on the element as a whole ([`Edge::None`][crate::Edge::None]), this will MOVE
345    ///  the element by MOVING its toplevel. When acting on the start of the
346    ///  element ([`Edge::Start`][crate::Edge::Start]), this will only MOVE the element, but not
347    ///  its toplevel parent. This can allow you to move a [`Clip`][crate::Clip] or
348    ///  [`Group`][crate::Group] to a new start time or layer within its container group,
349    ///  without effecting other members of the group. When acting on the end
350    ///  of the element ([`Edge::End`][crate::Edge::End]), this will END-TRIM the element,
351    ///  leaving its toplevel unchanged.
352    #[doc(alias = "GES_EDIT_MODE_NORMAL")]
353    Normal,
354    /// The element is edited in ripple mode: moving
355    ///  itself as well as later elements, keeping their relative times. This
356    ///  edits the element the same as [`Normal`][Self::Normal]. In addition, if
357    ///  acting on the element as a whole, or the start of the element, any
358    ///  toplevel element in the same timeline (including different layers)
359    ///  whose start time is later than the *current* start time of the MOVED
360    ///  element will also be MOVED by the same shift as the edited element.
361    ///  If acting on the end of the element, any toplevel element whose start
362    ///  time is later than the *current* end time of the edited element will
363    ///  also be MOVED by the same shift as the change in the end of the
364    ///  edited element. These additional elements will also be shifted by
365    ///  the same shift in layers as the edited element.
366    #[doc(alias = "GES_EDIT_MODE_RIPPLE")]
367    Ripple,
368    /// The element is edited in roll mode: swapping its
369    ///  content for its neighbour's, or vis versa, in the timeline output.
370    ///  This edits the element the same as [`Trim`][Self::Trim]. In addition,
371    ///  any neighbours are also TRIMMED at their opposite edge to the same
372    ///  timeline position. When acting on the start of the element, a
373    ///  neighbour is any earlier element in the timeline whose end time
374    ///  matches the *current* start time of the edited element. When acting on
375    ///  the end of the element, a neighbour is any later element in the
376    ///  timeline whose start time matches the *current* start time of the
377    ///  edited element. In addition, a neighbour have a [`Source`][crate::Source] at its
378    ///  end/start edge that shares a track with a [`Source`][crate::Source] at the start/end
379    ///  edge of the edited element. Basically, a neighbour is an element that
380    ///  can be extended, or cut, to have its content replace, or be replaced
381    ///  by, the content of the edited element. Acting on the element as a
382    ///  whole ([`Edge::None`][crate::Edge::None]) is not defined. The element can not shift
383    ///  layers under this mode.
384    #[doc(alias = "GES_EDIT_MODE_ROLL")]
385    Roll,
386    /// The element is edited in trim mode. When acting
387    ///  on the start of the element, this will START-TRIM it. When acting on
388    ///  the end of the element, this will END-TRIM it. Acting on the element
389    ///  as a whole ([`Edge::None`][crate::Edge::None]) is not defined.
390    #[doc(alias = "GES_EDIT_MODE_TRIM")]
391    Trim,
392    /// The element is edited in slide mode (not yet
393    ///  implemented): moving the element replacing or consuming content on
394    ///  each end. When acting on the element as a whole, this will MOVE the
395    ///  element, and TRIM any neighbours on either side. A neighbour is
396    ///  defined in the same way as in [`Roll`][Self::Roll], but they may be on
397    ///  either side of the edited elements. Elements at the end with be
398    ///  START-TRIMMED to the new end position of the edited element. Elements
399    ///  at the start will be END-TRIMMED to the new start position of the
400    ///  edited element. Acting on the start or end of the element
401    ///  ([`Edge::Start`][crate::Edge::Start] and [`Edge::End`][crate::Edge::End]) is not defined. The element can
402    ///  not shift layers under this mode.
403    #[doc(alias = "GES_EDIT_MODE_SLIDE")]
404    Slide,
405    #[doc(hidden)]
406    __Unknown(i32),
407}
408
409impl EditMode {
410    #[cfg(feature = "v1_18")]
411    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
412    pub fn name<'a>(self) -> &'a GStr {
413        unsafe {
414            GStr::from_ptr(
415                ffi::ges_edit_mode_name(self.into_glib())
416                    .as_ref()
417                    .expect("ges_edit_mode_name returned NULL"),
418            )
419        }
420    }
421}
422
423#[cfg(feature = "v1_18")]
424#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
425impl std::fmt::Display for EditMode {
426    #[inline]
427    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
428        f.write_str(&self.name())
429    }
430}
431
432#[doc(hidden)]
433impl IntoGlib for EditMode {
434    type GlibType = ffi::GESEditMode;
435
436    #[inline]
437    fn into_glib(self) -> ffi::GESEditMode {
438        match self {
439            Self::Normal => ffi::GES_EDIT_MODE_NORMAL,
440            Self::Ripple => ffi::GES_EDIT_MODE_RIPPLE,
441            Self::Roll => ffi::GES_EDIT_MODE_ROLL,
442            Self::Trim => ffi::GES_EDIT_MODE_TRIM,
443            Self::Slide => ffi::GES_EDIT_MODE_SLIDE,
444            Self::__Unknown(value) => value,
445        }
446    }
447}
448
449#[doc(hidden)]
450impl FromGlib<ffi::GESEditMode> for EditMode {
451    #[inline]
452    unsafe fn from_glib(value: ffi::GESEditMode) -> Self {
453        skip_assert_initialized!();
454
455        match value {
456            ffi::GES_EDIT_MODE_NORMAL => Self::Normal,
457            ffi::GES_EDIT_MODE_RIPPLE => Self::Ripple,
458            ffi::GES_EDIT_MODE_ROLL => Self::Roll,
459            ffi::GES_EDIT_MODE_TRIM => Self::Trim,
460            ffi::GES_EDIT_MODE_SLIDE => Self::Slide,
461            value => Self::__Unknown(value),
462        }
463    }
464}
465
466impl StaticType for EditMode {
467    #[inline]
468    #[doc(alias = "ges_edit_mode_get_type")]
469    fn static_type() -> glib::Type {
470        unsafe { from_glib(ffi::ges_edit_mode_get_type()) }
471    }
472}
473
474impl glib::HasParamSpec for EditMode {
475    type ParamSpec = glib::ParamSpecEnum;
476    type SetValue = Self;
477    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
478
479    fn param_spec_builder() -> Self::BuilderFn {
480        Self::ParamSpec::builder_with_default
481    }
482}
483
484impl glib::value::ValueType for EditMode {
485    type Type = Self;
486}
487
488unsafe impl<'a> glib::value::FromValue<'a> for EditMode {
489    type Checker = glib::value::GenericValueTypeChecker<Self>;
490
491    #[inline]
492    unsafe fn from_value(value: &'a glib::Value) -> Self {
493        skip_assert_initialized!();
494        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
495    }
496}
497
498impl ToValue for EditMode {
499    #[inline]
500    fn to_value(&self) -> glib::Value {
501        let mut value = glib::Value::for_value_type::<Self>();
502        unsafe {
503            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
504        }
505        value
506    }
507
508    #[inline]
509    fn value_type(&self) -> glib::Type {
510        Self::static_type()
511    }
512}
513
514impl From<EditMode> for glib::Value {
515    #[inline]
516    fn from(v: EditMode) -> Self {
517        skip_assert_initialized!();
518        ToValue::to_value(&v)
519    }
520}
521
522#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
523#[non_exhaustive]
524#[doc(alias = "GESError")]
525pub enum Error {
526    /// The ID passed is malformed
527    #[doc(alias = "GES_ERROR_ASSET_WRONG_ID")]
528    AssetWrongId,
529    /// An error happened while loading the asset
530    #[doc(alias = "GES_ERROR_ASSET_LOADING")]
531    AssetLoading,
532    /// The formatted files was malformed
533    #[doc(alias = "GES_ERROR_FORMATTER_MALFORMED_INPUT_FILE")]
534    FormatterMalformedInputFile,
535    /// The frame number is invalid
536    #[doc(alias = "GES_ERROR_INVALID_FRAME_NUMBER")]
537    InvalidFrameNumber,
538    /// The operation would lead to a negative
539    /// `GES_TIMELINE_ELEMENT_LAYER_PRIORITY`. (Since: 1.18)
540    #[doc(alias = "GES_ERROR_NEGATIVE_LAYER")]
541    NegativeLayer,
542    /// The operation would lead to a negative time.
543    /// E.g. for the [`start`][struct@crate::TimelineElement#start] [`duration`][struct@crate::TimelineElement#duration] or
544    /// [`in-point`][struct@crate::TimelineElement#in-point]. (Since: 1.18)
545    #[doc(alias = "GES_ERROR_NEGATIVE_TIME")]
546    NegativeTime,
547    /// Some [`TimelineElement`][crate::TimelineElement] does
548    /// not have a large enough [`max-duration`][struct@crate::TimelineElement#max-duration] to cover the
549    /// desired operation. (Since: 1.18)
550    #[doc(alias = "GES_ERROR_NOT_ENOUGH_INTERNAL_CONTENT")]
551    NotEnoughInternalContent,
552    /// The operation would break one of
553    /// the overlap conditions for the [`Timeline`][crate::Timeline]. (Since: 1.18)
554    #[doc(alias = "GES_ERROR_INVALID_OVERLAP_IN_TRACK")]
555    InvalidOverlapInTrack,
556    #[doc(alias = "GES_ERROR_INVALID_EFFECT_BIN_DESCRIPTION")]
557    InvalidEffectBinDescription,
558    #[doc(hidden)]
559    __Unknown(i32),
560}
561
562#[doc(hidden)]
563impl IntoGlib for Error {
564    type GlibType = ffi::GESError;
565
566    #[inline]
567    fn into_glib(self) -> ffi::GESError {
568        match self {
569            Self::AssetWrongId => ffi::GES_ERROR_ASSET_WRONG_ID,
570            Self::AssetLoading => ffi::GES_ERROR_ASSET_LOADING,
571            Self::FormatterMalformedInputFile => ffi::GES_ERROR_FORMATTER_MALFORMED_INPUT_FILE,
572            Self::InvalidFrameNumber => ffi::GES_ERROR_INVALID_FRAME_NUMBER,
573            Self::NegativeLayer => ffi::GES_ERROR_NEGATIVE_LAYER,
574            Self::NegativeTime => ffi::GES_ERROR_NEGATIVE_TIME,
575            Self::NotEnoughInternalContent => ffi::GES_ERROR_NOT_ENOUGH_INTERNAL_CONTENT,
576            Self::InvalidOverlapInTrack => ffi::GES_ERROR_INVALID_OVERLAP_IN_TRACK,
577            Self::InvalidEffectBinDescription => ffi::GES_ERROR_INVALID_EFFECT_BIN_DESCRIPTION,
578            Self::__Unknown(value) => value,
579        }
580    }
581}
582
583#[doc(hidden)]
584impl FromGlib<ffi::GESError> for Error {
585    #[inline]
586    unsafe fn from_glib(value: ffi::GESError) -> Self {
587        skip_assert_initialized!();
588
589        match value {
590            ffi::GES_ERROR_ASSET_WRONG_ID => Self::AssetWrongId,
591            ffi::GES_ERROR_ASSET_LOADING => Self::AssetLoading,
592            ffi::GES_ERROR_FORMATTER_MALFORMED_INPUT_FILE => Self::FormatterMalformedInputFile,
593            ffi::GES_ERROR_INVALID_FRAME_NUMBER => Self::InvalidFrameNumber,
594            ffi::GES_ERROR_NEGATIVE_LAYER => Self::NegativeLayer,
595            ffi::GES_ERROR_NEGATIVE_TIME => Self::NegativeTime,
596            ffi::GES_ERROR_NOT_ENOUGH_INTERNAL_CONTENT => Self::NotEnoughInternalContent,
597            ffi::GES_ERROR_INVALID_OVERLAP_IN_TRACK => Self::InvalidOverlapInTrack,
598            ffi::GES_ERROR_INVALID_EFFECT_BIN_DESCRIPTION => Self::InvalidEffectBinDescription,
599            value => Self::__Unknown(value),
600        }
601    }
602}
603
604impl glib::error::ErrorDomain for Error {
605    #[inline]
606    fn domain() -> glib::Quark {
607        skip_assert_initialized!();
608
609        static QUARK: ::std::sync::OnceLock<glib::ffi::GQuark> = ::std::sync::OnceLock::new();
610        let quark = *QUARK.get_or_init(|| unsafe {
611            glib::ffi::g_quark_from_static_string(c"GES_ERROR".as_ptr())
612        });
613        unsafe { from_glib(quark) }
614    }
615
616    #[inline]
617    fn code(self) -> i32 {
618        self.into_glib()
619    }
620
621    #[inline]
622    #[allow(clippy::match_single_binding)]
623    fn from(code: i32) -> Option<Self> {
624        skip_assert_initialized!();
625        match unsafe { from_glib(code) } {
626            value => Some(value),
627        }
628    }
629}
630
631/// Horizontal alignment of the text.
632#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
633#[non_exhaustive]
634#[doc(alias = "GESTextHAlign")]
635pub enum TextHAlign {
636    /// align text left
637    #[doc(alias = "GES_TEXT_HALIGN_LEFT")]
638    Left,
639    /// align text center
640    #[doc(alias = "GES_TEXT_HALIGN_CENTER")]
641    Center,
642    /// align text right
643    #[doc(alias = "GES_TEXT_HALIGN_RIGHT")]
644    Right,
645    /// align text on xpos position
646    #[doc(alias = "GES_TEXT_HALIGN_POSITION")]
647    Position,
648    #[doc(alias = "GES_TEXT_HALIGN_ABSOLUTE")]
649    Absolute,
650    #[doc(hidden)]
651    __Unknown(i32),
652}
653
654#[doc(hidden)]
655impl IntoGlib for TextHAlign {
656    type GlibType = ffi::GESTextHAlign;
657
658    #[inline]
659    fn into_glib(self) -> ffi::GESTextHAlign {
660        match self {
661            Self::Left => ffi::GES_TEXT_HALIGN_LEFT,
662            Self::Center => ffi::GES_TEXT_HALIGN_CENTER,
663            Self::Right => ffi::GES_TEXT_HALIGN_RIGHT,
664            Self::Position => ffi::GES_TEXT_HALIGN_POSITION,
665            Self::Absolute => ffi::GES_TEXT_HALIGN_ABSOLUTE,
666            Self::__Unknown(value) => value,
667        }
668    }
669}
670
671#[doc(hidden)]
672impl FromGlib<ffi::GESTextHAlign> for TextHAlign {
673    #[inline]
674    unsafe fn from_glib(value: ffi::GESTextHAlign) -> Self {
675        skip_assert_initialized!();
676
677        match value {
678            ffi::GES_TEXT_HALIGN_LEFT => Self::Left,
679            ffi::GES_TEXT_HALIGN_CENTER => Self::Center,
680            ffi::GES_TEXT_HALIGN_RIGHT => Self::Right,
681            ffi::GES_TEXT_HALIGN_POSITION => Self::Position,
682            ffi::GES_TEXT_HALIGN_ABSOLUTE => Self::Absolute,
683            value => Self::__Unknown(value),
684        }
685    }
686}
687
688impl StaticType for TextHAlign {
689    #[inline]
690    #[doc(alias = "ges_text_halign_get_type")]
691    fn static_type() -> glib::Type {
692        unsafe { from_glib(ffi::ges_text_halign_get_type()) }
693    }
694}
695
696impl glib::HasParamSpec for TextHAlign {
697    type ParamSpec = glib::ParamSpecEnum;
698    type SetValue = Self;
699    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
700
701    fn param_spec_builder() -> Self::BuilderFn {
702        Self::ParamSpec::builder_with_default
703    }
704}
705
706impl glib::value::ValueType for TextHAlign {
707    type Type = Self;
708}
709
710unsafe impl<'a> glib::value::FromValue<'a> for TextHAlign {
711    type Checker = glib::value::GenericValueTypeChecker<Self>;
712
713    #[inline]
714    unsafe fn from_value(value: &'a glib::Value) -> Self {
715        skip_assert_initialized!();
716        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
717    }
718}
719
720impl ToValue for TextHAlign {
721    #[inline]
722    fn to_value(&self) -> glib::Value {
723        let mut value = glib::Value::for_value_type::<Self>();
724        unsafe {
725            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
726        }
727        value
728    }
729
730    #[inline]
731    fn value_type(&self) -> glib::Type {
732        Self::static_type()
733    }
734}
735
736impl From<TextHAlign> for glib::Value {
737    #[inline]
738    fn from(v: TextHAlign) -> Self {
739        skip_assert_initialized!();
740        ToValue::to_value(&v)
741    }
742}
743
744/// Vertical alignment of the text.
745#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
746#[non_exhaustive]
747#[doc(alias = "GESTextVAlign")]
748pub enum TextVAlign {
749    /// draw text on the baseline
750    #[doc(alias = "GES_TEXT_VALIGN_BASELINE")]
751    Baseline,
752    /// draw text on the bottom
753    #[doc(alias = "GES_TEXT_VALIGN_BOTTOM")]
754    Bottom,
755    /// draw text on top
756    #[doc(alias = "GES_TEXT_VALIGN_TOP")]
757    Top,
758    /// draw text on ypos position
759    #[doc(alias = "GES_TEXT_VALIGN_POSITION")]
760    Position,
761    /// draw text on the center
762    #[doc(alias = "GES_TEXT_VALIGN_CENTER")]
763    Center,
764    #[doc(alias = "GES_TEXT_VALIGN_ABSOLUTE")]
765    Absolute,
766    #[doc(hidden)]
767    __Unknown(i32),
768}
769
770#[doc(hidden)]
771impl IntoGlib for TextVAlign {
772    type GlibType = ffi::GESTextVAlign;
773
774    #[inline]
775    fn into_glib(self) -> ffi::GESTextVAlign {
776        match self {
777            Self::Baseline => ffi::GES_TEXT_VALIGN_BASELINE,
778            Self::Bottom => ffi::GES_TEXT_VALIGN_BOTTOM,
779            Self::Top => ffi::GES_TEXT_VALIGN_TOP,
780            Self::Position => ffi::GES_TEXT_VALIGN_POSITION,
781            Self::Center => ffi::GES_TEXT_VALIGN_CENTER,
782            Self::Absolute => ffi::GES_TEXT_VALIGN_ABSOLUTE,
783            Self::__Unknown(value) => value,
784        }
785    }
786}
787
788#[doc(hidden)]
789impl FromGlib<ffi::GESTextVAlign> for TextVAlign {
790    #[inline]
791    unsafe fn from_glib(value: ffi::GESTextVAlign) -> Self {
792        skip_assert_initialized!();
793
794        match value {
795            ffi::GES_TEXT_VALIGN_BASELINE => Self::Baseline,
796            ffi::GES_TEXT_VALIGN_BOTTOM => Self::Bottom,
797            ffi::GES_TEXT_VALIGN_TOP => Self::Top,
798            ffi::GES_TEXT_VALIGN_POSITION => Self::Position,
799            ffi::GES_TEXT_VALIGN_CENTER => Self::Center,
800            ffi::GES_TEXT_VALIGN_ABSOLUTE => Self::Absolute,
801            value => Self::__Unknown(value),
802        }
803    }
804}
805
806impl StaticType for TextVAlign {
807    #[inline]
808    #[doc(alias = "ges_text_valign_get_type")]
809    fn static_type() -> glib::Type {
810        unsafe { from_glib(ffi::ges_text_valign_get_type()) }
811    }
812}
813
814impl glib::HasParamSpec for TextVAlign {
815    type ParamSpec = glib::ParamSpecEnum;
816    type SetValue = Self;
817    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
818
819    fn param_spec_builder() -> Self::BuilderFn {
820        Self::ParamSpec::builder_with_default
821    }
822}
823
824impl glib::value::ValueType for TextVAlign {
825    type Type = Self;
826}
827
828unsafe impl<'a> glib::value::FromValue<'a> for TextVAlign {
829    type Checker = glib::value::GenericValueTypeChecker<Self>;
830
831    #[inline]
832    unsafe fn from_value(value: &'a glib::Value) -> Self {
833        skip_assert_initialized!();
834        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
835    }
836}
837
838impl ToValue for TextVAlign {
839    #[inline]
840    fn to_value(&self) -> glib::Value {
841        let mut value = glib::Value::for_value_type::<Self>();
842        unsafe {
843            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
844        }
845        value
846    }
847
848    #[inline]
849    fn value_type(&self) -> glib::Type {
850        Self::static_type()
851    }
852}
853
854impl From<TextVAlign> for glib::Value {
855    #[inline]
856    fn from(v: TextVAlign) -> Self {
857        skip_assert_initialized!();
858        ToValue::to_value(&v)
859    }
860}
861
862#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
863#[non_exhaustive]
864#[doc(alias = "GESVideoStandardTransitionType")]
865pub enum VideoStandardTransitionType {
866    /// Transition type has not been set,
867    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE")]
868    None,
869    /// A bar moves from left to right,
870    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR")]
871    BarWipeLr,
872    /// A bar moves from top to bottom,
873    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB")]
874    BarWipeTb,
875    /// A box expands from the upper-left corner to the lower-right corner,
876    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL")]
877    BoxWipeTl,
878    /// A box expands from the upper-right corner to the lower-left corner,
879    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR")]
880    BoxWipeTr,
881    /// A box expands from the lower-right corner to the upper-left corner,
882    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR")]
883    BoxWipeBr,
884    /// A box expands from the lower-left corner to the upper-right corner,
885    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL")]
886    BoxWipeBl,
887    /// A box shape expands from each of the four corners toward the center,
888    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI")]
889    FourBoxWipeCi,
890    /// A box shape expands from the center of each quadrant toward the corners of each quadrant,
891    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO")]
892    FourBoxWipeCo,
893    /// A central, vertical line splits and expands toward the left and right edges,
894    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V")]
895    BarndoorV,
896    /// A central, horizontal line splits and expands toward the top and bottom edges,
897    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H")]
898    BarndoorH,
899    /// A box expands from the top edge's midpoint to the bottom corners,
900    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC")]
901    BoxWipeTc,
902    /// A box expands from the right edge's midpoint to the left corners,
903    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC")]
904    BoxWipeRc,
905    /// A box expands from the bottom edge's midpoint to the top corners,
906    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC")]
907    BoxWipeBc,
908    /// A box expands from the left edge's midpoint to the right corners,
909    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC")]
910    BoxWipeLc,
911    /// A diagonal line moves from the upper-left corner to the lower-right corner,
912    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL")]
913    DiagonalTl,
914    /// A diagonal line moves from the upper right corner to the lower-left corner,
915    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR")]
916    DiagonalTr,
917    /// Two wedge shapes slide in from the top and bottom edges toward the center,
918    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V")]
919    BowtieV,
920    /// Two wedge shapes slide in from the left and right edges toward the center,
921    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H")]
922    BowtieH,
923    /// A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners,
924    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL")]
925    BarndoorDbl,
926    /// A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners,
927    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL")]
928    BarndoorDtl,
929    /// Four wedge shapes split from the center and retract toward the four edges,
930    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD")]
931    MiscDiagonalDbd,
932    /// A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges,
933    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD")]
934    MiscDiagonalDd,
935    /// A wedge shape moves from top to bottom,
936    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D")]
937    VeeD,
938    /// A wedge shape moves from right to left,
939    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L")]
940    VeeL,
941    /// A wedge shape moves from bottom to top,
942    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U")]
943    VeeU,
944    /// A wedge shape moves from left to right,
945    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R")]
946    VeeR,
947    /// A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
948    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D")]
949    BarnveeD,
950    /// A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
951    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L")]
952    BarnveeL,
953    /// A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
954    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U")]
955    BarnveeU,
956    /// A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
957    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R")]
958    BarnveeR,
959    /// A rectangle expands from the center.,
960    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT")]
961    IrisRect,
962    /// A radial hand sweeps clockwise from the twelve o'clock position,
963    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12")]
964    ClockCw12,
965    /// A radial hand sweeps clockwise from the three o'clock position,
966    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3")]
967    ClockCw3,
968    /// A radial hand sweeps clockwise from the six o'clock position,
969    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6")]
970    ClockCw6,
971    /// A radial hand sweeps clockwise from the nine o'clock position,
972    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9")]
973    ClockCw9,
974    /// Two radial hands sweep clockwise from the twelve and six o'clock positions,
975    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV")]
976    PinwheelTbv,
977    /// Two radial hands sweep clockwise from the nine and three o'clock positions,
978    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH")]
979    PinwheelTbh,
980    /// Four radial hands sweep clockwise,
981    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB")]
982    PinwheelFb,
983    /// A fan unfolds from the top edge, the fan axis at the center,
984    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT")]
985    FanCt,
986    /// A fan unfolds from the right edge, the fan axis at the center,
987    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR")]
988    FanCr,
989    /// Two fans, their axes at the center, unfold from the top and bottom,
990    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV")]
991    DoublefanFov,
992    /// Two fans, their axes at the center, unfold from the left and right,
993    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH")]
994    DoublefanFoh,
995    /// A radial hand sweeps clockwise from the top edge's midpoint,
996    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT")]
997    SinglesweepCwt,
998    /// A radial hand sweeps clockwise from the right edge's midpoint,
999    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR")]
1000    SinglesweepCwr,
1001    /// A radial hand sweeps clockwise from the bottom edge's midpoint,
1002    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB")]
1003    SinglesweepCwb,
1004    /// A radial hand sweeps clockwise from the left edge's midpoint,
1005    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL")]
1006    SinglesweepCwl,
1007    /// Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints,
1008    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV")]
1009    DoublesweepPv,
1010    /// Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints,
1011    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD")]
1012    DoublesweepPd,
1013    /// Two radial hands attached at the top and bottom edges' midpoints sweep from right to left,
1014    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV")]
1015    DoublesweepOv,
1016    /// Two radial hands attached at the left and right edges' midpoints sweep from top to bottom,
1017    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH")]
1018    DoublesweepOh,
1019    /// A fan unfolds from the bottom, the fan axis at the top edge's midpoint,
1020    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T")]
1021    FanT,
1022    /// A fan unfolds from the left, the fan axis at the right edge's midpoint,
1023    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R")]
1024    FanR,
1025    /// A fan unfolds from the top, the fan axis at the bottom edge's midpoint,
1026    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B")]
1027    FanB,
1028    /// A fan unfolds from the right, the fan axis at the left edge's midpoint,
1029    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L")]
1030    FanL,
1031    /// Two fans, their axes at the top and bottom, unfold from the center,
1032    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV")]
1033    DoublefanFiv,
1034    /// Two fans, their axes at the left and right, unfold from the center,
1035    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH")]
1036    DoublefanFih,
1037    /// A radial hand sweeps clockwise from the upper-left corner,
1038    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL")]
1039    SinglesweepCwtl,
1040    /// A radial hand sweeps counter-clockwise from the lower-left corner.,
1041    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL")]
1042    SinglesweepCwbl,
1043    /// A radial hand sweeps clockwise from the lower-right corner,
1044    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR")]
1045    SinglesweepCwbr,
1046    /// A radial hand sweeps counter-clockwise from the upper-right corner,
1047    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR")]
1048    SinglesweepCwtr,
1049    /// Two radial hands attached at the upper-left and lower-right corners sweep down and up,
1050    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL")]
1051    DoublesweepPdtl,
1052    /// Two radial hands attached at the lower-left and upper-right corners sweep down and up,
1053    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL")]
1054    DoublesweepPdbl,
1055    /// Two radial hands attached at the upper-left and upper-right corners sweep down,
1056    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T")]
1057    SaloondoorT,
1058    /// Two radial hands attached at the upper-left and lower-left corners sweep to the right,
1059    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L")]
1060    SaloondoorL,
1061    /// Two radial hands attached at the lower-left and lower-right corners sweep up,
1062    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B")]
1063    SaloondoorB,
1064    /// Two radial hands attached at the upper-right and lower-right corners sweep to the left,
1065    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R")]
1066    SaloondoorR,
1067    /// Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left,
1068    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R")]
1069    WindshieldR,
1070    /// Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom,
1071    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U")]
1072    WindshieldU,
1073    /// Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top,
1074    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V")]
1075    WindshieldV,
1076    /// Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left,
1077    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H")]
1078    WindshieldH,
1079    /// Crossfade
1080    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE")]
1081    Crossfade,
1082    /// Similar to crossfade, but fade in the front video without fading out
1083    /// the background one
1084    #[cfg(feature = "v1_22")]
1085    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1086    #[doc(alias = "GES_VIDEO_STANDARD_TRANSITION_TYPE_FADE_IN")]
1087    FadeIn,
1088    #[doc(hidden)]
1089    __Unknown(i32),
1090}
1091
1092#[doc(hidden)]
1093impl IntoGlib for VideoStandardTransitionType {
1094    type GlibType = ffi::GESVideoStandardTransitionType;
1095
1096    fn into_glib(self) -> ffi::GESVideoStandardTransitionType {
1097        match self {
1098            Self::None => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE,
1099            Self::BarWipeLr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR,
1100            Self::BarWipeTb => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB,
1101            Self::BoxWipeTl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL,
1102            Self::BoxWipeTr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR,
1103            Self::BoxWipeBr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR,
1104            Self::BoxWipeBl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL,
1105            Self::FourBoxWipeCi => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI,
1106            Self::FourBoxWipeCo => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO,
1107            Self::BarndoorV => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V,
1108            Self::BarndoorH => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H,
1109            Self::BoxWipeTc => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC,
1110            Self::BoxWipeRc => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC,
1111            Self::BoxWipeBc => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC,
1112            Self::BoxWipeLc => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC,
1113            Self::DiagonalTl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL,
1114            Self::DiagonalTr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR,
1115            Self::BowtieV => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V,
1116            Self::BowtieH => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H,
1117            Self::BarndoorDbl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL,
1118            Self::BarndoorDtl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL,
1119            Self::MiscDiagonalDbd => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD,
1120            Self::MiscDiagonalDd => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD,
1121            Self::VeeD => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D,
1122            Self::VeeL => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L,
1123            Self::VeeU => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U,
1124            Self::VeeR => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R,
1125            Self::BarnveeD => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D,
1126            Self::BarnveeL => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L,
1127            Self::BarnveeU => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U,
1128            Self::BarnveeR => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R,
1129            Self::IrisRect => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT,
1130            Self::ClockCw12 => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12,
1131            Self::ClockCw3 => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3,
1132            Self::ClockCw6 => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6,
1133            Self::ClockCw9 => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9,
1134            Self::PinwheelTbv => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV,
1135            Self::PinwheelTbh => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH,
1136            Self::PinwheelFb => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB,
1137            Self::FanCt => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT,
1138            Self::FanCr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR,
1139            Self::DoublefanFov => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV,
1140            Self::DoublefanFoh => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH,
1141            Self::SinglesweepCwt => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT,
1142            Self::SinglesweepCwr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR,
1143            Self::SinglesweepCwb => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB,
1144            Self::SinglesweepCwl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL,
1145            Self::DoublesweepPv => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV,
1146            Self::DoublesweepPd => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD,
1147            Self::DoublesweepOv => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV,
1148            Self::DoublesweepOh => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH,
1149            Self::FanT => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T,
1150            Self::FanR => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R,
1151            Self::FanB => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B,
1152            Self::FanL => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L,
1153            Self::DoublefanFiv => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV,
1154            Self::DoublefanFih => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH,
1155            Self::SinglesweepCwtl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL,
1156            Self::SinglesweepCwbl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL,
1157            Self::SinglesweepCwbr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR,
1158            Self::SinglesweepCwtr => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR,
1159            Self::DoublesweepPdtl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL,
1160            Self::DoublesweepPdbl => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL,
1161            Self::SaloondoorT => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T,
1162            Self::SaloondoorL => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L,
1163            Self::SaloondoorB => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B,
1164            Self::SaloondoorR => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R,
1165            Self::WindshieldR => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R,
1166            Self::WindshieldU => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U,
1167            Self::WindshieldV => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V,
1168            Self::WindshieldH => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H,
1169            Self::Crossfade => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE,
1170            #[cfg(feature = "v1_22")]
1171            Self::FadeIn => ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FADE_IN,
1172            Self::__Unknown(value) => value,
1173        }
1174    }
1175}
1176
1177#[doc(hidden)]
1178impl FromGlib<ffi::GESVideoStandardTransitionType> for VideoStandardTransitionType {
1179    unsafe fn from_glib(value: ffi::GESVideoStandardTransitionType) -> Self {
1180        skip_assert_initialized!();
1181
1182        match value {
1183            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE => Self::None,
1184            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR => Self::BarWipeLr,
1185            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB => Self::BarWipeTb,
1186            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL => Self::BoxWipeTl,
1187            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR => Self::BoxWipeTr,
1188            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR => Self::BoxWipeBr,
1189            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL => Self::BoxWipeBl,
1190            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI => Self::FourBoxWipeCi,
1191            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO => Self::FourBoxWipeCo,
1192            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V => Self::BarndoorV,
1193            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H => Self::BarndoorH,
1194            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC => Self::BoxWipeTc,
1195            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC => Self::BoxWipeRc,
1196            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC => Self::BoxWipeBc,
1197            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC => Self::BoxWipeLc,
1198            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL => Self::DiagonalTl,
1199            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR => Self::DiagonalTr,
1200            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V => Self::BowtieV,
1201            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H => Self::BowtieH,
1202            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL => Self::BarndoorDbl,
1203            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL => Self::BarndoorDtl,
1204            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD => Self::MiscDiagonalDbd,
1205            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD => Self::MiscDiagonalDd,
1206            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D => Self::VeeD,
1207            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L => Self::VeeL,
1208            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U => Self::VeeU,
1209            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R => Self::VeeR,
1210            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D => Self::BarnveeD,
1211            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L => Self::BarnveeL,
1212            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U => Self::BarnveeU,
1213            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R => Self::BarnveeR,
1214            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT => Self::IrisRect,
1215            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12 => Self::ClockCw12,
1216            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3 => Self::ClockCw3,
1217            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6 => Self::ClockCw6,
1218            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9 => Self::ClockCw9,
1219            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV => Self::PinwheelTbv,
1220            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH => Self::PinwheelTbh,
1221            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB => Self::PinwheelFb,
1222            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT => Self::FanCt,
1223            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR => Self::FanCr,
1224            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV => Self::DoublefanFov,
1225            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH => Self::DoublefanFoh,
1226            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT => Self::SinglesweepCwt,
1227            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR => Self::SinglesweepCwr,
1228            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB => Self::SinglesweepCwb,
1229            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL => Self::SinglesweepCwl,
1230            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV => Self::DoublesweepPv,
1231            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD => Self::DoublesweepPd,
1232            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV => Self::DoublesweepOv,
1233            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH => Self::DoublesweepOh,
1234            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T => Self::FanT,
1235            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R => Self::FanR,
1236            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B => Self::FanB,
1237            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L => Self::FanL,
1238            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV => Self::DoublefanFiv,
1239            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH => Self::DoublefanFih,
1240            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL => Self::SinglesweepCwtl,
1241            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL => Self::SinglesweepCwbl,
1242            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR => Self::SinglesweepCwbr,
1243            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR => Self::SinglesweepCwtr,
1244            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL => Self::DoublesweepPdtl,
1245            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL => Self::DoublesweepPdbl,
1246            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T => Self::SaloondoorT,
1247            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L => Self::SaloondoorL,
1248            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B => Self::SaloondoorB,
1249            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R => Self::SaloondoorR,
1250            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R => Self::WindshieldR,
1251            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U => Self::WindshieldU,
1252            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V => Self::WindshieldV,
1253            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H => Self::WindshieldH,
1254            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE => Self::Crossfade,
1255            #[cfg(feature = "v1_22")]
1256            ffi::GES_VIDEO_STANDARD_TRANSITION_TYPE_FADE_IN => Self::FadeIn,
1257            value => Self::__Unknown(value),
1258        }
1259    }
1260}
1261
1262impl StaticType for VideoStandardTransitionType {
1263    #[inline]
1264    #[doc(alias = "ges_video_standard_transition_type_get_type")]
1265    fn static_type() -> glib::Type {
1266        unsafe { from_glib(ffi::ges_video_standard_transition_type_get_type()) }
1267    }
1268}
1269
1270impl glib::HasParamSpec for VideoStandardTransitionType {
1271    type ParamSpec = glib::ParamSpecEnum;
1272    type SetValue = Self;
1273    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1274
1275    fn param_spec_builder() -> Self::BuilderFn {
1276        Self::ParamSpec::builder_with_default
1277    }
1278}
1279
1280impl glib::value::ValueType for VideoStandardTransitionType {
1281    type Type = Self;
1282}
1283
1284unsafe impl<'a> glib::value::FromValue<'a> for VideoStandardTransitionType {
1285    type Checker = glib::value::GenericValueTypeChecker<Self>;
1286
1287    #[inline]
1288    unsafe fn from_value(value: &'a glib::Value) -> Self {
1289        skip_assert_initialized!();
1290        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1291    }
1292}
1293
1294impl ToValue for VideoStandardTransitionType {
1295    #[inline]
1296    fn to_value(&self) -> glib::Value {
1297        let mut value = glib::Value::for_value_type::<Self>();
1298        unsafe {
1299            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1300        }
1301        value
1302    }
1303
1304    #[inline]
1305    fn value_type(&self) -> glib::Type {
1306        Self::static_type()
1307    }
1308}
1309
1310impl From<VideoStandardTransitionType> for glib::Value {
1311    #[inline]
1312    fn from(v: VideoStandardTransitionType) -> Self {
1313        skip_assert_initialized!();
1314        ToValue::to_value(&v)
1315    }
1316}
1317
1318/// The test pattern to produce
1319#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1320#[non_exhaustive]
1321#[doc(alias = "GESVideoTestPattern")]
1322pub enum VideoTestPattern {
1323    /// A standard SMPTE test pattern
1324    #[doc(alias = "GES_VIDEO_TEST_PATTERN_SMPTE")]
1325    Smpte,
1326    /// Random noise
1327    #[doc(alias = "GES_VIDEO_TEST_PATTERN_SNOW")]
1328    Snow,
1329    /// A black image
1330    #[doc(alias = "GES_VIDEO_TEST_PATTERN_BLACK")]
1331    Black,
1332    /// A white image
1333    #[doc(alias = "GES_VIDEO_TEST_PATTERN_WHITE")]
1334    White,
1335    /// A red image
1336    #[doc(alias = "GES_VIDEO_TEST_PATTERN_RED")]
1337    Red,
1338    /// A green image
1339    #[doc(alias = "GES_VIDEO_TEST_PATTERN_GREEN")]
1340    Green,
1341    /// A blue image
1342    #[doc(alias = "GES_VIDEO_TEST_PATTERN_BLUE")]
1343    Blue,
1344    /// Checkers pattern (1px)
1345    #[doc(alias = "GES_VIDEO_TEST_PATTERN_CHECKERS1")]
1346    Checkers1,
1347    /// Checkers pattern (2px)
1348    #[doc(alias = "GES_VIDEO_TEST_PATTERN_CHECKERS2")]
1349    Checkers2,
1350    /// Checkers pattern (4px)
1351    #[doc(alias = "GES_VIDEO_TEST_PATTERN_CHECKERS4")]
1352    Checkers4,
1353    /// Checkers pattern (8px)
1354    #[doc(alias = "GES_VIDEO_TEST_PATTERN_CHECKERS8")]
1355    Checkers8,
1356    /// Circular pattern
1357    #[doc(alias = "GES_VIDEO_TEST_PATTERN_CIRCULAR")]
1358    Circular,
1359    /// Alternate between black and white
1360    #[doc(alias = "GES_VIDEO_TEST_PATTERN_BLINK")]
1361    Blink,
1362    /// SMPTE test pattern (75% color bars)
1363    #[doc(alias = "GES_VIDEO_TEST_PATTERN_SMPTE75")]
1364    Smpte75,
1365    /// Zone plate
1366    #[doc(alias = "GES_VIDEO_TEST_ZONE_PLATE")]
1367    ZonePlate,
1368    /// Gamut checkers
1369    #[doc(alias = "GES_VIDEO_TEST_GAMUT")]
1370    Gamut,
1371    /// Chroma zone plate
1372    #[doc(alias = "GES_VIDEO_TEST_CHROMA_ZONE_PLATE")]
1373    ChromaZonePlate,
1374    /// Solid color
1375    #[doc(alias = "GES_VIDEO_TEST_PATTERN_SOLID")]
1376    SolidColor,
1377    #[doc(hidden)]
1378    __Unknown(i32),
1379}
1380
1381#[doc(hidden)]
1382impl IntoGlib for VideoTestPattern {
1383    type GlibType = ffi::GESVideoTestPattern;
1384
1385    fn into_glib(self) -> ffi::GESVideoTestPattern {
1386        match self {
1387            Self::Smpte => ffi::GES_VIDEO_TEST_PATTERN_SMPTE,
1388            Self::Snow => ffi::GES_VIDEO_TEST_PATTERN_SNOW,
1389            Self::Black => ffi::GES_VIDEO_TEST_PATTERN_BLACK,
1390            Self::White => ffi::GES_VIDEO_TEST_PATTERN_WHITE,
1391            Self::Red => ffi::GES_VIDEO_TEST_PATTERN_RED,
1392            Self::Green => ffi::GES_VIDEO_TEST_PATTERN_GREEN,
1393            Self::Blue => ffi::GES_VIDEO_TEST_PATTERN_BLUE,
1394            Self::Checkers1 => ffi::GES_VIDEO_TEST_PATTERN_CHECKERS1,
1395            Self::Checkers2 => ffi::GES_VIDEO_TEST_PATTERN_CHECKERS2,
1396            Self::Checkers4 => ffi::GES_VIDEO_TEST_PATTERN_CHECKERS4,
1397            Self::Checkers8 => ffi::GES_VIDEO_TEST_PATTERN_CHECKERS8,
1398            Self::Circular => ffi::GES_VIDEO_TEST_PATTERN_CIRCULAR,
1399            Self::Blink => ffi::GES_VIDEO_TEST_PATTERN_BLINK,
1400            Self::Smpte75 => ffi::GES_VIDEO_TEST_PATTERN_SMPTE75,
1401            Self::ZonePlate => ffi::GES_VIDEO_TEST_ZONE_PLATE,
1402            Self::Gamut => ffi::GES_VIDEO_TEST_GAMUT,
1403            Self::ChromaZonePlate => ffi::GES_VIDEO_TEST_CHROMA_ZONE_PLATE,
1404            Self::SolidColor => ffi::GES_VIDEO_TEST_PATTERN_SOLID,
1405            Self::__Unknown(value) => value,
1406        }
1407    }
1408}
1409
1410#[doc(hidden)]
1411impl FromGlib<ffi::GESVideoTestPattern> for VideoTestPattern {
1412    unsafe fn from_glib(value: ffi::GESVideoTestPattern) -> Self {
1413        skip_assert_initialized!();
1414
1415        match value {
1416            ffi::GES_VIDEO_TEST_PATTERN_SMPTE => Self::Smpte,
1417            ffi::GES_VIDEO_TEST_PATTERN_SNOW => Self::Snow,
1418            ffi::GES_VIDEO_TEST_PATTERN_BLACK => Self::Black,
1419            ffi::GES_VIDEO_TEST_PATTERN_WHITE => Self::White,
1420            ffi::GES_VIDEO_TEST_PATTERN_RED => Self::Red,
1421            ffi::GES_VIDEO_TEST_PATTERN_GREEN => Self::Green,
1422            ffi::GES_VIDEO_TEST_PATTERN_BLUE => Self::Blue,
1423            ffi::GES_VIDEO_TEST_PATTERN_CHECKERS1 => Self::Checkers1,
1424            ffi::GES_VIDEO_TEST_PATTERN_CHECKERS2 => Self::Checkers2,
1425            ffi::GES_VIDEO_TEST_PATTERN_CHECKERS4 => Self::Checkers4,
1426            ffi::GES_VIDEO_TEST_PATTERN_CHECKERS8 => Self::Checkers8,
1427            ffi::GES_VIDEO_TEST_PATTERN_CIRCULAR => Self::Circular,
1428            ffi::GES_VIDEO_TEST_PATTERN_BLINK => Self::Blink,
1429            ffi::GES_VIDEO_TEST_PATTERN_SMPTE75 => Self::Smpte75,
1430            ffi::GES_VIDEO_TEST_ZONE_PLATE => Self::ZonePlate,
1431            ffi::GES_VIDEO_TEST_GAMUT => Self::Gamut,
1432            ffi::GES_VIDEO_TEST_CHROMA_ZONE_PLATE => Self::ChromaZonePlate,
1433            ffi::GES_VIDEO_TEST_PATTERN_SOLID => Self::SolidColor,
1434            value => Self::__Unknown(value),
1435        }
1436    }
1437}
1438
1439impl StaticType for VideoTestPattern {
1440    #[inline]
1441    #[doc(alias = "ges_video_test_pattern_get_type")]
1442    fn static_type() -> glib::Type {
1443        unsafe { from_glib(ffi::ges_video_test_pattern_get_type()) }
1444    }
1445}
1446
1447impl glib::HasParamSpec for VideoTestPattern {
1448    type ParamSpec = glib::ParamSpecEnum;
1449    type SetValue = Self;
1450    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1451
1452    fn param_spec_builder() -> Self::BuilderFn {
1453        Self::ParamSpec::builder_with_default
1454    }
1455}
1456
1457impl glib::value::ValueType for VideoTestPattern {
1458    type Type = Self;
1459}
1460
1461unsafe impl<'a> glib::value::FromValue<'a> for VideoTestPattern {
1462    type Checker = glib::value::GenericValueTypeChecker<Self>;
1463
1464    #[inline]
1465    unsafe fn from_value(value: &'a glib::Value) -> Self {
1466        skip_assert_initialized!();
1467        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1468    }
1469}
1470
1471impl ToValue for VideoTestPattern {
1472    #[inline]
1473    fn to_value(&self) -> glib::Value {
1474        let mut value = glib::Value::for_value_type::<Self>();
1475        unsafe {
1476            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1477        }
1478        value
1479    }
1480
1481    #[inline]
1482    fn value_type(&self) -> glib::Type {
1483        Self::static_type()
1484    }
1485}
1486
1487impl From<VideoTestPattern> for glib::Value {
1488    #[inline]
1489    fn from(v: VideoTestPattern) -> Self {
1490        skip_assert_initialized!();
1491        ToValue::to_value(&v)
1492    }
1493}