Skip to main content

pango/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::{Language, Matrix, ffi};
6use glib::{prelude::*, translate::*};
7
8/// [`Alignment`][crate::Alignment] describes how to align the lines of a [`Layout`][crate::Layout]
9/// within the available space.
10///
11/// If the [`Layout`][crate::Layout] is set to justify using [`Layout::set_justify()`][crate::Layout::set_justify()],
12/// this only affects partial lines.
13///
14/// See [`Layout::set_auto_dir()`][crate::Layout::set_auto_dir()] for how text direction affects
15/// the interpretation of [`Alignment`][crate::Alignment] values.
16#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
17#[non_exhaustive]
18#[doc(alias = "PangoAlignment")]
19pub enum Alignment {
20    /// Put all available space on the right
21    #[doc(alias = "PANGO_ALIGN_LEFT")]
22    Left,
23    /// Center the line within the available space
24    #[doc(alias = "PANGO_ALIGN_CENTER")]
25    Center,
26    /// Put all available space on the left
27    #[doc(alias = "PANGO_ALIGN_RIGHT")]
28    Right,
29    #[doc(hidden)]
30    __Unknown(i32),
31}
32
33#[doc(hidden)]
34impl IntoGlib for Alignment {
35    type GlibType = ffi::PangoAlignment;
36
37    #[inline]
38    fn into_glib(self) -> ffi::PangoAlignment {
39        match self {
40            Self::Left => ffi::PANGO_ALIGN_LEFT,
41            Self::Center => ffi::PANGO_ALIGN_CENTER,
42            Self::Right => ffi::PANGO_ALIGN_RIGHT,
43            Self::__Unknown(value) => value,
44        }
45    }
46}
47
48#[doc(hidden)]
49impl FromGlib<ffi::PangoAlignment> for Alignment {
50    #[inline]
51    unsafe fn from_glib(value: ffi::PangoAlignment) -> Self {
52        match value {
53            ffi::PANGO_ALIGN_LEFT => Self::Left,
54            ffi::PANGO_ALIGN_CENTER => Self::Center,
55            ffi::PANGO_ALIGN_RIGHT => Self::Right,
56            value => Self::__Unknown(value),
57        }
58    }
59}
60
61impl StaticType for Alignment {
62    #[inline]
63    #[doc(alias = "pango_alignment_get_type")]
64    fn static_type() -> glib::Type {
65        unsafe { from_glib(ffi::pango_alignment_get_type()) }
66    }
67}
68
69impl glib::HasParamSpec for Alignment {
70    type ParamSpec = glib::ParamSpecEnum;
71    type SetValue = Self;
72    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
73
74    fn param_spec_builder() -> Self::BuilderFn {
75        Self::ParamSpec::builder_with_default
76    }
77}
78
79impl glib::value::ValueType for Alignment {
80    type Type = Self;
81}
82
83unsafe impl<'a> glib::value::FromValue<'a> for Alignment {
84    type Checker = glib::value::GenericValueTypeChecker<Self>;
85
86    #[inline]
87    unsafe fn from_value(value: &'a glib::Value) -> Self {
88        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
89    }
90}
91
92impl ToValue for Alignment {
93    #[inline]
94    fn to_value(&self) -> glib::Value {
95        let mut value = glib::Value::for_value_type::<Self>();
96        unsafe {
97            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
98        }
99        value
100    }
101
102    #[inline]
103    fn value_type(&self) -> glib::Type {
104        Self::static_type()
105    }
106}
107
108impl From<Alignment> for glib::Value {
109    #[inline]
110    fn from(v: Alignment) -> Self {
111        ToValue::to_value(&v)
112    }
113}
114
115/// The [`AttrType`][crate::AttrType] distinguishes between different types of attributes.
116///
117/// Along with the predefined values, it is possible to allocate additional
118/// values for custom attributes using `register()`. The predefined
119/// values are given below. The type of structure used to store the attribute is
120/// listed in parentheses after the description.
121#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
122#[non_exhaustive]
123#[doc(alias = "PangoAttrType")]
124pub enum AttrType {
125    /// does not happen
126    #[doc(alias = "PANGO_ATTR_INVALID")]
127    Invalid,
128    /// language ([`AttrLanguage`][crate::AttrLanguage])
129    #[doc(alias = "PANGO_ATTR_LANGUAGE")]
130    Language,
131    /// font family name list ([`AttrString`][crate::AttrString])
132    #[doc(alias = "PANGO_ATTR_FAMILY")]
133    Family,
134    /// font slant style ([`AttrInt`][crate::AttrInt])
135    #[doc(alias = "PANGO_ATTR_STYLE")]
136    Style,
137    /// font weight ([`AttrInt`][crate::AttrInt])
138    #[doc(alias = "PANGO_ATTR_WEIGHT")]
139    Weight,
140    /// font variant (normal or small caps) ([`AttrInt`][crate::AttrInt])
141    #[doc(alias = "PANGO_ATTR_VARIANT")]
142    Variant,
143    /// font stretch ([`AttrInt`][crate::AttrInt])
144    #[doc(alias = "PANGO_ATTR_STRETCH")]
145    Stretch,
146    /// font size in points scaled by `PANGO_SCALE` ([`AttrInt`][crate::AttrInt])
147    #[doc(alias = "PANGO_ATTR_SIZE")]
148    Size,
149    /// font description ([`AttrFontDesc`][crate::AttrFontDesc])
150    #[doc(alias = "PANGO_ATTR_FONT_DESC")]
151    FontDesc,
152    /// foreground color ([`AttrColor`][crate::AttrColor])
153    #[doc(alias = "PANGO_ATTR_FOREGROUND")]
154    Foreground,
155    /// background color ([`AttrColor`][crate::AttrColor])
156    #[doc(alias = "PANGO_ATTR_BACKGROUND")]
157    Background,
158    /// whether the text has an underline ([`AttrInt`][crate::AttrInt])
159    #[doc(alias = "PANGO_ATTR_UNDERLINE")]
160    Underline,
161    /// whether the text is struck-through ([`AttrInt`][crate::AttrInt])
162    #[doc(alias = "PANGO_ATTR_STRIKETHROUGH")]
163    Strikethrough,
164    /// baseline displacement ([`AttrInt`][crate::AttrInt])
165    #[doc(alias = "PANGO_ATTR_RISE")]
166    Rise,
167    /// shape ([`AttrShape`][crate::AttrShape])
168    #[doc(alias = "PANGO_ATTR_SHAPE")]
169    Shape,
170    /// font size scale factor ([`AttrFloat`][crate::AttrFloat])
171    #[doc(alias = "PANGO_ATTR_SCALE")]
172    Scale,
173    /// whether fallback is enabled ([`AttrInt`][crate::AttrInt])
174    #[doc(alias = "PANGO_ATTR_FALLBACK")]
175    Fallback,
176    /// letter spacing ([`AttrInt`][crate::AttrInt])
177    #[doc(alias = "PANGO_ATTR_LETTER_SPACING")]
178    LetterSpacing,
179    /// underline color ([`AttrColor`][crate::AttrColor])
180    #[doc(alias = "PANGO_ATTR_UNDERLINE_COLOR")]
181    UnderlineColor,
182    /// strikethrough color ([`AttrColor`][crate::AttrColor])
183    #[doc(alias = "PANGO_ATTR_STRIKETHROUGH_COLOR")]
184    StrikethroughColor,
185    /// font size in pixels scaled by `PANGO_SCALE` ([`AttrInt`][crate::AttrInt])
186    #[doc(alias = "PANGO_ATTR_ABSOLUTE_SIZE")]
187    AbsoluteSize,
188    /// base text gravity ([`AttrInt`][crate::AttrInt])
189    #[doc(alias = "PANGO_ATTR_GRAVITY")]
190    Gravity,
191    /// gravity hint ([`AttrInt`][crate::AttrInt])
192    #[doc(alias = "PANGO_ATTR_GRAVITY_HINT")]
193    GravityHint,
194    /// OpenType font features ([`AttrFontFeatures`][crate::AttrFontFeatures]). Since 1.38
195    #[doc(alias = "PANGO_ATTR_FONT_FEATURES")]
196    FontFeatures,
197    /// foreground alpha ([`AttrInt`][crate::AttrInt]). Since 1.38
198    #[doc(alias = "PANGO_ATTR_FOREGROUND_ALPHA")]
199    ForegroundAlpha,
200    /// background alpha ([`AttrInt`][crate::AttrInt]). Since 1.38
201    #[doc(alias = "PANGO_ATTR_BACKGROUND_ALPHA")]
202    BackgroundAlpha,
203    /// whether breaks are allowed ([`AttrInt`][crate::AttrInt]). Since 1.44
204    #[doc(alias = "PANGO_ATTR_ALLOW_BREAKS")]
205    AllowBreaks,
206    /// how to render invisible characters ([`AttrInt`][crate::AttrInt]). Since 1.44
207    #[doc(alias = "PANGO_ATTR_SHOW")]
208    Show,
209    /// whether to insert hyphens at intra-word line breaks ([`AttrInt`][crate::AttrInt]). Since 1.44
210    #[doc(alias = "PANGO_ATTR_INSERT_HYPHENS")]
211    InsertHyphens,
212    /// whether the text has an overline ([`AttrInt`][crate::AttrInt]). Since 1.46
213    #[doc(alias = "PANGO_ATTR_OVERLINE")]
214    Overline,
215    /// overline color ([`AttrColor`][crate::AttrColor]). Since 1.46
216    #[doc(alias = "PANGO_ATTR_OVERLINE_COLOR")]
217    OverlineColor,
218    /// line height factor ([`AttrFloat`][crate::AttrFloat]). Since: 1.50
219    #[cfg(feature = "v1_50")]
220    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
221    #[doc(alias = "PANGO_ATTR_LINE_HEIGHT")]
222    LineHeight,
223    /// line height ([`AttrInt`][crate::AttrInt]). Since: 1.50
224    #[cfg(feature = "v1_50")]
225    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
226    #[doc(alias = "PANGO_ATTR_ABSOLUTE_LINE_HEIGHT")]
227    AbsoluteLineHeight,
228    #[cfg(feature = "v1_50")]
229    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
230    #[doc(alias = "PANGO_ATTR_TEXT_TRANSFORM")]
231    TextTransform,
232    /// override segmentation to classify the range of the attribute as a single word ([`AttrInt`][crate::AttrInt]). Since 1.50
233    #[cfg(feature = "v1_50")]
234    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
235    #[doc(alias = "PANGO_ATTR_WORD")]
236    Word,
237    /// override segmentation to classify the range of the attribute as a single sentence ([`AttrInt`][crate::AttrInt]). Since 1.50
238    #[cfg(feature = "v1_50")]
239    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
240    #[doc(alias = "PANGO_ATTR_SENTENCE")]
241    Sentence,
242    /// baseline displacement ([`AttrInt`][crate::AttrInt]). Since 1.50
243    #[cfg(feature = "v1_50")]
244    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
245    #[doc(alias = "PANGO_ATTR_BASELINE_SHIFT")]
246    BaselineShift,
247    /// font-relative size change ([`AttrInt`][crate::AttrInt]). Since 1.50
248    #[cfg(feature = "v1_50")]
249    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
250    #[doc(alias = "PANGO_ATTR_FONT_SCALE")]
251    FontScale,
252    /// font width ([`AttrInt`][crate::AttrInt]). Since: 1.58
253    #[cfg(feature = "v1_58")]
254    #[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
255    #[doc(alias = "PANGO_ATTR_WIDTH")]
256    Width,
257    #[doc(hidden)]
258    __Unknown(i32),
259}
260
261impl AttrType {
262    #[doc(alias = "pango_attr_type_get_name")]
263    #[doc(alias = "get_name")]
264    pub fn name(self) -> Option<glib::GString> {
265        unsafe { from_glib_none(ffi::pango_attr_type_get_name(self.into_glib())) }
266    }
267}
268
269#[doc(hidden)]
270impl IntoGlib for AttrType {
271    type GlibType = ffi::PangoAttrType;
272
273    fn into_glib(self) -> ffi::PangoAttrType {
274        match self {
275            Self::Invalid => ffi::PANGO_ATTR_INVALID,
276            Self::Language => ffi::PANGO_ATTR_LANGUAGE,
277            Self::Family => ffi::PANGO_ATTR_FAMILY,
278            Self::Style => ffi::PANGO_ATTR_STYLE,
279            Self::Weight => ffi::PANGO_ATTR_WEIGHT,
280            Self::Variant => ffi::PANGO_ATTR_VARIANT,
281            Self::Stretch => ffi::PANGO_ATTR_STRETCH,
282            Self::Size => ffi::PANGO_ATTR_SIZE,
283            Self::FontDesc => ffi::PANGO_ATTR_FONT_DESC,
284            Self::Foreground => ffi::PANGO_ATTR_FOREGROUND,
285            Self::Background => ffi::PANGO_ATTR_BACKGROUND,
286            Self::Underline => ffi::PANGO_ATTR_UNDERLINE,
287            Self::Strikethrough => ffi::PANGO_ATTR_STRIKETHROUGH,
288            Self::Rise => ffi::PANGO_ATTR_RISE,
289            Self::Shape => ffi::PANGO_ATTR_SHAPE,
290            Self::Scale => ffi::PANGO_ATTR_SCALE,
291            Self::Fallback => ffi::PANGO_ATTR_FALLBACK,
292            Self::LetterSpacing => ffi::PANGO_ATTR_LETTER_SPACING,
293            Self::UnderlineColor => ffi::PANGO_ATTR_UNDERLINE_COLOR,
294            Self::StrikethroughColor => ffi::PANGO_ATTR_STRIKETHROUGH_COLOR,
295            Self::AbsoluteSize => ffi::PANGO_ATTR_ABSOLUTE_SIZE,
296            Self::Gravity => ffi::PANGO_ATTR_GRAVITY,
297            Self::GravityHint => ffi::PANGO_ATTR_GRAVITY_HINT,
298            Self::FontFeatures => ffi::PANGO_ATTR_FONT_FEATURES,
299            Self::ForegroundAlpha => ffi::PANGO_ATTR_FOREGROUND_ALPHA,
300            Self::BackgroundAlpha => ffi::PANGO_ATTR_BACKGROUND_ALPHA,
301            Self::AllowBreaks => ffi::PANGO_ATTR_ALLOW_BREAKS,
302            Self::Show => ffi::PANGO_ATTR_SHOW,
303            Self::InsertHyphens => ffi::PANGO_ATTR_INSERT_HYPHENS,
304            Self::Overline => ffi::PANGO_ATTR_OVERLINE,
305            Self::OverlineColor => ffi::PANGO_ATTR_OVERLINE_COLOR,
306            #[cfg(feature = "v1_50")]
307            Self::LineHeight => ffi::PANGO_ATTR_LINE_HEIGHT,
308            #[cfg(feature = "v1_50")]
309            Self::AbsoluteLineHeight => ffi::PANGO_ATTR_ABSOLUTE_LINE_HEIGHT,
310            #[cfg(feature = "v1_50")]
311            Self::TextTransform => ffi::PANGO_ATTR_TEXT_TRANSFORM,
312            #[cfg(feature = "v1_50")]
313            Self::Word => ffi::PANGO_ATTR_WORD,
314            #[cfg(feature = "v1_50")]
315            Self::Sentence => ffi::PANGO_ATTR_SENTENCE,
316            #[cfg(feature = "v1_50")]
317            Self::BaselineShift => ffi::PANGO_ATTR_BASELINE_SHIFT,
318            #[cfg(feature = "v1_50")]
319            Self::FontScale => ffi::PANGO_ATTR_FONT_SCALE,
320            #[cfg(feature = "v1_58")]
321            Self::Width => ffi::PANGO_ATTR_WIDTH,
322            Self::__Unknown(value) => value,
323        }
324    }
325}
326
327#[doc(hidden)]
328impl FromGlib<ffi::PangoAttrType> for AttrType {
329    unsafe fn from_glib(value: ffi::PangoAttrType) -> Self {
330        match value {
331            ffi::PANGO_ATTR_INVALID => Self::Invalid,
332            ffi::PANGO_ATTR_LANGUAGE => Self::Language,
333            ffi::PANGO_ATTR_FAMILY => Self::Family,
334            ffi::PANGO_ATTR_STYLE => Self::Style,
335            ffi::PANGO_ATTR_WEIGHT => Self::Weight,
336            ffi::PANGO_ATTR_VARIANT => Self::Variant,
337            ffi::PANGO_ATTR_STRETCH => Self::Stretch,
338            ffi::PANGO_ATTR_SIZE => Self::Size,
339            ffi::PANGO_ATTR_FONT_DESC => Self::FontDesc,
340            ffi::PANGO_ATTR_FOREGROUND => Self::Foreground,
341            ffi::PANGO_ATTR_BACKGROUND => Self::Background,
342            ffi::PANGO_ATTR_UNDERLINE => Self::Underline,
343            ffi::PANGO_ATTR_STRIKETHROUGH => Self::Strikethrough,
344            ffi::PANGO_ATTR_RISE => Self::Rise,
345            ffi::PANGO_ATTR_SHAPE => Self::Shape,
346            ffi::PANGO_ATTR_SCALE => Self::Scale,
347            ffi::PANGO_ATTR_FALLBACK => Self::Fallback,
348            ffi::PANGO_ATTR_LETTER_SPACING => Self::LetterSpacing,
349            ffi::PANGO_ATTR_UNDERLINE_COLOR => Self::UnderlineColor,
350            ffi::PANGO_ATTR_STRIKETHROUGH_COLOR => Self::StrikethroughColor,
351            ffi::PANGO_ATTR_ABSOLUTE_SIZE => Self::AbsoluteSize,
352            ffi::PANGO_ATTR_GRAVITY => Self::Gravity,
353            ffi::PANGO_ATTR_GRAVITY_HINT => Self::GravityHint,
354            ffi::PANGO_ATTR_FONT_FEATURES => Self::FontFeatures,
355            ffi::PANGO_ATTR_FOREGROUND_ALPHA => Self::ForegroundAlpha,
356            ffi::PANGO_ATTR_BACKGROUND_ALPHA => Self::BackgroundAlpha,
357            ffi::PANGO_ATTR_ALLOW_BREAKS => Self::AllowBreaks,
358            ffi::PANGO_ATTR_SHOW => Self::Show,
359            ffi::PANGO_ATTR_INSERT_HYPHENS => Self::InsertHyphens,
360            ffi::PANGO_ATTR_OVERLINE => Self::Overline,
361            ffi::PANGO_ATTR_OVERLINE_COLOR => Self::OverlineColor,
362            #[cfg(feature = "v1_50")]
363            ffi::PANGO_ATTR_LINE_HEIGHT => Self::LineHeight,
364            #[cfg(feature = "v1_50")]
365            ffi::PANGO_ATTR_ABSOLUTE_LINE_HEIGHT => Self::AbsoluteLineHeight,
366            #[cfg(feature = "v1_50")]
367            ffi::PANGO_ATTR_TEXT_TRANSFORM => Self::TextTransform,
368            #[cfg(feature = "v1_50")]
369            ffi::PANGO_ATTR_WORD => Self::Word,
370            #[cfg(feature = "v1_50")]
371            ffi::PANGO_ATTR_SENTENCE => Self::Sentence,
372            #[cfg(feature = "v1_50")]
373            ffi::PANGO_ATTR_BASELINE_SHIFT => Self::BaselineShift,
374            #[cfg(feature = "v1_50")]
375            ffi::PANGO_ATTR_FONT_SCALE => Self::FontScale,
376            #[cfg(feature = "v1_58")]
377            ffi::PANGO_ATTR_WIDTH => Self::Width,
378            value => Self::__Unknown(value),
379        }
380    }
381}
382
383impl StaticType for AttrType {
384    #[inline]
385    #[doc(alias = "pango_attr_type_get_type")]
386    fn static_type() -> glib::Type {
387        unsafe { from_glib(ffi::pango_attr_type_get_type()) }
388    }
389}
390
391impl glib::HasParamSpec for AttrType {
392    type ParamSpec = glib::ParamSpecEnum;
393    type SetValue = Self;
394    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
395
396    fn param_spec_builder() -> Self::BuilderFn {
397        Self::ParamSpec::builder_with_default
398    }
399}
400
401impl glib::value::ValueType for AttrType {
402    type Type = Self;
403}
404
405unsafe impl<'a> glib::value::FromValue<'a> for AttrType {
406    type Checker = glib::value::GenericValueTypeChecker<Self>;
407
408    #[inline]
409    unsafe fn from_value(value: &'a glib::Value) -> Self {
410        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
411    }
412}
413
414impl ToValue for AttrType {
415    #[inline]
416    fn to_value(&self) -> glib::Value {
417        let mut value = glib::Value::for_value_type::<Self>();
418        unsafe {
419            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
420        }
421        value
422    }
423
424    #[inline]
425    fn value_type(&self) -> glib::Type {
426        Self::static_type()
427    }
428}
429
430impl From<AttrType> for glib::Value {
431    #[inline]
432    fn from(v: AttrType) -> Self {
433        ToValue::to_value(&v)
434    }
435}
436
437/// An enumeration that affects baseline shifts between runs.
438#[cfg(feature = "v1_50")]
439#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
440#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
441#[non_exhaustive]
442#[doc(alias = "PangoBaselineShift")]
443pub enum BaselineShift {
444    /// Leave the baseline unchanged
445    #[doc(alias = "PANGO_BASELINE_SHIFT_NONE")]
446    None,
447    /// Shift the baseline to the superscript position,
448    ///   relative to the previous run
449    #[doc(alias = "PANGO_BASELINE_SHIFT_SUPERSCRIPT")]
450    Superscript,
451    /// Shift the baseline to the subscript position,
452    ///   relative to the previous run
453    #[doc(alias = "PANGO_BASELINE_SHIFT_SUBSCRIPT")]
454    Subscript,
455    #[doc(hidden)]
456    __Unknown(i32),
457}
458
459#[cfg(feature = "v1_50")]
460#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
461#[doc(hidden)]
462impl IntoGlib for BaselineShift {
463    type GlibType = ffi::PangoBaselineShift;
464
465    #[inline]
466    fn into_glib(self) -> ffi::PangoBaselineShift {
467        match self {
468            Self::None => ffi::PANGO_BASELINE_SHIFT_NONE,
469            Self::Superscript => ffi::PANGO_BASELINE_SHIFT_SUPERSCRIPT,
470            Self::Subscript => ffi::PANGO_BASELINE_SHIFT_SUBSCRIPT,
471            Self::__Unknown(value) => value,
472        }
473    }
474}
475
476#[cfg(feature = "v1_50")]
477#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
478#[doc(hidden)]
479impl FromGlib<ffi::PangoBaselineShift> for BaselineShift {
480    #[inline]
481    unsafe fn from_glib(value: ffi::PangoBaselineShift) -> Self {
482        match value {
483            ffi::PANGO_BASELINE_SHIFT_NONE => Self::None,
484            ffi::PANGO_BASELINE_SHIFT_SUPERSCRIPT => Self::Superscript,
485            ffi::PANGO_BASELINE_SHIFT_SUBSCRIPT => Self::Subscript,
486            value => Self::__Unknown(value),
487        }
488    }
489}
490
491#[cfg(feature = "v1_50")]
492#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
493impl StaticType for BaselineShift {
494    #[inline]
495    #[doc(alias = "pango_baseline_shift_get_type")]
496    fn static_type() -> glib::Type {
497        unsafe { from_glib(ffi::pango_baseline_shift_get_type()) }
498    }
499}
500
501#[cfg(feature = "v1_50")]
502#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
503impl glib::HasParamSpec for BaselineShift {
504    type ParamSpec = glib::ParamSpecEnum;
505    type SetValue = Self;
506    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
507
508    fn param_spec_builder() -> Self::BuilderFn {
509        Self::ParamSpec::builder_with_default
510    }
511}
512
513#[cfg(feature = "v1_50")]
514#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
515impl glib::value::ValueType for BaselineShift {
516    type Type = Self;
517}
518
519#[cfg(feature = "v1_50")]
520#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
521unsafe impl<'a> glib::value::FromValue<'a> for BaselineShift {
522    type Checker = glib::value::GenericValueTypeChecker<Self>;
523
524    #[inline]
525    unsafe fn from_value(value: &'a glib::Value) -> Self {
526        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
527    }
528}
529
530#[cfg(feature = "v1_50")]
531#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
532impl ToValue for BaselineShift {
533    #[inline]
534    fn to_value(&self) -> glib::Value {
535        let mut value = glib::Value::for_value_type::<Self>();
536        unsafe {
537            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
538        }
539        value
540    }
541
542    #[inline]
543    fn value_type(&self) -> glib::Type {
544        Self::static_type()
545    }
546}
547
548#[cfg(feature = "v1_50")]
549#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
550impl From<BaselineShift> for glib::Value {
551    #[inline]
552    fn from(v: BaselineShift) -> Self {
553        ToValue::to_value(&v)
554    }
555}
556
557/// [`BidiType`][crate::BidiType] represents the bidirectional character
558/// type of a Unicode character.
559///
560/// The values in this enumeration are specified by the
561/// [Unicode bidirectional algorithm](http://www.unicode.org/reports/tr9/).
562///
563/// # Deprecated since 1.44
564///
565/// Use fribidi for this information
566#[cfg_attr(feature = "v1_44", deprecated = "Since 1.44")]
567#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
568#[non_exhaustive]
569#[doc(alias = "PangoBidiType")]
570pub enum BidiType {
571    /// Left-to-Right
572    #[doc(alias = "PANGO_BIDI_TYPE_L")]
573    L,
574    /// Left-to-Right Embedding
575    #[doc(alias = "PANGO_BIDI_TYPE_LRE")]
576    Lre,
577    /// Left-to-Right Override
578    #[doc(alias = "PANGO_BIDI_TYPE_LRO")]
579    Lro,
580    /// Right-to-Left
581    #[doc(alias = "PANGO_BIDI_TYPE_R")]
582    R,
583    /// Right-to-Left Arabic
584    #[doc(alias = "PANGO_BIDI_TYPE_AL")]
585    Al,
586    /// Right-to-Left Embedding
587    #[doc(alias = "PANGO_BIDI_TYPE_RLE")]
588    Rle,
589    /// Right-to-Left Override
590    #[doc(alias = "PANGO_BIDI_TYPE_RLO")]
591    Rlo,
592    /// Pop Directional Format
593    #[doc(alias = "PANGO_BIDI_TYPE_PDF")]
594    Pdf,
595    /// European Number
596    #[doc(alias = "PANGO_BIDI_TYPE_EN")]
597    En,
598    /// European Number Separator
599    #[doc(alias = "PANGO_BIDI_TYPE_ES")]
600    Es,
601    /// European Number Terminator
602    #[doc(alias = "PANGO_BIDI_TYPE_ET")]
603    Et,
604    /// Arabic Number
605    #[doc(alias = "PANGO_BIDI_TYPE_AN")]
606    An,
607    /// Common Number Separator
608    #[doc(alias = "PANGO_BIDI_TYPE_CS")]
609    Cs,
610    /// Nonspacing Mark
611    #[doc(alias = "PANGO_BIDI_TYPE_NSM")]
612    Nsm,
613    /// Boundary Neutral
614    #[doc(alias = "PANGO_BIDI_TYPE_BN")]
615    Bn,
616    /// Paragraph Separator
617    #[doc(alias = "PANGO_BIDI_TYPE_B")]
618    B,
619    /// Segment Separator
620    #[doc(alias = "PANGO_BIDI_TYPE_S")]
621    S,
622    /// Whitespace
623    #[doc(alias = "PANGO_BIDI_TYPE_WS")]
624    Ws,
625    /// Other Neutrals
626    #[doc(alias = "PANGO_BIDI_TYPE_ON")]
627    On,
628    /// Left-to-Right isolate. Since 1.48.6
629    #[doc(alias = "PANGO_BIDI_TYPE_LRI")]
630    Lri,
631    /// Right-to-Left isolate. Since 1.48.6
632    #[doc(alias = "PANGO_BIDI_TYPE_RLI")]
633    Rli,
634    /// First strong isolate. Since 1.48.6
635    #[doc(alias = "PANGO_BIDI_TYPE_FSI")]
636    Fsi,
637    /// Pop directional isolate. Since 1.48.6
638    #[doc(alias = "PANGO_BIDI_TYPE_PDI")]
639    Pdi,
640    #[doc(hidden)]
641    __Unknown(i32),
642}
643
644#[allow(deprecated)]
645impl BidiType {
646    #[doc(alias = "pango_bidi_type_for_unichar")]
647    pub fn for_unichar(ch: char) -> BidiType {
648        unsafe { from_glib(ffi::pango_bidi_type_for_unichar(ch.into_glib())) }
649    }
650}
651
652#[allow(deprecated)]
653#[doc(hidden)]
654impl IntoGlib for BidiType {
655    type GlibType = ffi::PangoBidiType;
656
657    fn into_glib(self) -> ffi::PangoBidiType {
658        match self {
659            Self::L => ffi::PANGO_BIDI_TYPE_L,
660            Self::Lre => ffi::PANGO_BIDI_TYPE_LRE,
661            Self::Lro => ffi::PANGO_BIDI_TYPE_LRO,
662            Self::R => ffi::PANGO_BIDI_TYPE_R,
663            Self::Al => ffi::PANGO_BIDI_TYPE_AL,
664            Self::Rle => ffi::PANGO_BIDI_TYPE_RLE,
665            Self::Rlo => ffi::PANGO_BIDI_TYPE_RLO,
666            Self::Pdf => ffi::PANGO_BIDI_TYPE_PDF,
667            Self::En => ffi::PANGO_BIDI_TYPE_EN,
668            Self::Es => ffi::PANGO_BIDI_TYPE_ES,
669            Self::Et => ffi::PANGO_BIDI_TYPE_ET,
670            Self::An => ffi::PANGO_BIDI_TYPE_AN,
671            Self::Cs => ffi::PANGO_BIDI_TYPE_CS,
672            Self::Nsm => ffi::PANGO_BIDI_TYPE_NSM,
673            Self::Bn => ffi::PANGO_BIDI_TYPE_BN,
674            Self::B => ffi::PANGO_BIDI_TYPE_B,
675            Self::S => ffi::PANGO_BIDI_TYPE_S,
676            Self::Ws => ffi::PANGO_BIDI_TYPE_WS,
677            Self::On => ffi::PANGO_BIDI_TYPE_ON,
678            Self::Lri => ffi::PANGO_BIDI_TYPE_LRI,
679            Self::Rli => ffi::PANGO_BIDI_TYPE_RLI,
680            Self::Fsi => ffi::PANGO_BIDI_TYPE_FSI,
681            Self::Pdi => ffi::PANGO_BIDI_TYPE_PDI,
682            Self::__Unknown(value) => value,
683        }
684    }
685}
686
687#[allow(deprecated)]
688#[doc(hidden)]
689impl FromGlib<ffi::PangoBidiType> for BidiType {
690    unsafe fn from_glib(value: ffi::PangoBidiType) -> Self {
691        match value {
692            ffi::PANGO_BIDI_TYPE_L => Self::L,
693            ffi::PANGO_BIDI_TYPE_LRE => Self::Lre,
694            ffi::PANGO_BIDI_TYPE_LRO => Self::Lro,
695            ffi::PANGO_BIDI_TYPE_R => Self::R,
696            ffi::PANGO_BIDI_TYPE_AL => Self::Al,
697            ffi::PANGO_BIDI_TYPE_RLE => Self::Rle,
698            ffi::PANGO_BIDI_TYPE_RLO => Self::Rlo,
699            ffi::PANGO_BIDI_TYPE_PDF => Self::Pdf,
700            ffi::PANGO_BIDI_TYPE_EN => Self::En,
701            ffi::PANGO_BIDI_TYPE_ES => Self::Es,
702            ffi::PANGO_BIDI_TYPE_ET => Self::Et,
703            ffi::PANGO_BIDI_TYPE_AN => Self::An,
704            ffi::PANGO_BIDI_TYPE_CS => Self::Cs,
705            ffi::PANGO_BIDI_TYPE_NSM => Self::Nsm,
706            ffi::PANGO_BIDI_TYPE_BN => Self::Bn,
707            ffi::PANGO_BIDI_TYPE_B => Self::B,
708            ffi::PANGO_BIDI_TYPE_S => Self::S,
709            ffi::PANGO_BIDI_TYPE_WS => Self::Ws,
710            ffi::PANGO_BIDI_TYPE_ON => Self::On,
711            ffi::PANGO_BIDI_TYPE_LRI => Self::Lri,
712            ffi::PANGO_BIDI_TYPE_RLI => Self::Rli,
713            ffi::PANGO_BIDI_TYPE_FSI => Self::Fsi,
714            ffi::PANGO_BIDI_TYPE_PDI => Self::Pdi,
715            value => Self::__Unknown(value),
716        }
717    }
718}
719
720#[allow(deprecated)]
721impl StaticType for BidiType {
722    #[inline]
723    #[doc(alias = "pango_bidi_type_get_type")]
724    fn static_type() -> glib::Type {
725        unsafe { from_glib(ffi::pango_bidi_type_get_type()) }
726    }
727}
728
729#[allow(deprecated)]
730impl glib::HasParamSpec for BidiType {
731    type ParamSpec = glib::ParamSpecEnum;
732    type SetValue = Self;
733    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
734
735    fn param_spec_builder() -> Self::BuilderFn {
736        Self::ParamSpec::builder_with_default
737    }
738}
739
740#[allow(deprecated)]
741impl glib::value::ValueType for BidiType {
742    type Type = Self;
743}
744
745#[allow(deprecated)]
746unsafe impl<'a> glib::value::FromValue<'a> for BidiType {
747    type Checker = glib::value::GenericValueTypeChecker<Self>;
748
749    #[inline]
750    unsafe fn from_value(value: &'a glib::Value) -> Self {
751        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
752    }
753}
754
755#[allow(deprecated)]
756impl ToValue for BidiType {
757    #[inline]
758    fn to_value(&self) -> glib::Value {
759        let mut value = glib::Value::for_value_type::<Self>();
760        unsafe {
761            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
762        }
763        value
764    }
765
766    #[inline]
767    fn value_type(&self) -> glib::Type {
768        Self::static_type()
769    }
770}
771
772#[allow(deprecated)]
773impl From<BidiType> for glib::Value {
774    #[inline]
775    fn from(v: BidiType) -> Self {
776        ToValue::to_value(&v)
777    }
778}
779
780/// [`CoverageLevel`][crate::CoverageLevel] is used to indicate how well a font can
781/// represent a particular Unicode character for a particular script.
782///
783/// Since 1.44, only [`None`][Self::None] and [`Exact`][Self::Exact]
784/// will be returned.
785#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
786#[non_exhaustive]
787#[doc(alias = "PangoCoverageLevel")]
788pub enum CoverageLevel {
789    /// The character is not representable with
790    ///   the font.
791    #[doc(alias = "PANGO_COVERAGE_NONE")]
792    None,
793    /// The character is represented in a
794    ///   way that may be comprehensible but is not the correct
795    ///   graphical form. For instance, a Hangul character represented
796    ///   as a a sequence of Jamos, or a Latin transliteration of a
797    ///   Cyrillic word.
798    #[doc(alias = "PANGO_COVERAGE_FALLBACK")]
799    Fallback,
800    /// The character is represented as
801    ///   basically the correct graphical form, but with a stylistic
802    ///   variant inappropriate for the current script.
803    #[doc(alias = "PANGO_COVERAGE_APPROXIMATE")]
804    Approximate,
805    /// The character is represented as the
806    ///   correct graphical form.
807    #[doc(alias = "PANGO_COVERAGE_EXACT")]
808    Exact,
809    #[doc(hidden)]
810    __Unknown(i32),
811}
812
813#[doc(hidden)]
814impl IntoGlib for CoverageLevel {
815    type GlibType = ffi::PangoCoverageLevel;
816
817    #[inline]
818    fn into_glib(self) -> ffi::PangoCoverageLevel {
819        match self {
820            Self::None => ffi::PANGO_COVERAGE_NONE,
821            Self::Fallback => ffi::PANGO_COVERAGE_FALLBACK,
822            Self::Approximate => ffi::PANGO_COVERAGE_APPROXIMATE,
823            Self::Exact => ffi::PANGO_COVERAGE_EXACT,
824            Self::__Unknown(value) => value,
825        }
826    }
827}
828
829#[doc(hidden)]
830impl FromGlib<ffi::PangoCoverageLevel> for CoverageLevel {
831    #[inline]
832    unsafe fn from_glib(value: ffi::PangoCoverageLevel) -> Self {
833        match value {
834            ffi::PANGO_COVERAGE_NONE => Self::None,
835            ffi::PANGO_COVERAGE_FALLBACK => Self::Fallback,
836            ffi::PANGO_COVERAGE_APPROXIMATE => Self::Approximate,
837            ffi::PANGO_COVERAGE_EXACT => Self::Exact,
838            value => Self::__Unknown(value),
839        }
840    }
841}
842
843impl StaticType for CoverageLevel {
844    #[inline]
845    #[doc(alias = "pango_coverage_level_get_type")]
846    fn static_type() -> glib::Type {
847        unsafe { from_glib(ffi::pango_coverage_level_get_type()) }
848    }
849}
850
851impl glib::HasParamSpec for CoverageLevel {
852    type ParamSpec = glib::ParamSpecEnum;
853    type SetValue = Self;
854    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
855
856    fn param_spec_builder() -> Self::BuilderFn {
857        Self::ParamSpec::builder_with_default
858    }
859}
860
861impl glib::value::ValueType for CoverageLevel {
862    type Type = Self;
863}
864
865unsafe impl<'a> glib::value::FromValue<'a> for CoverageLevel {
866    type Checker = glib::value::GenericValueTypeChecker<Self>;
867
868    #[inline]
869    unsafe fn from_value(value: &'a glib::Value) -> Self {
870        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
871    }
872}
873
874impl ToValue for CoverageLevel {
875    #[inline]
876    fn to_value(&self) -> glib::Value {
877        let mut value = glib::Value::for_value_type::<Self>();
878        unsafe {
879            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
880        }
881        value
882    }
883
884    #[inline]
885    fn value_type(&self) -> glib::Type {
886        Self::static_type()
887    }
888}
889
890impl From<CoverageLevel> for glib::Value {
891    #[inline]
892    fn from(v: CoverageLevel) -> Self {
893        ToValue::to_value(&v)
894    }
895}
896
897/// [`Direction`][crate::Direction] represents a direction in the Unicode bidirectional
898/// algorithm.
899///
900/// Not every value in this enumeration makes sense for every usage of
901/// [`Direction`][crate::Direction]; for example, the return value of [`unichar_direction()`][crate::unichar_direction()]
902/// and [`find_base_dir()`][crate::find_base_dir()] cannot be `PANGO_DIRECTION_WEAK_LTR` or
903/// `PANGO_DIRECTION_WEAK_RTL`, since every character is either neutral
904/// or has a strong direction; on the other hand `PANGO_DIRECTION_NEUTRAL`
905/// doesn't make sense to pass to [`itemize_with_base_dir()`][crate::itemize_with_base_dir()].
906///
907/// The `PANGO_DIRECTION_TTB_LTR`, `PANGO_DIRECTION_TTB_RTL` values come from
908/// an earlier interpretation of this enumeration as the writing direction
909/// of a block of text and are no longer used. See [`Gravity`][crate::Gravity] for how
910/// vertical text is handled in Pango.
911///
912/// If you are interested in text direction, you should really use fribidi
913/// directly. [`Direction`][crate::Direction] is only retained because it is used in some
914/// public apis.
915#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
916#[non_exhaustive]
917#[doc(alias = "PangoDirection")]
918pub enum Direction {
919    /// A strong left-to-right direction
920    #[doc(alias = "PANGO_DIRECTION_LTR")]
921    Ltr,
922    /// A strong right-to-left direction
923    #[doc(alias = "PANGO_DIRECTION_RTL")]
924    Rtl,
925    /// Deprecated value; treated the
926    ///   same as `PANGO_DIRECTION_RTL`.
927    #[doc(alias = "PANGO_DIRECTION_TTB_LTR")]
928    TtbLtr,
929    /// Deprecated value; treated the
930    ///   same as `PANGO_DIRECTION_LTR`
931    #[doc(alias = "PANGO_DIRECTION_TTB_RTL")]
932    TtbRtl,
933    /// A weak left-to-right direction
934    #[doc(alias = "PANGO_DIRECTION_WEAK_LTR")]
935    WeakLtr,
936    /// A weak right-to-left direction
937    #[doc(alias = "PANGO_DIRECTION_WEAK_RTL")]
938    WeakRtl,
939    /// No direction specified
940    #[doc(alias = "PANGO_DIRECTION_NEUTRAL")]
941    Neutral,
942    #[doc(hidden)]
943    __Unknown(i32),
944}
945
946#[doc(hidden)]
947impl IntoGlib for Direction {
948    type GlibType = ffi::PangoDirection;
949
950    #[inline]
951    fn into_glib(self) -> ffi::PangoDirection {
952        match self {
953            Self::Ltr => ffi::PANGO_DIRECTION_LTR,
954            Self::Rtl => ffi::PANGO_DIRECTION_RTL,
955            Self::TtbLtr => ffi::PANGO_DIRECTION_TTB_LTR,
956            Self::TtbRtl => ffi::PANGO_DIRECTION_TTB_RTL,
957            Self::WeakLtr => ffi::PANGO_DIRECTION_WEAK_LTR,
958            Self::WeakRtl => ffi::PANGO_DIRECTION_WEAK_RTL,
959            Self::Neutral => ffi::PANGO_DIRECTION_NEUTRAL,
960            Self::__Unknown(value) => value,
961        }
962    }
963}
964
965#[doc(hidden)]
966impl FromGlib<ffi::PangoDirection> for Direction {
967    #[inline]
968    unsafe fn from_glib(value: ffi::PangoDirection) -> Self {
969        match value {
970            ffi::PANGO_DIRECTION_LTR => Self::Ltr,
971            ffi::PANGO_DIRECTION_RTL => Self::Rtl,
972            ffi::PANGO_DIRECTION_TTB_LTR => Self::TtbLtr,
973            ffi::PANGO_DIRECTION_TTB_RTL => Self::TtbRtl,
974            ffi::PANGO_DIRECTION_WEAK_LTR => Self::WeakLtr,
975            ffi::PANGO_DIRECTION_WEAK_RTL => Self::WeakRtl,
976            ffi::PANGO_DIRECTION_NEUTRAL => Self::Neutral,
977            value => Self::__Unknown(value),
978        }
979    }
980}
981
982impl StaticType for Direction {
983    #[inline]
984    #[doc(alias = "pango_direction_get_type")]
985    fn static_type() -> glib::Type {
986        unsafe { from_glib(ffi::pango_direction_get_type()) }
987    }
988}
989
990impl glib::HasParamSpec for Direction {
991    type ParamSpec = glib::ParamSpecEnum;
992    type SetValue = Self;
993    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
994
995    fn param_spec_builder() -> Self::BuilderFn {
996        Self::ParamSpec::builder_with_default
997    }
998}
999
1000impl glib::value::ValueType for Direction {
1001    type Type = Self;
1002}
1003
1004unsafe impl<'a> glib::value::FromValue<'a> for Direction {
1005    type Checker = glib::value::GenericValueTypeChecker<Self>;
1006
1007    #[inline]
1008    unsafe fn from_value(value: &'a glib::Value) -> Self {
1009        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1010    }
1011}
1012
1013impl ToValue for Direction {
1014    #[inline]
1015    fn to_value(&self) -> glib::Value {
1016        let mut value = glib::Value::for_value_type::<Self>();
1017        unsafe {
1018            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1019        }
1020        value
1021    }
1022
1023    #[inline]
1024    fn value_type(&self) -> glib::Type {
1025        Self::static_type()
1026    }
1027}
1028
1029impl From<Direction> for glib::Value {
1030    #[inline]
1031    fn from(v: Direction) -> Self {
1032        ToValue::to_value(&v)
1033    }
1034}
1035
1036/// [`EllipsizeMode`][crate::EllipsizeMode] describes what sort of ellipsization
1037/// should be applied to text.
1038///
1039/// In the ellipsization process characters are removed from the
1040/// text in order to make it fit to a given width and replaced
1041/// with an ellipsis.
1042#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1043#[non_exhaustive]
1044#[doc(alias = "PangoEllipsizeMode")]
1045pub enum EllipsizeMode {
1046    /// No ellipsization
1047    #[doc(alias = "PANGO_ELLIPSIZE_NONE")]
1048    None,
1049    /// Omit characters at the start of the text
1050    #[doc(alias = "PANGO_ELLIPSIZE_START")]
1051    Start,
1052    /// Omit characters in the middle of the text
1053    #[doc(alias = "PANGO_ELLIPSIZE_MIDDLE")]
1054    Middle,
1055    /// Omit characters at the end of the text
1056    #[doc(alias = "PANGO_ELLIPSIZE_END")]
1057    End,
1058    #[doc(hidden)]
1059    __Unknown(i32),
1060}
1061
1062#[doc(hidden)]
1063impl IntoGlib for EllipsizeMode {
1064    type GlibType = ffi::PangoEllipsizeMode;
1065
1066    #[inline]
1067    fn into_glib(self) -> ffi::PangoEllipsizeMode {
1068        match self {
1069            Self::None => ffi::PANGO_ELLIPSIZE_NONE,
1070            Self::Start => ffi::PANGO_ELLIPSIZE_START,
1071            Self::Middle => ffi::PANGO_ELLIPSIZE_MIDDLE,
1072            Self::End => ffi::PANGO_ELLIPSIZE_END,
1073            Self::__Unknown(value) => value,
1074        }
1075    }
1076}
1077
1078#[doc(hidden)]
1079impl FromGlib<ffi::PangoEllipsizeMode> for EllipsizeMode {
1080    #[inline]
1081    unsafe fn from_glib(value: ffi::PangoEllipsizeMode) -> Self {
1082        match value {
1083            ffi::PANGO_ELLIPSIZE_NONE => Self::None,
1084            ffi::PANGO_ELLIPSIZE_START => Self::Start,
1085            ffi::PANGO_ELLIPSIZE_MIDDLE => Self::Middle,
1086            ffi::PANGO_ELLIPSIZE_END => Self::End,
1087            value => Self::__Unknown(value),
1088        }
1089    }
1090}
1091
1092impl StaticType for EllipsizeMode {
1093    #[inline]
1094    #[doc(alias = "pango_ellipsize_mode_get_type")]
1095    fn static_type() -> glib::Type {
1096        unsafe { from_glib(ffi::pango_ellipsize_mode_get_type()) }
1097    }
1098}
1099
1100impl glib::HasParamSpec for EllipsizeMode {
1101    type ParamSpec = glib::ParamSpecEnum;
1102    type SetValue = Self;
1103    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1104
1105    fn param_spec_builder() -> Self::BuilderFn {
1106        Self::ParamSpec::builder_with_default
1107    }
1108}
1109
1110impl glib::value::ValueType for EllipsizeMode {
1111    type Type = Self;
1112}
1113
1114unsafe impl<'a> glib::value::FromValue<'a> for EllipsizeMode {
1115    type Checker = glib::value::GenericValueTypeChecker<Self>;
1116
1117    #[inline]
1118    unsafe fn from_value(value: &'a glib::Value) -> Self {
1119        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1120    }
1121}
1122
1123impl ToValue for EllipsizeMode {
1124    #[inline]
1125    fn to_value(&self) -> glib::Value {
1126        let mut value = glib::Value::for_value_type::<Self>();
1127        unsafe {
1128            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1129        }
1130        value
1131    }
1132
1133    #[inline]
1134    fn value_type(&self) -> glib::Type {
1135        Self::static_type()
1136    }
1137}
1138
1139impl From<EllipsizeMode> for glib::Value {
1140    #[inline]
1141    fn from(v: EllipsizeMode) -> Self {
1142        ToValue::to_value(&v)
1143    }
1144}
1145
1146/// Specifies whether a font should or should not have color glyphs.
1147#[cfg(feature = "v1_57")]
1148#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1149#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1150#[non_exhaustive]
1151#[doc(alias = "PangoFontColor")]
1152pub enum FontColor {
1153    /// The font should not have color glyphs
1154    #[doc(alias = "PANGO_FONT_COLOR_FORBIDDEN")]
1155    Forbidden,
1156    /// The font should have color glyphs
1157    #[doc(alias = "PANGO_FONT_COLOR_REQUIRED")]
1158    Required,
1159    /// The font may or may not use color
1160    #[doc(alias = "PANGO_FONT_COLOR_DONT_CARE")]
1161    DontCare,
1162    #[doc(hidden)]
1163    __Unknown(i32),
1164}
1165
1166#[cfg(feature = "v1_57")]
1167#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1168#[doc(hidden)]
1169impl IntoGlib for FontColor {
1170    type GlibType = ffi::PangoFontColor;
1171
1172    #[inline]
1173    fn into_glib(self) -> ffi::PangoFontColor {
1174        match self {
1175            Self::Forbidden => ffi::PANGO_FONT_COLOR_FORBIDDEN,
1176            Self::Required => ffi::PANGO_FONT_COLOR_REQUIRED,
1177            Self::DontCare => ffi::PANGO_FONT_COLOR_DONT_CARE,
1178            Self::__Unknown(value) => value,
1179        }
1180    }
1181}
1182
1183#[cfg(feature = "v1_57")]
1184#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1185#[doc(hidden)]
1186impl FromGlib<ffi::PangoFontColor> for FontColor {
1187    #[inline]
1188    unsafe fn from_glib(value: ffi::PangoFontColor) -> Self {
1189        match value {
1190            ffi::PANGO_FONT_COLOR_FORBIDDEN => Self::Forbidden,
1191            ffi::PANGO_FONT_COLOR_REQUIRED => Self::Required,
1192            ffi::PANGO_FONT_COLOR_DONT_CARE => Self::DontCare,
1193            value => Self::__Unknown(value),
1194        }
1195    }
1196}
1197
1198#[cfg(feature = "v1_57")]
1199#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1200impl StaticType for FontColor {
1201    #[inline]
1202    #[doc(alias = "pango_font_color_get_type")]
1203    fn static_type() -> glib::Type {
1204        unsafe { from_glib(ffi::pango_font_color_get_type()) }
1205    }
1206}
1207
1208#[cfg(feature = "v1_57")]
1209#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1210impl glib::HasParamSpec for FontColor {
1211    type ParamSpec = glib::ParamSpecEnum;
1212    type SetValue = Self;
1213    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1214
1215    fn param_spec_builder() -> Self::BuilderFn {
1216        Self::ParamSpec::builder_with_default
1217    }
1218}
1219
1220#[cfg(feature = "v1_57")]
1221#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1222impl glib::value::ValueType for FontColor {
1223    type Type = Self;
1224}
1225
1226#[cfg(feature = "v1_57")]
1227#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1228unsafe impl<'a> glib::value::FromValue<'a> for FontColor {
1229    type Checker = glib::value::GenericValueTypeChecker<Self>;
1230
1231    #[inline]
1232    unsafe fn from_value(value: &'a glib::Value) -> Self {
1233        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1234    }
1235}
1236
1237#[cfg(feature = "v1_57")]
1238#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1239impl ToValue for FontColor {
1240    #[inline]
1241    fn to_value(&self) -> glib::Value {
1242        let mut value = glib::Value::for_value_type::<Self>();
1243        unsafe {
1244            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1245        }
1246        value
1247    }
1248
1249    #[inline]
1250    fn value_type(&self) -> glib::Type {
1251        Self::static_type()
1252    }
1253}
1254
1255#[cfg(feature = "v1_57")]
1256#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1257impl From<FontColor> for glib::Value {
1258    #[inline]
1259    fn from(v: FontColor) -> Self {
1260        ToValue::to_value(&v)
1261    }
1262}
1263
1264/// An enumeration that affects font sizes for superscript
1265/// and subscript positioning and for (emulated) Small Caps.
1266#[cfg(feature = "v1_50")]
1267#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1268#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1269#[non_exhaustive]
1270#[doc(alias = "PangoFontScale")]
1271pub enum FontScale {
1272    /// Leave the font size unchanged
1273    #[doc(alias = "PANGO_FONT_SCALE_NONE")]
1274    None,
1275    /// Change the font to a size suitable for superscripts
1276    #[doc(alias = "PANGO_FONT_SCALE_SUPERSCRIPT")]
1277    Superscript,
1278    /// Change the font to a size suitable for subscripts
1279    #[doc(alias = "PANGO_FONT_SCALE_SUBSCRIPT")]
1280    Subscript,
1281    /// Change the font to a size suitable for Small Caps
1282    #[doc(alias = "PANGO_FONT_SCALE_SMALL_CAPS")]
1283    SmallCaps,
1284    #[doc(hidden)]
1285    __Unknown(i32),
1286}
1287
1288#[cfg(feature = "v1_50")]
1289#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1290#[doc(hidden)]
1291impl IntoGlib for FontScale {
1292    type GlibType = ffi::PangoFontScale;
1293
1294    #[inline]
1295    fn into_glib(self) -> ffi::PangoFontScale {
1296        match self {
1297            Self::None => ffi::PANGO_FONT_SCALE_NONE,
1298            Self::Superscript => ffi::PANGO_FONT_SCALE_SUPERSCRIPT,
1299            Self::Subscript => ffi::PANGO_FONT_SCALE_SUBSCRIPT,
1300            Self::SmallCaps => ffi::PANGO_FONT_SCALE_SMALL_CAPS,
1301            Self::__Unknown(value) => value,
1302        }
1303    }
1304}
1305
1306#[cfg(feature = "v1_50")]
1307#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1308#[doc(hidden)]
1309impl FromGlib<ffi::PangoFontScale> for FontScale {
1310    #[inline]
1311    unsafe fn from_glib(value: ffi::PangoFontScale) -> Self {
1312        match value {
1313            ffi::PANGO_FONT_SCALE_NONE => Self::None,
1314            ffi::PANGO_FONT_SCALE_SUPERSCRIPT => Self::Superscript,
1315            ffi::PANGO_FONT_SCALE_SUBSCRIPT => Self::Subscript,
1316            ffi::PANGO_FONT_SCALE_SMALL_CAPS => Self::SmallCaps,
1317            value => Self::__Unknown(value),
1318        }
1319    }
1320}
1321
1322#[cfg(feature = "v1_50")]
1323#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1324impl StaticType for FontScale {
1325    #[inline]
1326    #[doc(alias = "pango_font_scale_get_type")]
1327    fn static_type() -> glib::Type {
1328        unsafe { from_glib(ffi::pango_font_scale_get_type()) }
1329    }
1330}
1331
1332#[cfg(feature = "v1_50")]
1333#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1334impl glib::HasParamSpec for FontScale {
1335    type ParamSpec = glib::ParamSpecEnum;
1336    type SetValue = Self;
1337    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1338
1339    fn param_spec_builder() -> Self::BuilderFn {
1340        Self::ParamSpec::builder_with_default
1341    }
1342}
1343
1344#[cfg(feature = "v1_50")]
1345#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1346impl glib::value::ValueType for FontScale {
1347    type Type = Self;
1348}
1349
1350#[cfg(feature = "v1_50")]
1351#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1352unsafe impl<'a> glib::value::FromValue<'a> for FontScale {
1353    type Checker = glib::value::GenericValueTypeChecker<Self>;
1354
1355    #[inline]
1356    unsafe fn from_value(value: &'a glib::Value) -> Self {
1357        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1358    }
1359}
1360
1361#[cfg(feature = "v1_50")]
1362#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1363impl ToValue for FontScale {
1364    #[inline]
1365    fn to_value(&self) -> glib::Value {
1366        let mut value = glib::Value::for_value_type::<Self>();
1367        unsafe {
1368            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1369        }
1370        value
1371    }
1372
1373    #[inline]
1374    fn value_type(&self) -> glib::Type {
1375        Self::static_type()
1376    }
1377}
1378
1379#[cfg(feature = "v1_50")]
1380#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1381impl From<FontScale> for glib::Value {
1382    #[inline]
1383    fn from(v: FontScale) -> Self {
1384        ToValue::to_value(&v)
1385    }
1386}
1387
1388/// [`Gravity`][crate::Gravity] represents the orientation of glyphs in a segment
1389/// of text.
1390///
1391/// This is useful when rendering vertical text layouts. In those situations,
1392/// the layout is rotated using a non-identity [`Matrix`][crate::Matrix], and then
1393/// glyph orientation is controlled using [`Gravity`][crate::Gravity].
1394///
1395/// Not every value in this enumeration makes sense for every usage of
1396/// [`Gravity`][crate::Gravity]; for example, [`Auto`][Self::Auto] only can be passed to
1397/// [`Context::set_base_gravity()`][crate::Context::set_base_gravity()] and can only be returned by
1398/// [`Context::base_gravity()`][crate::Context::base_gravity()].
1399///
1400/// See also: [`GravityHint`][crate::GravityHint]
1401#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1402#[non_exhaustive]
1403#[doc(alias = "PangoGravity")]
1404pub enum Gravity {
1405    /// img align="right" valign="center" src="m-south.png"
1406    #[doc(alias = "PANGO_GRAVITY_SOUTH")]
1407    South,
1408    /// img align="right" valign="center" src="m-east.png"
1409    #[doc(alias = "PANGO_GRAVITY_EAST")]
1410    East,
1411    /// img align="right" valign="cener" src="m-north.png"
1412    #[doc(alias = "PANGO_GRAVITY_NORTH")]
1413    North,
1414    /// img align="right" valign="center" src="m-west.png"
1415    #[doc(alias = "PANGO_GRAVITY_WEST")]
1416    West,
1417    /// Gravity is resolved from the context matrix
1418    #[doc(alias = "PANGO_GRAVITY_AUTO")]
1419    Auto,
1420    #[doc(hidden)]
1421    __Unknown(i32),
1422}
1423
1424impl Gravity {
1425    #[doc(alias = "pango_gravity_get_for_matrix")]
1426    #[doc(alias = "get_for_matrix")]
1427    pub fn for_matrix(matrix: Option<&Matrix>) -> Gravity {
1428        unsafe { from_glib(ffi::pango_gravity_get_for_matrix(matrix.to_glib_none().0)) }
1429    }
1430
1431    #[doc(alias = "pango_gravity_get_for_script")]
1432    #[doc(alias = "get_for_script")]
1433    pub fn for_script(script: Script, base_gravity: Gravity, hint: GravityHint) -> Gravity {
1434        unsafe {
1435            from_glib(ffi::pango_gravity_get_for_script(
1436                script.into_glib(),
1437                base_gravity.into_glib(),
1438                hint.into_glib(),
1439            ))
1440        }
1441    }
1442
1443    #[doc(alias = "pango_gravity_get_for_script_and_width")]
1444    #[doc(alias = "get_for_script_and_width")]
1445    pub fn for_script_and_width(
1446        script: Script,
1447        wide: bool,
1448        base_gravity: Gravity,
1449        hint: GravityHint,
1450    ) -> Gravity {
1451        unsafe {
1452            from_glib(ffi::pango_gravity_get_for_script_and_width(
1453                script.into_glib(),
1454                wide.into_glib(),
1455                base_gravity.into_glib(),
1456                hint.into_glib(),
1457            ))
1458        }
1459    }
1460
1461    #[doc(alias = "pango_gravity_to_rotation")]
1462    pub fn to_rotation(self) -> f64 {
1463        unsafe { ffi::pango_gravity_to_rotation(self.into_glib()) }
1464    }
1465}
1466
1467#[doc(hidden)]
1468impl IntoGlib for Gravity {
1469    type GlibType = ffi::PangoGravity;
1470
1471    #[inline]
1472    fn into_glib(self) -> ffi::PangoGravity {
1473        match self {
1474            Self::South => ffi::PANGO_GRAVITY_SOUTH,
1475            Self::East => ffi::PANGO_GRAVITY_EAST,
1476            Self::North => ffi::PANGO_GRAVITY_NORTH,
1477            Self::West => ffi::PANGO_GRAVITY_WEST,
1478            Self::Auto => ffi::PANGO_GRAVITY_AUTO,
1479            Self::__Unknown(value) => value,
1480        }
1481    }
1482}
1483
1484#[doc(hidden)]
1485impl FromGlib<ffi::PangoGravity> for Gravity {
1486    #[inline]
1487    unsafe fn from_glib(value: ffi::PangoGravity) -> Self {
1488        match value {
1489            ffi::PANGO_GRAVITY_SOUTH => Self::South,
1490            ffi::PANGO_GRAVITY_EAST => Self::East,
1491            ffi::PANGO_GRAVITY_NORTH => Self::North,
1492            ffi::PANGO_GRAVITY_WEST => Self::West,
1493            ffi::PANGO_GRAVITY_AUTO => Self::Auto,
1494            value => Self::__Unknown(value),
1495        }
1496    }
1497}
1498
1499impl StaticType for Gravity {
1500    #[inline]
1501    #[doc(alias = "pango_gravity_get_type")]
1502    fn static_type() -> glib::Type {
1503        unsafe { from_glib(ffi::pango_gravity_get_type()) }
1504    }
1505}
1506
1507impl glib::HasParamSpec for Gravity {
1508    type ParamSpec = glib::ParamSpecEnum;
1509    type SetValue = Self;
1510    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1511
1512    fn param_spec_builder() -> Self::BuilderFn {
1513        Self::ParamSpec::builder_with_default
1514    }
1515}
1516
1517impl glib::value::ValueType for Gravity {
1518    type Type = Self;
1519}
1520
1521unsafe impl<'a> glib::value::FromValue<'a> for Gravity {
1522    type Checker = glib::value::GenericValueTypeChecker<Self>;
1523
1524    #[inline]
1525    unsafe fn from_value(value: &'a glib::Value) -> Self {
1526        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1527    }
1528}
1529
1530impl ToValue for Gravity {
1531    #[inline]
1532    fn to_value(&self) -> glib::Value {
1533        let mut value = glib::Value::for_value_type::<Self>();
1534        unsafe {
1535            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1536        }
1537        value
1538    }
1539
1540    #[inline]
1541    fn value_type(&self) -> glib::Type {
1542        Self::static_type()
1543    }
1544}
1545
1546impl From<Gravity> for glib::Value {
1547    #[inline]
1548    fn from(v: Gravity) -> Self {
1549        ToValue::to_value(&v)
1550    }
1551}
1552
1553/// [`GravityHint`][crate::GravityHint] defines how horizontal scripts should behave in a
1554/// vertical context.
1555///
1556/// That is, English excerpts in a vertical paragraph for example.
1557///
1558/// See also [`Gravity`][crate::Gravity]
1559#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1560#[non_exhaustive]
1561#[doc(alias = "PangoGravityHint")]
1562pub enum GravityHint {
1563    /// scripts will take their natural gravity based
1564    ///   on the base gravity and the script.  This is the default.
1565    #[doc(alias = "PANGO_GRAVITY_HINT_NATURAL")]
1566    Natural,
1567    /// always use the base gravity set, regardless of
1568    ///   the script.
1569    #[doc(alias = "PANGO_GRAVITY_HINT_STRONG")]
1570    Strong,
1571    /// for scripts not in their natural direction (eg.
1572    ///   Latin in East gravity), choose per-script gravity such that every script
1573    ///   respects the line progression. This means, Latin and Arabic will take
1574    ///   opposite gravities and both flow top-to-bottom for example.
1575    #[doc(alias = "PANGO_GRAVITY_HINT_LINE")]
1576    Line,
1577    #[doc(hidden)]
1578    __Unknown(i32),
1579}
1580
1581#[doc(hidden)]
1582impl IntoGlib for GravityHint {
1583    type GlibType = ffi::PangoGravityHint;
1584
1585    #[inline]
1586    fn into_glib(self) -> ffi::PangoGravityHint {
1587        match self {
1588            Self::Natural => ffi::PANGO_GRAVITY_HINT_NATURAL,
1589            Self::Strong => ffi::PANGO_GRAVITY_HINT_STRONG,
1590            Self::Line => ffi::PANGO_GRAVITY_HINT_LINE,
1591            Self::__Unknown(value) => value,
1592        }
1593    }
1594}
1595
1596#[doc(hidden)]
1597impl FromGlib<ffi::PangoGravityHint> for GravityHint {
1598    #[inline]
1599    unsafe fn from_glib(value: ffi::PangoGravityHint) -> Self {
1600        match value {
1601            ffi::PANGO_GRAVITY_HINT_NATURAL => Self::Natural,
1602            ffi::PANGO_GRAVITY_HINT_STRONG => Self::Strong,
1603            ffi::PANGO_GRAVITY_HINT_LINE => Self::Line,
1604            value => Self::__Unknown(value),
1605        }
1606    }
1607}
1608
1609impl StaticType for GravityHint {
1610    #[inline]
1611    #[doc(alias = "pango_gravity_hint_get_type")]
1612    fn static_type() -> glib::Type {
1613        unsafe { from_glib(ffi::pango_gravity_hint_get_type()) }
1614    }
1615}
1616
1617impl glib::HasParamSpec for GravityHint {
1618    type ParamSpec = glib::ParamSpecEnum;
1619    type SetValue = Self;
1620    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1621
1622    fn param_spec_builder() -> Self::BuilderFn {
1623        Self::ParamSpec::builder_with_default
1624    }
1625}
1626
1627impl glib::value::ValueType for GravityHint {
1628    type Type = Self;
1629}
1630
1631unsafe impl<'a> glib::value::FromValue<'a> for GravityHint {
1632    type Checker = glib::value::GenericValueTypeChecker<Self>;
1633
1634    #[inline]
1635    unsafe fn from_value(value: &'a glib::Value) -> Self {
1636        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1637    }
1638}
1639
1640impl ToValue for GravityHint {
1641    #[inline]
1642    fn to_value(&self) -> glib::Value {
1643        let mut value = glib::Value::for_value_type::<Self>();
1644        unsafe {
1645            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1646        }
1647        value
1648    }
1649
1650    #[inline]
1651    fn value_type(&self) -> glib::Type {
1652        Self::static_type()
1653    }
1654}
1655
1656impl From<GravityHint> for glib::Value {
1657    #[inline]
1658    fn from(v: GravityHint) -> Self {
1659        ToValue::to_value(&v)
1660    }
1661}
1662
1663/// The [`Overline`][crate::Overline] enumeration is used to specify whether text
1664/// should be overlined, and if so, the type of line.
1665#[cfg(feature = "v1_46")]
1666#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1667#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1668#[non_exhaustive]
1669#[doc(alias = "PangoOverline")]
1670pub enum Overline {
1671    /// no overline should be drawn
1672    #[doc(alias = "PANGO_OVERLINE_NONE")]
1673    None,
1674    /// Draw a single line above the ink
1675    ///   extents of the text being underlined.
1676    #[doc(alias = "PANGO_OVERLINE_SINGLE")]
1677    Single,
1678    #[doc(hidden)]
1679    __Unknown(i32),
1680}
1681
1682#[cfg(feature = "v1_46")]
1683#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1684#[doc(hidden)]
1685impl IntoGlib for Overline {
1686    type GlibType = ffi::PangoOverline;
1687
1688    #[inline]
1689    fn into_glib(self) -> ffi::PangoOverline {
1690        match self {
1691            Self::None => ffi::PANGO_OVERLINE_NONE,
1692            Self::Single => ffi::PANGO_OVERLINE_SINGLE,
1693            Self::__Unknown(value) => value,
1694        }
1695    }
1696}
1697
1698#[cfg(feature = "v1_46")]
1699#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1700#[doc(hidden)]
1701impl FromGlib<ffi::PangoOverline> for Overline {
1702    #[inline]
1703    unsafe fn from_glib(value: ffi::PangoOverline) -> Self {
1704        match value {
1705            ffi::PANGO_OVERLINE_NONE => Self::None,
1706            ffi::PANGO_OVERLINE_SINGLE => Self::Single,
1707            value => Self::__Unknown(value),
1708        }
1709    }
1710}
1711
1712#[cfg(feature = "v1_46")]
1713#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1714impl StaticType for Overline {
1715    #[inline]
1716    #[doc(alias = "pango_overline_get_type")]
1717    fn static_type() -> glib::Type {
1718        unsafe { from_glib(ffi::pango_overline_get_type()) }
1719    }
1720}
1721
1722#[cfg(feature = "v1_46")]
1723#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1724impl glib::HasParamSpec for Overline {
1725    type ParamSpec = glib::ParamSpecEnum;
1726    type SetValue = Self;
1727    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1728
1729    fn param_spec_builder() -> Self::BuilderFn {
1730        Self::ParamSpec::builder_with_default
1731    }
1732}
1733
1734#[cfg(feature = "v1_46")]
1735#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1736impl glib::value::ValueType for Overline {
1737    type Type = Self;
1738}
1739
1740#[cfg(feature = "v1_46")]
1741#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1742unsafe impl<'a> glib::value::FromValue<'a> for Overline {
1743    type Checker = glib::value::GenericValueTypeChecker<Self>;
1744
1745    #[inline]
1746    unsafe fn from_value(value: &'a glib::Value) -> Self {
1747        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1748    }
1749}
1750
1751#[cfg(feature = "v1_46")]
1752#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1753impl ToValue for Overline {
1754    #[inline]
1755    fn to_value(&self) -> glib::Value {
1756        let mut value = glib::Value::for_value_type::<Self>();
1757        unsafe {
1758            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1759        }
1760        value
1761    }
1762
1763    #[inline]
1764    fn value_type(&self) -> glib::Type {
1765        Self::static_type()
1766    }
1767}
1768
1769#[cfg(feature = "v1_46")]
1770#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1771impl From<Overline> for glib::Value {
1772    #[inline]
1773    fn from(v: Overline) -> Self {
1774        ToValue::to_value(&v)
1775    }
1776}
1777
1778/// [`RenderPart`][crate::RenderPart] defines different items to render for such
1779/// purposes as setting colors.
1780#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1781#[non_exhaustive]
1782#[doc(alias = "PangoRenderPart")]
1783pub enum RenderPart {
1784    /// the text itself
1785    #[doc(alias = "PANGO_RENDER_PART_FOREGROUND")]
1786    Foreground,
1787    /// the area behind the text
1788    #[doc(alias = "PANGO_RENDER_PART_BACKGROUND")]
1789    Background,
1790    /// underlines
1791    #[doc(alias = "PANGO_RENDER_PART_UNDERLINE")]
1792    Underline,
1793    /// strikethrough lines
1794    #[doc(alias = "PANGO_RENDER_PART_STRIKETHROUGH")]
1795    Strikethrough,
1796    /// overlines
1797    #[doc(alias = "PANGO_RENDER_PART_OVERLINE")]
1798    Overline,
1799    #[doc(hidden)]
1800    __Unknown(i32),
1801}
1802
1803#[doc(hidden)]
1804impl IntoGlib for RenderPart {
1805    type GlibType = ffi::PangoRenderPart;
1806
1807    #[inline]
1808    fn into_glib(self) -> ffi::PangoRenderPart {
1809        match self {
1810            Self::Foreground => ffi::PANGO_RENDER_PART_FOREGROUND,
1811            Self::Background => ffi::PANGO_RENDER_PART_BACKGROUND,
1812            Self::Underline => ffi::PANGO_RENDER_PART_UNDERLINE,
1813            Self::Strikethrough => ffi::PANGO_RENDER_PART_STRIKETHROUGH,
1814            Self::Overline => ffi::PANGO_RENDER_PART_OVERLINE,
1815            Self::__Unknown(value) => value,
1816        }
1817    }
1818}
1819
1820#[doc(hidden)]
1821impl FromGlib<ffi::PangoRenderPart> for RenderPart {
1822    #[inline]
1823    unsafe fn from_glib(value: ffi::PangoRenderPart) -> Self {
1824        match value {
1825            ffi::PANGO_RENDER_PART_FOREGROUND => Self::Foreground,
1826            ffi::PANGO_RENDER_PART_BACKGROUND => Self::Background,
1827            ffi::PANGO_RENDER_PART_UNDERLINE => Self::Underline,
1828            ffi::PANGO_RENDER_PART_STRIKETHROUGH => Self::Strikethrough,
1829            ffi::PANGO_RENDER_PART_OVERLINE => Self::Overline,
1830            value => Self::__Unknown(value),
1831        }
1832    }
1833}
1834
1835impl StaticType for RenderPart {
1836    #[inline]
1837    #[doc(alias = "pango_render_part_get_type")]
1838    fn static_type() -> glib::Type {
1839        unsafe { from_glib(ffi::pango_render_part_get_type()) }
1840    }
1841}
1842
1843impl glib::HasParamSpec for RenderPart {
1844    type ParamSpec = glib::ParamSpecEnum;
1845    type SetValue = Self;
1846    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1847
1848    fn param_spec_builder() -> Self::BuilderFn {
1849        Self::ParamSpec::builder_with_default
1850    }
1851}
1852
1853impl glib::value::ValueType for RenderPart {
1854    type Type = Self;
1855}
1856
1857unsafe impl<'a> glib::value::FromValue<'a> for RenderPart {
1858    type Checker = glib::value::GenericValueTypeChecker<Self>;
1859
1860    #[inline]
1861    unsafe fn from_value(value: &'a glib::Value) -> Self {
1862        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1863    }
1864}
1865
1866impl ToValue for RenderPart {
1867    #[inline]
1868    fn to_value(&self) -> glib::Value {
1869        let mut value = glib::Value::for_value_type::<Self>();
1870        unsafe {
1871            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1872        }
1873        value
1874    }
1875
1876    #[inline]
1877    fn value_type(&self) -> glib::Type {
1878        Self::static_type()
1879    }
1880}
1881
1882impl From<RenderPart> for glib::Value {
1883    #[inline]
1884    fn from(v: RenderPart) -> Self {
1885        ToValue::to_value(&v)
1886    }
1887}
1888
1889/// The [`Script`][crate::Script] enumeration identifies different writing
1890/// systems.
1891///
1892/// The values correspond to the names as defined in the Unicode standard. See
1893/// [Unicode Standard Annex 24: Script names](http://www.unicode.org/reports/tr24/)
1894///
1895/// Note that this enumeration is deprecated and will not be updated to include values
1896/// in newer versions of the Unicode standard. Applications should use the
1897/// `GLib::UnicodeScript` enumeration instead,
1898/// whose values are interchangeable with [`Script`][crate::Script].
1899#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1900#[non_exhaustive]
1901#[doc(alias = "PangoScript")]
1902pub enum Script {
1903    /// a value never returned from pango_script_for_unichar()
1904    #[doc(alias = "PANGO_SCRIPT_INVALID_CODE")]
1905    InvalidCode,
1906    /// a character used by multiple different scripts
1907    #[doc(alias = "PANGO_SCRIPT_COMMON")]
1908    Common,
1909    /// a mark glyph that takes its script from the
1910    /// base glyph to which it is attached
1911    #[doc(alias = "PANGO_SCRIPT_INHERITED")]
1912    Inherited,
1913    /// Arabic
1914    #[doc(alias = "PANGO_SCRIPT_ARABIC")]
1915    Arabic,
1916    /// Armenian
1917    #[doc(alias = "PANGO_SCRIPT_ARMENIAN")]
1918    Armenian,
1919    /// Bengali
1920    #[doc(alias = "PANGO_SCRIPT_BENGALI")]
1921    Bengali,
1922    /// Bopomofo
1923    #[doc(alias = "PANGO_SCRIPT_BOPOMOFO")]
1924    Bopomofo,
1925    /// Cherokee
1926    #[doc(alias = "PANGO_SCRIPT_CHEROKEE")]
1927    Cherokee,
1928    /// Coptic
1929    #[doc(alias = "PANGO_SCRIPT_COPTIC")]
1930    Coptic,
1931    /// Cyrillic
1932    #[doc(alias = "PANGO_SCRIPT_CYRILLIC")]
1933    Cyrillic,
1934    /// Deseret
1935    #[doc(alias = "PANGO_SCRIPT_DESERET")]
1936    Deseret,
1937    /// Devanagari
1938    #[doc(alias = "PANGO_SCRIPT_DEVANAGARI")]
1939    Devanagari,
1940    /// Ethiopic
1941    #[doc(alias = "PANGO_SCRIPT_ETHIOPIC")]
1942    Ethiopic,
1943    /// Georgian
1944    #[doc(alias = "PANGO_SCRIPT_GEORGIAN")]
1945    Georgian,
1946    /// Gothic
1947    #[doc(alias = "PANGO_SCRIPT_GOTHIC")]
1948    Gothic,
1949    /// Greek
1950    #[doc(alias = "PANGO_SCRIPT_GREEK")]
1951    Greek,
1952    /// Gujarati
1953    #[doc(alias = "PANGO_SCRIPT_GUJARATI")]
1954    Gujarati,
1955    /// Gurmukhi
1956    #[doc(alias = "PANGO_SCRIPT_GURMUKHI")]
1957    Gurmukhi,
1958    /// Han
1959    #[doc(alias = "PANGO_SCRIPT_HAN")]
1960    Han,
1961    /// Hangul
1962    #[doc(alias = "PANGO_SCRIPT_HANGUL")]
1963    Hangul,
1964    /// Hebrew
1965    #[doc(alias = "PANGO_SCRIPT_HEBREW")]
1966    Hebrew,
1967    /// Hiragana
1968    #[doc(alias = "PANGO_SCRIPT_HIRAGANA")]
1969    Hiragana,
1970    /// Kannada
1971    #[doc(alias = "PANGO_SCRIPT_KANNADA")]
1972    Kannada,
1973    /// Katakana
1974    #[doc(alias = "PANGO_SCRIPT_KATAKANA")]
1975    Katakana,
1976    /// Khmer
1977    #[doc(alias = "PANGO_SCRIPT_KHMER")]
1978    Khmer,
1979    /// Lao
1980    #[doc(alias = "PANGO_SCRIPT_LAO")]
1981    Lao,
1982    /// Latin
1983    #[doc(alias = "PANGO_SCRIPT_LATIN")]
1984    Latin,
1985    /// Malayalam
1986    #[doc(alias = "PANGO_SCRIPT_MALAYALAM")]
1987    Malayalam,
1988    /// Mongolian
1989    #[doc(alias = "PANGO_SCRIPT_MONGOLIAN")]
1990    Mongolian,
1991    /// Myanmar
1992    #[doc(alias = "PANGO_SCRIPT_MYANMAR")]
1993    Myanmar,
1994    /// Ogham
1995    #[doc(alias = "PANGO_SCRIPT_OGHAM")]
1996    Ogham,
1997    /// Old Italic
1998    #[doc(alias = "PANGO_SCRIPT_OLD_ITALIC")]
1999    OldItalic,
2000    /// Oriya
2001    #[doc(alias = "PANGO_SCRIPT_ORIYA")]
2002    Oriya,
2003    /// Runic
2004    #[doc(alias = "PANGO_SCRIPT_RUNIC")]
2005    Runic,
2006    /// Sinhala
2007    #[doc(alias = "PANGO_SCRIPT_SINHALA")]
2008    Sinhala,
2009    /// Syriac
2010    #[doc(alias = "PANGO_SCRIPT_SYRIAC")]
2011    Syriac,
2012    /// Tamil
2013    #[doc(alias = "PANGO_SCRIPT_TAMIL")]
2014    Tamil,
2015    /// Telugu
2016    #[doc(alias = "PANGO_SCRIPT_TELUGU")]
2017    Telugu,
2018    /// Thaana
2019    #[doc(alias = "PANGO_SCRIPT_THAANA")]
2020    Thaana,
2021    /// Thai
2022    #[doc(alias = "PANGO_SCRIPT_THAI")]
2023    Thai,
2024    /// Tibetan
2025    #[doc(alias = "PANGO_SCRIPT_TIBETAN")]
2026    Tibetan,
2027    /// Canadian Aboriginal
2028    #[doc(alias = "PANGO_SCRIPT_CANADIAN_ABORIGINAL")]
2029    CanadianAboriginal,
2030    /// Yi
2031    #[doc(alias = "PANGO_SCRIPT_YI")]
2032    Yi,
2033    /// Tagalog
2034    #[doc(alias = "PANGO_SCRIPT_TAGALOG")]
2035    Tagalog,
2036    /// Hanunoo
2037    #[doc(alias = "PANGO_SCRIPT_HANUNOO")]
2038    Hanunoo,
2039    /// Buhid
2040    #[doc(alias = "PANGO_SCRIPT_BUHID")]
2041    Buhid,
2042    /// Tagbanwa
2043    #[doc(alias = "PANGO_SCRIPT_TAGBANWA")]
2044    Tagbanwa,
2045    /// Braille
2046    #[doc(alias = "PANGO_SCRIPT_BRAILLE")]
2047    Braille,
2048    /// Cypriot
2049    #[doc(alias = "PANGO_SCRIPT_CYPRIOT")]
2050    Cypriot,
2051    /// Limbu
2052    #[doc(alias = "PANGO_SCRIPT_LIMBU")]
2053    Limbu,
2054    /// Osmanya
2055    #[doc(alias = "PANGO_SCRIPT_OSMANYA")]
2056    Osmanya,
2057    /// Shavian
2058    #[doc(alias = "PANGO_SCRIPT_SHAVIAN")]
2059    Shavian,
2060    /// Linear B
2061    #[doc(alias = "PANGO_SCRIPT_LINEAR_B")]
2062    LinearB,
2063    /// Tai Le
2064    #[doc(alias = "PANGO_SCRIPT_TAI_LE")]
2065    TaiLe,
2066    /// Ugaritic
2067    #[doc(alias = "PANGO_SCRIPT_UGARITIC")]
2068    Ugaritic,
2069    /// New Tai Lue. Since 1.10
2070    #[doc(alias = "PANGO_SCRIPT_NEW_TAI_LUE")]
2071    NewTaiLue,
2072    /// Buginese. Since 1.10
2073    #[doc(alias = "PANGO_SCRIPT_BUGINESE")]
2074    Buginese,
2075    /// Glagolitic. Since 1.10
2076    #[doc(alias = "PANGO_SCRIPT_GLAGOLITIC")]
2077    Glagolitic,
2078    /// Tifinagh. Since 1.10
2079    #[doc(alias = "PANGO_SCRIPT_TIFINAGH")]
2080    Tifinagh,
2081    /// Syloti Nagri. Since 1.10
2082    #[doc(alias = "PANGO_SCRIPT_SYLOTI_NAGRI")]
2083    SylotiNagri,
2084    /// Old Persian. Since 1.10
2085    #[doc(alias = "PANGO_SCRIPT_OLD_PERSIAN")]
2086    OldPersian,
2087    /// Kharoshthi. Since 1.10
2088    #[doc(alias = "PANGO_SCRIPT_KHAROSHTHI")]
2089    Kharoshthi,
2090    /// an unassigned code point. Since 1.14
2091    #[doc(alias = "PANGO_SCRIPT_UNKNOWN")]
2092    Unknown,
2093    /// Balinese. Since 1.14
2094    #[doc(alias = "PANGO_SCRIPT_BALINESE")]
2095    Balinese,
2096    /// Cuneiform. Since 1.14
2097    #[doc(alias = "PANGO_SCRIPT_CUNEIFORM")]
2098    Cuneiform,
2099    /// Phoenician. Since 1.14
2100    #[doc(alias = "PANGO_SCRIPT_PHOENICIAN")]
2101    Phoenician,
2102    /// Phags-pa. Since 1.14
2103    #[doc(alias = "PANGO_SCRIPT_PHAGS_PA")]
2104    PhagsPa,
2105    /// N'Ko. Since 1.14
2106    #[doc(alias = "PANGO_SCRIPT_NKO")]
2107    Nko,
2108    /// Kayah Li. Since 1.20.1
2109    #[doc(alias = "PANGO_SCRIPT_KAYAH_LI")]
2110    KayahLi,
2111    /// Lepcha. Since 1.20.1
2112    #[doc(alias = "PANGO_SCRIPT_LEPCHA")]
2113    Lepcha,
2114    /// Rejang. Since 1.20.1
2115    #[doc(alias = "PANGO_SCRIPT_REJANG")]
2116    Rejang,
2117    /// Sundanese. Since 1.20.1
2118    #[doc(alias = "PANGO_SCRIPT_SUNDANESE")]
2119    Sundanese,
2120    /// Saurashtra. Since 1.20.1
2121    #[doc(alias = "PANGO_SCRIPT_SAURASHTRA")]
2122    Saurashtra,
2123    /// Cham. Since 1.20.1
2124    #[doc(alias = "PANGO_SCRIPT_CHAM")]
2125    Cham,
2126    /// Ol Chiki. Since 1.20.1
2127    #[doc(alias = "PANGO_SCRIPT_OL_CHIKI")]
2128    OlChiki,
2129    /// Vai. Since 1.20.1
2130    #[doc(alias = "PANGO_SCRIPT_VAI")]
2131    Vai,
2132    /// Carian. Since 1.20.1
2133    #[doc(alias = "PANGO_SCRIPT_CARIAN")]
2134    Carian,
2135    /// Lycian. Since 1.20.1
2136    #[doc(alias = "PANGO_SCRIPT_LYCIAN")]
2137    Lycian,
2138    /// Lydian. Since 1.20.1
2139    #[doc(alias = "PANGO_SCRIPT_LYDIAN")]
2140    Lydian,
2141    /// Batak. Since 1.32
2142    #[doc(alias = "PANGO_SCRIPT_BATAK")]
2143    Batak,
2144    /// Brahmi. Since 1.32
2145    #[doc(alias = "PANGO_SCRIPT_BRAHMI")]
2146    Brahmi,
2147    /// Mandaic. Since 1.32
2148    #[doc(alias = "PANGO_SCRIPT_MANDAIC")]
2149    Mandaic,
2150    /// Chakma. Since: 1.32
2151    #[doc(alias = "PANGO_SCRIPT_CHAKMA")]
2152    Chakma,
2153    /// Meroitic Cursive. Since: 1.32
2154    #[doc(alias = "PANGO_SCRIPT_MEROITIC_CURSIVE")]
2155    MeroiticCursive,
2156    /// Meroitic Hieroglyphs. Since: 1.32
2157    #[doc(alias = "PANGO_SCRIPT_MEROITIC_HIEROGLYPHS")]
2158    MeroiticHieroglyphs,
2159    /// Miao. Since: 1.32
2160    #[doc(alias = "PANGO_SCRIPT_MIAO")]
2161    Miao,
2162    /// Sharada. Since: 1.32
2163    #[doc(alias = "PANGO_SCRIPT_SHARADA")]
2164    Sharada,
2165    /// Sora Sompeng. Since: 1.32
2166    #[doc(alias = "PANGO_SCRIPT_SORA_SOMPENG")]
2167    SoraSompeng,
2168    /// Takri. Since: 1.32
2169    #[doc(alias = "PANGO_SCRIPT_TAKRI")]
2170    Takri,
2171    /// Bassa. Since: 1.40
2172    #[doc(alias = "PANGO_SCRIPT_BASSA_VAH")]
2173    BassaVah,
2174    /// Caucasian Albanian. Since: 1.40
2175    #[doc(alias = "PANGO_SCRIPT_CAUCASIAN_ALBANIAN")]
2176    CaucasianAlbanian,
2177    /// Duployan. Since: 1.40
2178    #[doc(alias = "PANGO_SCRIPT_DUPLOYAN")]
2179    Duployan,
2180    /// Elbasan. Since: 1.40
2181    #[doc(alias = "PANGO_SCRIPT_ELBASAN")]
2182    Elbasan,
2183    /// Grantha. Since: 1.40
2184    #[doc(alias = "PANGO_SCRIPT_GRANTHA")]
2185    Grantha,
2186    /// Kjohki. Since: 1.40
2187    #[doc(alias = "PANGO_SCRIPT_KHOJKI")]
2188    Khojki,
2189    /// Khudawadi, Sindhi. Since: 1.40
2190    #[doc(alias = "PANGO_SCRIPT_KHUDAWADI")]
2191    Khudawadi,
2192    /// Linear A. Since: 1.40
2193    #[doc(alias = "PANGO_SCRIPT_LINEAR_A")]
2194    LinearA,
2195    /// Mahajani. Since: 1.40
2196    #[doc(alias = "PANGO_SCRIPT_MAHAJANI")]
2197    Mahajani,
2198    /// Manichaean. Since: 1.40
2199    #[doc(alias = "PANGO_SCRIPT_MANICHAEAN")]
2200    Manichaean,
2201    /// Mende Kikakui. Since: 1.40
2202    #[doc(alias = "PANGO_SCRIPT_MENDE_KIKAKUI")]
2203    MendeKikakui,
2204    /// Modi. Since: 1.40
2205    #[doc(alias = "PANGO_SCRIPT_MODI")]
2206    Modi,
2207    /// Mro. Since: 1.40
2208    #[doc(alias = "PANGO_SCRIPT_MRO")]
2209    Mro,
2210    /// Nabataean. Since: 1.40
2211    #[doc(alias = "PANGO_SCRIPT_NABATAEAN")]
2212    Nabataean,
2213    /// Old North Arabian. Since: 1.40
2214    #[doc(alias = "PANGO_SCRIPT_OLD_NORTH_ARABIAN")]
2215    OldNorthArabian,
2216    /// Old Permic. Since: 1.40
2217    #[doc(alias = "PANGO_SCRIPT_OLD_PERMIC")]
2218    OldPermic,
2219    /// Pahawh Hmong. Since: 1.40
2220    #[doc(alias = "PANGO_SCRIPT_PAHAWH_HMONG")]
2221    PahawhHmong,
2222    /// Palmyrene. Since: 1.40
2223    #[doc(alias = "PANGO_SCRIPT_PALMYRENE")]
2224    Palmyrene,
2225    /// Pau Cin Hau. Since: 1.40
2226    #[doc(alias = "PANGO_SCRIPT_PAU_CIN_HAU")]
2227    PauCinHau,
2228    /// Psalter Pahlavi. Since: 1.40
2229    #[doc(alias = "PANGO_SCRIPT_PSALTER_PAHLAVI")]
2230    PsalterPahlavi,
2231    /// Siddham. Since: 1.40
2232    #[doc(alias = "PANGO_SCRIPT_SIDDHAM")]
2233    Siddham,
2234    /// Tirhuta. Since: 1.40
2235    #[doc(alias = "PANGO_SCRIPT_TIRHUTA")]
2236    Tirhuta,
2237    /// Warang Citi. Since: 1.40
2238    #[doc(alias = "PANGO_SCRIPT_WARANG_CITI")]
2239    WarangCiti,
2240    /// Ahom. Since: 1.40
2241    #[doc(alias = "PANGO_SCRIPT_AHOM")]
2242    Ahom,
2243    /// Anatolian Hieroglyphs. Since: 1.40
2244    #[doc(alias = "PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS")]
2245    AnatolianHieroglyphs,
2246    /// Hatran. Since: 1.40
2247    #[doc(alias = "PANGO_SCRIPT_HATRAN")]
2248    Hatran,
2249    /// Multani. Since: 1.40
2250    #[doc(alias = "PANGO_SCRIPT_MULTANI")]
2251    Multani,
2252    /// Old Hungarian. Since: 1.40
2253    #[doc(alias = "PANGO_SCRIPT_OLD_HUNGARIAN")]
2254    OldHungarian,
2255    /// Signwriting. Since: 1.40
2256    #[doc(alias = "PANGO_SCRIPT_SIGNWRITING")]
2257    Signwriting,
2258    #[doc(hidden)]
2259    __Unknown(i32),
2260}
2261
2262impl Script {
2263    #[cfg_attr(feature = "v1_44", deprecated = "Since 1.44")]
2264    #[allow(deprecated)]
2265    #[doc(alias = "pango_script_for_unichar")]
2266    pub fn for_unichar(ch: char) -> Script {
2267        unsafe { from_glib(ffi::pango_script_for_unichar(ch.into_glib())) }
2268    }
2269
2270    #[doc(alias = "pango_script_get_sample_language")]
2271    #[doc(alias = "get_sample_language")]
2272    pub fn sample_language(self) -> Option<Language> {
2273        unsafe { from_glib_full(ffi::pango_script_get_sample_language(self.into_glib())) }
2274    }
2275}
2276
2277#[doc(hidden)]
2278impl IntoGlib for Script {
2279    type GlibType = ffi::PangoScript;
2280
2281    fn into_glib(self) -> ffi::PangoScript {
2282        match self {
2283            Self::InvalidCode => ffi::PANGO_SCRIPT_INVALID_CODE,
2284            Self::Common => ffi::PANGO_SCRIPT_COMMON,
2285            Self::Inherited => ffi::PANGO_SCRIPT_INHERITED,
2286            Self::Arabic => ffi::PANGO_SCRIPT_ARABIC,
2287            Self::Armenian => ffi::PANGO_SCRIPT_ARMENIAN,
2288            Self::Bengali => ffi::PANGO_SCRIPT_BENGALI,
2289            Self::Bopomofo => ffi::PANGO_SCRIPT_BOPOMOFO,
2290            Self::Cherokee => ffi::PANGO_SCRIPT_CHEROKEE,
2291            Self::Coptic => ffi::PANGO_SCRIPT_COPTIC,
2292            Self::Cyrillic => ffi::PANGO_SCRIPT_CYRILLIC,
2293            Self::Deseret => ffi::PANGO_SCRIPT_DESERET,
2294            Self::Devanagari => ffi::PANGO_SCRIPT_DEVANAGARI,
2295            Self::Ethiopic => ffi::PANGO_SCRIPT_ETHIOPIC,
2296            Self::Georgian => ffi::PANGO_SCRIPT_GEORGIAN,
2297            Self::Gothic => ffi::PANGO_SCRIPT_GOTHIC,
2298            Self::Greek => ffi::PANGO_SCRIPT_GREEK,
2299            Self::Gujarati => ffi::PANGO_SCRIPT_GUJARATI,
2300            Self::Gurmukhi => ffi::PANGO_SCRIPT_GURMUKHI,
2301            Self::Han => ffi::PANGO_SCRIPT_HAN,
2302            Self::Hangul => ffi::PANGO_SCRIPT_HANGUL,
2303            Self::Hebrew => ffi::PANGO_SCRIPT_HEBREW,
2304            Self::Hiragana => ffi::PANGO_SCRIPT_HIRAGANA,
2305            Self::Kannada => ffi::PANGO_SCRIPT_KANNADA,
2306            Self::Katakana => ffi::PANGO_SCRIPT_KATAKANA,
2307            Self::Khmer => ffi::PANGO_SCRIPT_KHMER,
2308            Self::Lao => ffi::PANGO_SCRIPT_LAO,
2309            Self::Latin => ffi::PANGO_SCRIPT_LATIN,
2310            Self::Malayalam => ffi::PANGO_SCRIPT_MALAYALAM,
2311            Self::Mongolian => ffi::PANGO_SCRIPT_MONGOLIAN,
2312            Self::Myanmar => ffi::PANGO_SCRIPT_MYANMAR,
2313            Self::Ogham => ffi::PANGO_SCRIPT_OGHAM,
2314            Self::OldItalic => ffi::PANGO_SCRIPT_OLD_ITALIC,
2315            Self::Oriya => ffi::PANGO_SCRIPT_ORIYA,
2316            Self::Runic => ffi::PANGO_SCRIPT_RUNIC,
2317            Self::Sinhala => ffi::PANGO_SCRIPT_SINHALA,
2318            Self::Syriac => ffi::PANGO_SCRIPT_SYRIAC,
2319            Self::Tamil => ffi::PANGO_SCRIPT_TAMIL,
2320            Self::Telugu => ffi::PANGO_SCRIPT_TELUGU,
2321            Self::Thaana => ffi::PANGO_SCRIPT_THAANA,
2322            Self::Thai => ffi::PANGO_SCRIPT_THAI,
2323            Self::Tibetan => ffi::PANGO_SCRIPT_TIBETAN,
2324            Self::CanadianAboriginal => ffi::PANGO_SCRIPT_CANADIAN_ABORIGINAL,
2325            Self::Yi => ffi::PANGO_SCRIPT_YI,
2326            Self::Tagalog => ffi::PANGO_SCRIPT_TAGALOG,
2327            Self::Hanunoo => ffi::PANGO_SCRIPT_HANUNOO,
2328            Self::Buhid => ffi::PANGO_SCRIPT_BUHID,
2329            Self::Tagbanwa => ffi::PANGO_SCRIPT_TAGBANWA,
2330            Self::Braille => ffi::PANGO_SCRIPT_BRAILLE,
2331            Self::Cypriot => ffi::PANGO_SCRIPT_CYPRIOT,
2332            Self::Limbu => ffi::PANGO_SCRIPT_LIMBU,
2333            Self::Osmanya => ffi::PANGO_SCRIPT_OSMANYA,
2334            Self::Shavian => ffi::PANGO_SCRIPT_SHAVIAN,
2335            Self::LinearB => ffi::PANGO_SCRIPT_LINEAR_B,
2336            Self::TaiLe => ffi::PANGO_SCRIPT_TAI_LE,
2337            Self::Ugaritic => ffi::PANGO_SCRIPT_UGARITIC,
2338            Self::NewTaiLue => ffi::PANGO_SCRIPT_NEW_TAI_LUE,
2339            Self::Buginese => ffi::PANGO_SCRIPT_BUGINESE,
2340            Self::Glagolitic => ffi::PANGO_SCRIPT_GLAGOLITIC,
2341            Self::Tifinagh => ffi::PANGO_SCRIPT_TIFINAGH,
2342            Self::SylotiNagri => ffi::PANGO_SCRIPT_SYLOTI_NAGRI,
2343            Self::OldPersian => ffi::PANGO_SCRIPT_OLD_PERSIAN,
2344            Self::Kharoshthi => ffi::PANGO_SCRIPT_KHAROSHTHI,
2345            Self::Unknown => ffi::PANGO_SCRIPT_UNKNOWN,
2346            Self::Balinese => ffi::PANGO_SCRIPT_BALINESE,
2347            Self::Cuneiform => ffi::PANGO_SCRIPT_CUNEIFORM,
2348            Self::Phoenician => ffi::PANGO_SCRIPT_PHOENICIAN,
2349            Self::PhagsPa => ffi::PANGO_SCRIPT_PHAGS_PA,
2350            Self::Nko => ffi::PANGO_SCRIPT_NKO,
2351            Self::KayahLi => ffi::PANGO_SCRIPT_KAYAH_LI,
2352            Self::Lepcha => ffi::PANGO_SCRIPT_LEPCHA,
2353            Self::Rejang => ffi::PANGO_SCRIPT_REJANG,
2354            Self::Sundanese => ffi::PANGO_SCRIPT_SUNDANESE,
2355            Self::Saurashtra => ffi::PANGO_SCRIPT_SAURASHTRA,
2356            Self::Cham => ffi::PANGO_SCRIPT_CHAM,
2357            Self::OlChiki => ffi::PANGO_SCRIPT_OL_CHIKI,
2358            Self::Vai => ffi::PANGO_SCRIPT_VAI,
2359            Self::Carian => ffi::PANGO_SCRIPT_CARIAN,
2360            Self::Lycian => ffi::PANGO_SCRIPT_LYCIAN,
2361            Self::Lydian => ffi::PANGO_SCRIPT_LYDIAN,
2362            Self::Batak => ffi::PANGO_SCRIPT_BATAK,
2363            Self::Brahmi => ffi::PANGO_SCRIPT_BRAHMI,
2364            Self::Mandaic => ffi::PANGO_SCRIPT_MANDAIC,
2365            Self::Chakma => ffi::PANGO_SCRIPT_CHAKMA,
2366            Self::MeroiticCursive => ffi::PANGO_SCRIPT_MEROITIC_CURSIVE,
2367            Self::MeroiticHieroglyphs => ffi::PANGO_SCRIPT_MEROITIC_HIEROGLYPHS,
2368            Self::Miao => ffi::PANGO_SCRIPT_MIAO,
2369            Self::Sharada => ffi::PANGO_SCRIPT_SHARADA,
2370            Self::SoraSompeng => ffi::PANGO_SCRIPT_SORA_SOMPENG,
2371            Self::Takri => ffi::PANGO_SCRIPT_TAKRI,
2372            Self::BassaVah => ffi::PANGO_SCRIPT_BASSA_VAH,
2373            Self::CaucasianAlbanian => ffi::PANGO_SCRIPT_CAUCASIAN_ALBANIAN,
2374            Self::Duployan => ffi::PANGO_SCRIPT_DUPLOYAN,
2375            Self::Elbasan => ffi::PANGO_SCRIPT_ELBASAN,
2376            Self::Grantha => ffi::PANGO_SCRIPT_GRANTHA,
2377            Self::Khojki => ffi::PANGO_SCRIPT_KHOJKI,
2378            Self::Khudawadi => ffi::PANGO_SCRIPT_KHUDAWADI,
2379            Self::LinearA => ffi::PANGO_SCRIPT_LINEAR_A,
2380            Self::Mahajani => ffi::PANGO_SCRIPT_MAHAJANI,
2381            Self::Manichaean => ffi::PANGO_SCRIPT_MANICHAEAN,
2382            Self::MendeKikakui => ffi::PANGO_SCRIPT_MENDE_KIKAKUI,
2383            Self::Modi => ffi::PANGO_SCRIPT_MODI,
2384            Self::Mro => ffi::PANGO_SCRIPT_MRO,
2385            Self::Nabataean => ffi::PANGO_SCRIPT_NABATAEAN,
2386            Self::OldNorthArabian => ffi::PANGO_SCRIPT_OLD_NORTH_ARABIAN,
2387            Self::OldPermic => ffi::PANGO_SCRIPT_OLD_PERMIC,
2388            Self::PahawhHmong => ffi::PANGO_SCRIPT_PAHAWH_HMONG,
2389            Self::Palmyrene => ffi::PANGO_SCRIPT_PALMYRENE,
2390            Self::PauCinHau => ffi::PANGO_SCRIPT_PAU_CIN_HAU,
2391            Self::PsalterPahlavi => ffi::PANGO_SCRIPT_PSALTER_PAHLAVI,
2392            Self::Siddham => ffi::PANGO_SCRIPT_SIDDHAM,
2393            Self::Tirhuta => ffi::PANGO_SCRIPT_TIRHUTA,
2394            Self::WarangCiti => ffi::PANGO_SCRIPT_WARANG_CITI,
2395            Self::Ahom => ffi::PANGO_SCRIPT_AHOM,
2396            Self::AnatolianHieroglyphs => ffi::PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS,
2397            Self::Hatran => ffi::PANGO_SCRIPT_HATRAN,
2398            Self::Multani => ffi::PANGO_SCRIPT_MULTANI,
2399            Self::OldHungarian => ffi::PANGO_SCRIPT_OLD_HUNGARIAN,
2400            Self::Signwriting => ffi::PANGO_SCRIPT_SIGNWRITING,
2401            Self::__Unknown(value) => value,
2402        }
2403    }
2404}
2405
2406#[doc(hidden)]
2407impl FromGlib<ffi::PangoScript> for Script {
2408    unsafe fn from_glib(value: ffi::PangoScript) -> Self {
2409        match value {
2410            ffi::PANGO_SCRIPT_INVALID_CODE => Self::InvalidCode,
2411            ffi::PANGO_SCRIPT_COMMON => Self::Common,
2412            ffi::PANGO_SCRIPT_INHERITED => Self::Inherited,
2413            ffi::PANGO_SCRIPT_ARABIC => Self::Arabic,
2414            ffi::PANGO_SCRIPT_ARMENIAN => Self::Armenian,
2415            ffi::PANGO_SCRIPT_BENGALI => Self::Bengali,
2416            ffi::PANGO_SCRIPT_BOPOMOFO => Self::Bopomofo,
2417            ffi::PANGO_SCRIPT_CHEROKEE => Self::Cherokee,
2418            ffi::PANGO_SCRIPT_COPTIC => Self::Coptic,
2419            ffi::PANGO_SCRIPT_CYRILLIC => Self::Cyrillic,
2420            ffi::PANGO_SCRIPT_DESERET => Self::Deseret,
2421            ffi::PANGO_SCRIPT_DEVANAGARI => Self::Devanagari,
2422            ffi::PANGO_SCRIPT_ETHIOPIC => Self::Ethiopic,
2423            ffi::PANGO_SCRIPT_GEORGIAN => Self::Georgian,
2424            ffi::PANGO_SCRIPT_GOTHIC => Self::Gothic,
2425            ffi::PANGO_SCRIPT_GREEK => Self::Greek,
2426            ffi::PANGO_SCRIPT_GUJARATI => Self::Gujarati,
2427            ffi::PANGO_SCRIPT_GURMUKHI => Self::Gurmukhi,
2428            ffi::PANGO_SCRIPT_HAN => Self::Han,
2429            ffi::PANGO_SCRIPT_HANGUL => Self::Hangul,
2430            ffi::PANGO_SCRIPT_HEBREW => Self::Hebrew,
2431            ffi::PANGO_SCRIPT_HIRAGANA => Self::Hiragana,
2432            ffi::PANGO_SCRIPT_KANNADA => Self::Kannada,
2433            ffi::PANGO_SCRIPT_KATAKANA => Self::Katakana,
2434            ffi::PANGO_SCRIPT_KHMER => Self::Khmer,
2435            ffi::PANGO_SCRIPT_LAO => Self::Lao,
2436            ffi::PANGO_SCRIPT_LATIN => Self::Latin,
2437            ffi::PANGO_SCRIPT_MALAYALAM => Self::Malayalam,
2438            ffi::PANGO_SCRIPT_MONGOLIAN => Self::Mongolian,
2439            ffi::PANGO_SCRIPT_MYANMAR => Self::Myanmar,
2440            ffi::PANGO_SCRIPT_OGHAM => Self::Ogham,
2441            ffi::PANGO_SCRIPT_OLD_ITALIC => Self::OldItalic,
2442            ffi::PANGO_SCRIPT_ORIYA => Self::Oriya,
2443            ffi::PANGO_SCRIPT_RUNIC => Self::Runic,
2444            ffi::PANGO_SCRIPT_SINHALA => Self::Sinhala,
2445            ffi::PANGO_SCRIPT_SYRIAC => Self::Syriac,
2446            ffi::PANGO_SCRIPT_TAMIL => Self::Tamil,
2447            ffi::PANGO_SCRIPT_TELUGU => Self::Telugu,
2448            ffi::PANGO_SCRIPT_THAANA => Self::Thaana,
2449            ffi::PANGO_SCRIPT_THAI => Self::Thai,
2450            ffi::PANGO_SCRIPT_TIBETAN => Self::Tibetan,
2451            ffi::PANGO_SCRIPT_CANADIAN_ABORIGINAL => Self::CanadianAboriginal,
2452            ffi::PANGO_SCRIPT_YI => Self::Yi,
2453            ffi::PANGO_SCRIPT_TAGALOG => Self::Tagalog,
2454            ffi::PANGO_SCRIPT_HANUNOO => Self::Hanunoo,
2455            ffi::PANGO_SCRIPT_BUHID => Self::Buhid,
2456            ffi::PANGO_SCRIPT_TAGBANWA => Self::Tagbanwa,
2457            ffi::PANGO_SCRIPT_BRAILLE => Self::Braille,
2458            ffi::PANGO_SCRIPT_CYPRIOT => Self::Cypriot,
2459            ffi::PANGO_SCRIPT_LIMBU => Self::Limbu,
2460            ffi::PANGO_SCRIPT_OSMANYA => Self::Osmanya,
2461            ffi::PANGO_SCRIPT_SHAVIAN => Self::Shavian,
2462            ffi::PANGO_SCRIPT_LINEAR_B => Self::LinearB,
2463            ffi::PANGO_SCRIPT_TAI_LE => Self::TaiLe,
2464            ffi::PANGO_SCRIPT_UGARITIC => Self::Ugaritic,
2465            ffi::PANGO_SCRIPT_NEW_TAI_LUE => Self::NewTaiLue,
2466            ffi::PANGO_SCRIPT_BUGINESE => Self::Buginese,
2467            ffi::PANGO_SCRIPT_GLAGOLITIC => Self::Glagolitic,
2468            ffi::PANGO_SCRIPT_TIFINAGH => Self::Tifinagh,
2469            ffi::PANGO_SCRIPT_SYLOTI_NAGRI => Self::SylotiNagri,
2470            ffi::PANGO_SCRIPT_OLD_PERSIAN => Self::OldPersian,
2471            ffi::PANGO_SCRIPT_KHAROSHTHI => Self::Kharoshthi,
2472            ffi::PANGO_SCRIPT_UNKNOWN => Self::Unknown,
2473            ffi::PANGO_SCRIPT_BALINESE => Self::Balinese,
2474            ffi::PANGO_SCRIPT_CUNEIFORM => Self::Cuneiform,
2475            ffi::PANGO_SCRIPT_PHOENICIAN => Self::Phoenician,
2476            ffi::PANGO_SCRIPT_PHAGS_PA => Self::PhagsPa,
2477            ffi::PANGO_SCRIPT_NKO => Self::Nko,
2478            ffi::PANGO_SCRIPT_KAYAH_LI => Self::KayahLi,
2479            ffi::PANGO_SCRIPT_LEPCHA => Self::Lepcha,
2480            ffi::PANGO_SCRIPT_REJANG => Self::Rejang,
2481            ffi::PANGO_SCRIPT_SUNDANESE => Self::Sundanese,
2482            ffi::PANGO_SCRIPT_SAURASHTRA => Self::Saurashtra,
2483            ffi::PANGO_SCRIPT_CHAM => Self::Cham,
2484            ffi::PANGO_SCRIPT_OL_CHIKI => Self::OlChiki,
2485            ffi::PANGO_SCRIPT_VAI => Self::Vai,
2486            ffi::PANGO_SCRIPT_CARIAN => Self::Carian,
2487            ffi::PANGO_SCRIPT_LYCIAN => Self::Lycian,
2488            ffi::PANGO_SCRIPT_LYDIAN => Self::Lydian,
2489            ffi::PANGO_SCRIPT_BATAK => Self::Batak,
2490            ffi::PANGO_SCRIPT_BRAHMI => Self::Brahmi,
2491            ffi::PANGO_SCRIPT_MANDAIC => Self::Mandaic,
2492            ffi::PANGO_SCRIPT_CHAKMA => Self::Chakma,
2493            ffi::PANGO_SCRIPT_MEROITIC_CURSIVE => Self::MeroiticCursive,
2494            ffi::PANGO_SCRIPT_MEROITIC_HIEROGLYPHS => Self::MeroiticHieroglyphs,
2495            ffi::PANGO_SCRIPT_MIAO => Self::Miao,
2496            ffi::PANGO_SCRIPT_SHARADA => Self::Sharada,
2497            ffi::PANGO_SCRIPT_SORA_SOMPENG => Self::SoraSompeng,
2498            ffi::PANGO_SCRIPT_TAKRI => Self::Takri,
2499            ffi::PANGO_SCRIPT_BASSA_VAH => Self::BassaVah,
2500            ffi::PANGO_SCRIPT_CAUCASIAN_ALBANIAN => Self::CaucasianAlbanian,
2501            ffi::PANGO_SCRIPT_DUPLOYAN => Self::Duployan,
2502            ffi::PANGO_SCRIPT_ELBASAN => Self::Elbasan,
2503            ffi::PANGO_SCRIPT_GRANTHA => Self::Grantha,
2504            ffi::PANGO_SCRIPT_KHOJKI => Self::Khojki,
2505            ffi::PANGO_SCRIPT_KHUDAWADI => Self::Khudawadi,
2506            ffi::PANGO_SCRIPT_LINEAR_A => Self::LinearA,
2507            ffi::PANGO_SCRIPT_MAHAJANI => Self::Mahajani,
2508            ffi::PANGO_SCRIPT_MANICHAEAN => Self::Manichaean,
2509            ffi::PANGO_SCRIPT_MENDE_KIKAKUI => Self::MendeKikakui,
2510            ffi::PANGO_SCRIPT_MODI => Self::Modi,
2511            ffi::PANGO_SCRIPT_MRO => Self::Mro,
2512            ffi::PANGO_SCRIPT_NABATAEAN => Self::Nabataean,
2513            ffi::PANGO_SCRIPT_OLD_NORTH_ARABIAN => Self::OldNorthArabian,
2514            ffi::PANGO_SCRIPT_OLD_PERMIC => Self::OldPermic,
2515            ffi::PANGO_SCRIPT_PAHAWH_HMONG => Self::PahawhHmong,
2516            ffi::PANGO_SCRIPT_PALMYRENE => Self::Palmyrene,
2517            ffi::PANGO_SCRIPT_PAU_CIN_HAU => Self::PauCinHau,
2518            ffi::PANGO_SCRIPT_PSALTER_PAHLAVI => Self::PsalterPahlavi,
2519            ffi::PANGO_SCRIPT_SIDDHAM => Self::Siddham,
2520            ffi::PANGO_SCRIPT_TIRHUTA => Self::Tirhuta,
2521            ffi::PANGO_SCRIPT_WARANG_CITI => Self::WarangCiti,
2522            ffi::PANGO_SCRIPT_AHOM => Self::Ahom,
2523            ffi::PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS => Self::AnatolianHieroglyphs,
2524            ffi::PANGO_SCRIPT_HATRAN => Self::Hatran,
2525            ffi::PANGO_SCRIPT_MULTANI => Self::Multani,
2526            ffi::PANGO_SCRIPT_OLD_HUNGARIAN => Self::OldHungarian,
2527            ffi::PANGO_SCRIPT_SIGNWRITING => Self::Signwriting,
2528            value => Self::__Unknown(value),
2529        }
2530    }
2531}
2532
2533impl StaticType for Script {
2534    #[inline]
2535    #[doc(alias = "pango_script_get_type")]
2536    fn static_type() -> glib::Type {
2537        unsafe { from_glib(ffi::pango_script_get_type()) }
2538    }
2539}
2540
2541impl glib::HasParamSpec for Script {
2542    type ParamSpec = glib::ParamSpecEnum;
2543    type SetValue = Self;
2544    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2545
2546    fn param_spec_builder() -> Self::BuilderFn {
2547        Self::ParamSpec::builder_with_default
2548    }
2549}
2550
2551impl glib::value::ValueType for Script {
2552    type Type = Self;
2553}
2554
2555unsafe impl<'a> glib::value::FromValue<'a> for Script {
2556    type Checker = glib::value::GenericValueTypeChecker<Self>;
2557
2558    #[inline]
2559    unsafe fn from_value(value: &'a glib::Value) -> Self {
2560        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2561    }
2562}
2563
2564impl ToValue for Script {
2565    #[inline]
2566    fn to_value(&self) -> glib::Value {
2567        let mut value = glib::Value::for_value_type::<Self>();
2568        unsafe {
2569            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2570        }
2571        value
2572    }
2573
2574    #[inline]
2575    fn value_type(&self) -> glib::Type {
2576        Self::static_type()
2577    }
2578}
2579
2580impl From<Script> for glib::Value {
2581    #[inline]
2582    fn from(v: Script) -> Self {
2583        ToValue::to_value(&v)
2584    }
2585}
2586
2587/// An enumeration specifying the width of the font relative to other designs
2588/// within a family.
2589#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2590#[non_exhaustive]
2591#[doc(alias = "PangoStretch")]
2592pub enum Stretch {
2593    /// ultra condensed width
2594    #[doc(alias = "PANGO_STRETCH_ULTRA_CONDENSED")]
2595    UltraCondensed,
2596    /// extra condensed width
2597    #[doc(alias = "PANGO_STRETCH_EXTRA_CONDENSED")]
2598    ExtraCondensed,
2599    /// condensed width
2600    #[doc(alias = "PANGO_STRETCH_CONDENSED")]
2601    Condensed,
2602    /// semi condensed width
2603    #[doc(alias = "PANGO_STRETCH_SEMI_CONDENSED")]
2604    SemiCondensed,
2605    /// the normal width
2606    #[doc(alias = "PANGO_STRETCH_NORMAL")]
2607    Normal,
2608    /// semi expanded width
2609    #[doc(alias = "PANGO_STRETCH_SEMI_EXPANDED")]
2610    SemiExpanded,
2611    /// expanded width
2612    #[doc(alias = "PANGO_STRETCH_EXPANDED")]
2613    Expanded,
2614    /// extra expanded width
2615    #[doc(alias = "PANGO_STRETCH_EXTRA_EXPANDED")]
2616    ExtraExpanded,
2617    /// ultra expanded width
2618    #[doc(alias = "PANGO_STRETCH_ULTRA_EXPANDED")]
2619    UltraExpanded,
2620    #[doc(hidden)]
2621    __Unknown(i32),
2622}
2623
2624#[doc(hidden)]
2625impl IntoGlib for Stretch {
2626    type GlibType = ffi::PangoStretch;
2627
2628    #[inline]
2629    fn into_glib(self) -> ffi::PangoStretch {
2630        match self {
2631            Self::UltraCondensed => ffi::PANGO_STRETCH_ULTRA_CONDENSED,
2632            Self::ExtraCondensed => ffi::PANGO_STRETCH_EXTRA_CONDENSED,
2633            Self::Condensed => ffi::PANGO_STRETCH_CONDENSED,
2634            Self::SemiCondensed => ffi::PANGO_STRETCH_SEMI_CONDENSED,
2635            Self::Normal => ffi::PANGO_STRETCH_NORMAL,
2636            Self::SemiExpanded => ffi::PANGO_STRETCH_SEMI_EXPANDED,
2637            Self::Expanded => ffi::PANGO_STRETCH_EXPANDED,
2638            Self::ExtraExpanded => ffi::PANGO_STRETCH_EXTRA_EXPANDED,
2639            Self::UltraExpanded => ffi::PANGO_STRETCH_ULTRA_EXPANDED,
2640            Self::__Unknown(value) => value,
2641        }
2642    }
2643}
2644
2645#[doc(hidden)]
2646impl FromGlib<ffi::PangoStretch> for Stretch {
2647    #[inline]
2648    unsafe fn from_glib(value: ffi::PangoStretch) -> Self {
2649        match value {
2650            ffi::PANGO_STRETCH_ULTRA_CONDENSED => Self::UltraCondensed,
2651            ffi::PANGO_STRETCH_EXTRA_CONDENSED => Self::ExtraCondensed,
2652            ffi::PANGO_STRETCH_CONDENSED => Self::Condensed,
2653            ffi::PANGO_STRETCH_SEMI_CONDENSED => Self::SemiCondensed,
2654            ffi::PANGO_STRETCH_NORMAL => Self::Normal,
2655            ffi::PANGO_STRETCH_SEMI_EXPANDED => Self::SemiExpanded,
2656            ffi::PANGO_STRETCH_EXPANDED => Self::Expanded,
2657            ffi::PANGO_STRETCH_EXTRA_EXPANDED => Self::ExtraExpanded,
2658            ffi::PANGO_STRETCH_ULTRA_EXPANDED => Self::UltraExpanded,
2659            value => Self::__Unknown(value),
2660        }
2661    }
2662}
2663
2664impl StaticType for Stretch {
2665    #[inline]
2666    #[doc(alias = "pango_stretch_get_type")]
2667    fn static_type() -> glib::Type {
2668        unsafe { from_glib(ffi::pango_stretch_get_type()) }
2669    }
2670}
2671
2672impl glib::HasParamSpec for Stretch {
2673    type ParamSpec = glib::ParamSpecEnum;
2674    type SetValue = Self;
2675    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2676
2677    fn param_spec_builder() -> Self::BuilderFn {
2678        Self::ParamSpec::builder_with_default
2679    }
2680}
2681
2682impl glib::value::ValueType for Stretch {
2683    type Type = Self;
2684}
2685
2686unsafe impl<'a> glib::value::FromValue<'a> for Stretch {
2687    type Checker = glib::value::GenericValueTypeChecker<Self>;
2688
2689    #[inline]
2690    unsafe fn from_value(value: &'a glib::Value) -> Self {
2691        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2692    }
2693}
2694
2695impl ToValue for Stretch {
2696    #[inline]
2697    fn to_value(&self) -> glib::Value {
2698        let mut value = glib::Value::for_value_type::<Self>();
2699        unsafe {
2700            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2701        }
2702        value
2703    }
2704
2705    #[inline]
2706    fn value_type(&self) -> glib::Type {
2707        Self::static_type()
2708    }
2709}
2710
2711impl From<Stretch> for glib::Value {
2712    #[inline]
2713    fn from(v: Stretch) -> Self {
2714        ToValue::to_value(&v)
2715    }
2716}
2717
2718/// An enumeration specifying the various slant styles possible for a font.
2719#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2720#[non_exhaustive]
2721#[doc(alias = "PangoStyle")]
2722pub enum Style {
2723    /// the font is upright.
2724    #[doc(alias = "PANGO_STYLE_NORMAL")]
2725    Normal,
2726    /// the font is slanted, but in a roman style.
2727    #[doc(alias = "PANGO_STYLE_OBLIQUE")]
2728    Oblique,
2729    /// the font is slanted in an italic style.
2730    #[doc(alias = "PANGO_STYLE_ITALIC")]
2731    Italic,
2732    #[doc(hidden)]
2733    __Unknown(i32),
2734}
2735
2736#[doc(hidden)]
2737impl IntoGlib for Style {
2738    type GlibType = ffi::PangoStyle;
2739
2740    #[inline]
2741    fn into_glib(self) -> ffi::PangoStyle {
2742        match self {
2743            Self::Normal => ffi::PANGO_STYLE_NORMAL,
2744            Self::Oblique => ffi::PANGO_STYLE_OBLIQUE,
2745            Self::Italic => ffi::PANGO_STYLE_ITALIC,
2746            Self::__Unknown(value) => value,
2747        }
2748    }
2749}
2750
2751#[doc(hidden)]
2752impl FromGlib<ffi::PangoStyle> for Style {
2753    #[inline]
2754    unsafe fn from_glib(value: ffi::PangoStyle) -> Self {
2755        match value {
2756            ffi::PANGO_STYLE_NORMAL => Self::Normal,
2757            ffi::PANGO_STYLE_OBLIQUE => Self::Oblique,
2758            ffi::PANGO_STYLE_ITALIC => Self::Italic,
2759            value => Self::__Unknown(value),
2760        }
2761    }
2762}
2763
2764impl StaticType for Style {
2765    #[inline]
2766    #[doc(alias = "pango_style_get_type")]
2767    fn static_type() -> glib::Type {
2768        unsafe { from_glib(ffi::pango_style_get_type()) }
2769    }
2770}
2771
2772impl glib::HasParamSpec for Style {
2773    type ParamSpec = glib::ParamSpecEnum;
2774    type SetValue = Self;
2775    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2776
2777    fn param_spec_builder() -> Self::BuilderFn {
2778        Self::ParamSpec::builder_with_default
2779    }
2780}
2781
2782impl glib::value::ValueType for Style {
2783    type Type = Self;
2784}
2785
2786unsafe impl<'a> glib::value::FromValue<'a> for Style {
2787    type Checker = glib::value::GenericValueTypeChecker<Self>;
2788
2789    #[inline]
2790    unsafe fn from_value(value: &'a glib::Value) -> Self {
2791        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2792    }
2793}
2794
2795impl ToValue for Style {
2796    #[inline]
2797    fn to_value(&self) -> glib::Value {
2798        let mut value = glib::Value::for_value_type::<Self>();
2799        unsafe {
2800            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2801        }
2802        value
2803    }
2804
2805    #[inline]
2806    fn value_type(&self) -> glib::Type {
2807        Self::static_type()
2808    }
2809}
2810
2811impl From<Style> for glib::Value {
2812    #[inline]
2813    fn from(v: Style) -> Self {
2814        ToValue::to_value(&v)
2815    }
2816}
2817
2818/// [`TabAlign`][crate::TabAlign] specifies where the text appears relative to the tab stop
2819/// position.
2820#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2821#[non_exhaustive]
2822#[doc(alias = "PangoTabAlign")]
2823pub enum TabAlign {
2824    /// the text appears to the right of the tab stop position
2825    #[doc(alias = "PANGO_TAB_LEFT")]
2826    Left,
2827    /// the text appears to the left of the tab stop position
2828    ///   until the available space is filled. Since: 1.50
2829    #[cfg(feature = "v1_50")]
2830    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2831    #[doc(alias = "PANGO_TAB_RIGHT")]
2832    Right,
2833    /// the text is centered at the tab stop position
2834    ///   until the available space is filled. Since: 1.50
2835    #[cfg(feature = "v1_50")]
2836    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2837    #[doc(alias = "PANGO_TAB_CENTER")]
2838    Center,
2839    /// text before the first occurrence of the decimal point
2840    ///   character appears to the left of the tab stop position (until the available
2841    ///   space is filled), the rest to the right. Since: 1.50
2842    #[cfg(feature = "v1_50")]
2843    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2844    #[doc(alias = "PANGO_TAB_DECIMAL")]
2845    Decimal,
2846    #[doc(hidden)]
2847    __Unknown(i32),
2848}
2849
2850#[doc(hidden)]
2851impl IntoGlib for TabAlign {
2852    type GlibType = ffi::PangoTabAlign;
2853
2854    #[inline]
2855    fn into_glib(self) -> ffi::PangoTabAlign {
2856        match self {
2857            Self::Left => ffi::PANGO_TAB_LEFT,
2858            #[cfg(feature = "v1_50")]
2859            Self::Right => ffi::PANGO_TAB_RIGHT,
2860            #[cfg(feature = "v1_50")]
2861            Self::Center => ffi::PANGO_TAB_CENTER,
2862            #[cfg(feature = "v1_50")]
2863            Self::Decimal => ffi::PANGO_TAB_DECIMAL,
2864            Self::__Unknown(value) => value,
2865        }
2866    }
2867}
2868
2869#[doc(hidden)]
2870impl FromGlib<ffi::PangoTabAlign> for TabAlign {
2871    #[inline]
2872    unsafe fn from_glib(value: ffi::PangoTabAlign) -> Self {
2873        match value {
2874            ffi::PANGO_TAB_LEFT => Self::Left,
2875            #[cfg(feature = "v1_50")]
2876            ffi::PANGO_TAB_RIGHT => Self::Right,
2877            #[cfg(feature = "v1_50")]
2878            ffi::PANGO_TAB_CENTER => Self::Center,
2879            #[cfg(feature = "v1_50")]
2880            ffi::PANGO_TAB_DECIMAL => Self::Decimal,
2881            value => Self::__Unknown(value),
2882        }
2883    }
2884}
2885
2886impl StaticType for TabAlign {
2887    #[inline]
2888    #[doc(alias = "pango_tab_align_get_type")]
2889    fn static_type() -> glib::Type {
2890        unsafe { from_glib(ffi::pango_tab_align_get_type()) }
2891    }
2892}
2893
2894impl glib::HasParamSpec for TabAlign {
2895    type ParamSpec = glib::ParamSpecEnum;
2896    type SetValue = Self;
2897    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2898
2899    fn param_spec_builder() -> Self::BuilderFn {
2900        Self::ParamSpec::builder_with_default
2901    }
2902}
2903
2904impl glib::value::ValueType for TabAlign {
2905    type Type = Self;
2906}
2907
2908unsafe impl<'a> glib::value::FromValue<'a> for TabAlign {
2909    type Checker = glib::value::GenericValueTypeChecker<Self>;
2910
2911    #[inline]
2912    unsafe fn from_value(value: &'a glib::Value) -> Self {
2913        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2914    }
2915}
2916
2917impl ToValue for TabAlign {
2918    #[inline]
2919    fn to_value(&self) -> glib::Value {
2920        let mut value = glib::Value::for_value_type::<Self>();
2921        unsafe {
2922            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2923        }
2924        value
2925    }
2926
2927    #[inline]
2928    fn value_type(&self) -> glib::Type {
2929        Self::static_type()
2930    }
2931}
2932
2933impl From<TabAlign> for glib::Value {
2934    #[inline]
2935    fn from(v: TabAlign) -> Self {
2936        ToValue::to_value(&v)
2937    }
2938}
2939
2940/// An enumeration that affects how Pango treats characters during shaping.
2941#[cfg(feature = "v1_50")]
2942#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2943#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2944#[non_exhaustive]
2945#[doc(alias = "PangoTextTransform")]
2946pub enum TextTransform {
2947    /// Leave text unchanged
2948    #[doc(alias = "PANGO_TEXT_TRANSFORM_NONE")]
2949    None,
2950    /// Display letters and numbers as lowercase
2951    #[doc(alias = "PANGO_TEXT_TRANSFORM_LOWERCASE")]
2952    Lowercase,
2953    /// Display letters and numbers as uppercase
2954    #[doc(alias = "PANGO_TEXT_TRANSFORM_UPPERCASE")]
2955    Uppercase,
2956    /// Display the first character of a word
2957    ///   in titlecase
2958    #[doc(alias = "PANGO_TEXT_TRANSFORM_CAPITALIZE")]
2959    Capitalize,
2960    #[doc(hidden)]
2961    __Unknown(i32),
2962}
2963
2964#[cfg(feature = "v1_50")]
2965#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2966#[doc(hidden)]
2967impl IntoGlib for TextTransform {
2968    type GlibType = ffi::PangoTextTransform;
2969
2970    #[inline]
2971    fn into_glib(self) -> ffi::PangoTextTransform {
2972        match self {
2973            Self::None => ffi::PANGO_TEXT_TRANSFORM_NONE,
2974            Self::Lowercase => ffi::PANGO_TEXT_TRANSFORM_LOWERCASE,
2975            Self::Uppercase => ffi::PANGO_TEXT_TRANSFORM_UPPERCASE,
2976            Self::Capitalize => ffi::PANGO_TEXT_TRANSFORM_CAPITALIZE,
2977            Self::__Unknown(value) => value,
2978        }
2979    }
2980}
2981
2982#[cfg(feature = "v1_50")]
2983#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2984#[doc(hidden)]
2985impl FromGlib<ffi::PangoTextTransform> for TextTransform {
2986    #[inline]
2987    unsafe fn from_glib(value: ffi::PangoTextTransform) -> Self {
2988        match value {
2989            ffi::PANGO_TEXT_TRANSFORM_NONE => Self::None,
2990            ffi::PANGO_TEXT_TRANSFORM_LOWERCASE => Self::Lowercase,
2991            ffi::PANGO_TEXT_TRANSFORM_UPPERCASE => Self::Uppercase,
2992            ffi::PANGO_TEXT_TRANSFORM_CAPITALIZE => Self::Capitalize,
2993            value => Self::__Unknown(value),
2994        }
2995    }
2996}
2997
2998#[cfg(feature = "v1_50")]
2999#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3000impl StaticType for TextTransform {
3001    #[inline]
3002    #[doc(alias = "pango_text_transform_get_type")]
3003    fn static_type() -> glib::Type {
3004        unsafe { from_glib(ffi::pango_text_transform_get_type()) }
3005    }
3006}
3007
3008#[cfg(feature = "v1_50")]
3009#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3010impl glib::HasParamSpec for TextTransform {
3011    type ParamSpec = glib::ParamSpecEnum;
3012    type SetValue = Self;
3013    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3014
3015    fn param_spec_builder() -> Self::BuilderFn {
3016        Self::ParamSpec::builder_with_default
3017    }
3018}
3019
3020#[cfg(feature = "v1_50")]
3021#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3022impl glib::value::ValueType for TextTransform {
3023    type Type = Self;
3024}
3025
3026#[cfg(feature = "v1_50")]
3027#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3028unsafe impl<'a> glib::value::FromValue<'a> for TextTransform {
3029    type Checker = glib::value::GenericValueTypeChecker<Self>;
3030
3031    #[inline]
3032    unsafe fn from_value(value: &'a glib::Value) -> Self {
3033        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3034    }
3035}
3036
3037#[cfg(feature = "v1_50")]
3038#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3039impl ToValue for TextTransform {
3040    #[inline]
3041    fn to_value(&self) -> glib::Value {
3042        let mut value = glib::Value::for_value_type::<Self>();
3043        unsafe {
3044            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3045        }
3046        value
3047    }
3048
3049    #[inline]
3050    fn value_type(&self) -> glib::Type {
3051        Self::static_type()
3052    }
3053}
3054
3055#[cfg(feature = "v1_50")]
3056#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3057impl From<TextTransform> for glib::Value {
3058    #[inline]
3059    fn from(v: TextTransform) -> Self {
3060        ToValue::to_value(&v)
3061    }
3062}
3063
3064/// The [`Underline`][crate::Underline] enumeration is used to specify whether text
3065/// should be underlined, and if so, the type of underlining.
3066#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3067#[non_exhaustive]
3068#[doc(alias = "PangoUnderline")]
3069pub enum Underline {
3070    /// no underline should be drawn
3071    #[doc(alias = "PANGO_UNDERLINE_NONE")]
3072    None,
3073    /// a single underline should be drawn
3074    #[doc(alias = "PANGO_UNDERLINE_SINGLE")]
3075    Single,
3076    /// a double underline should be drawn
3077    #[doc(alias = "PANGO_UNDERLINE_DOUBLE")]
3078    Double,
3079    /// a single underline should be drawn at a
3080    ///   position beneath the ink extents of the text being
3081    ///   underlined. This should be used only for underlining
3082    ///   single characters, such as for keyboard accelerators.
3083    ///   [`Single`][Self::Single] should be used for extended
3084    ///   portions of text.
3085    #[doc(alias = "PANGO_UNDERLINE_LOW")]
3086    Low,
3087    /// an underline indicating an error should
3088    ///   be drawn below. The exact style of rendering is up to the
3089    ///   [`Renderer`][crate::Renderer] in use, but typical styles include wavy
3090    ///   or dotted lines.
3091    ///   This underline is typically used to indicate an error such
3092    ///   as a possible mispelling; in some cases a contrasting color
3093    ///   may automatically be used. This type of underlining is
3094    ///   available since Pango 1.4.
3095    #[doc(alias = "PANGO_UNDERLINE_ERROR")]
3096    Error,
3097    /// Like @PANGO_UNDERLINE_SINGLE, but
3098    ///   drawn continuously across multiple runs. This type
3099    ///   of underlining is available since Pango 1.46.
3100    #[doc(alias = "PANGO_UNDERLINE_SINGLE_LINE")]
3101    SingleLine,
3102    /// Like @PANGO_UNDERLINE_DOUBLE, but
3103    ///   drawn continuously across multiple runs. This type
3104    ///   of underlining is available since Pango 1.46.
3105    #[doc(alias = "PANGO_UNDERLINE_DOUBLE_LINE")]
3106    DoubleLine,
3107    /// Like @PANGO_UNDERLINE_ERROR, but
3108    ///   drawn continuously across multiple runs. This type
3109    ///   of underlining is available since Pango 1.46.
3110    #[doc(alias = "PANGO_UNDERLINE_ERROR_LINE")]
3111    ErrorLine,
3112    #[doc(hidden)]
3113    __Unknown(i32),
3114}
3115
3116#[doc(hidden)]
3117impl IntoGlib for Underline {
3118    type GlibType = ffi::PangoUnderline;
3119
3120    #[inline]
3121    fn into_glib(self) -> ffi::PangoUnderline {
3122        match self {
3123            Self::None => ffi::PANGO_UNDERLINE_NONE,
3124            Self::Single => ffi::PANGO_UNDERLINE_SINGLE,
3125            Self::Double => ffi::PANGO_UNDERLINE_DOUBLE,
3126            Self::Low => ffi::PANGO_UNDERLINE_LOW,
3127            Self::Error => ffi::PANGO_UNDERLINE_ERROR,
3128            Self::SingleLine => ffi::PANGO_UNDERLINE_SINGLE_LINE,
3129            Self::DoubleLine => ffi::PANGO_UNDERLINE_DOUBLE_LINE,
3130            Self::ErrorLine => ffi::PANGO_UNDERLINE_ERROR_LINE,
3131            Self::__Unknown(value) => value,
3132        }
3133    }
3134}
3135
3136#[doc(hidden)]
3137impl FromGlib<ffi::PangoUnderline> for Underline {
3138    #[inline]
3139    unsafe fn from_glib(value: ffi::PangoUnderline) -> Self {
3140        match value {
3141            ffi::PANGO_UNDERLINE_NONE => Self::None,
3142            ffi::PANGO_UNDERLINE_SINGLE => Self::Single,
3143            ffi::PANGO_UNDERLINE_DOUBLE => Self::Double,
3144            ffi::PANGO_UNDERLINE_LOW => Self::Low,
3145            ffi::PANGO_UNDERLINE_ERROR => Self::Error,
3146            ffi::PANGO_UNDERLINE_SINGLE_LINE => Self::SingleLine,
3147            ffi::PANGO_UNDERLINE_DOUBLE_LINE => Self::DoubleLine,
3148            ffi::PANGO_UNDERLINE_ERROR_LINE => Self::ErrorLine,
3149            value => Self::__Unknown(value),
3150        }
3151    }
3152}
3153
3154impl StaticType for Underline {
3155    #[inline]
3156    #[doc(alias = "pango_underline_get_type")]
3157    fn static_type() -> glib::Type {
3158        unsafe { from_glib(ffi::pango_underline_get_type()) }
3159    }
3160}
3161
3162impl glib::HasParamSpec for Underline {
3163    type ParamSpec = glib::ParamSpecEnum;
3164    type SetValue = Self;
3165    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3166
3167    fn param_spec_builder() -> Self::BuilderFn {
3168        Self::ParamSpec::builder_with_default
3169    }
3170}
3171
3172impl glib::value::ValueType for Underline {
3173    type Type = Self;
3174}
3175
3176unsafe impl<'a> glib::value::FromValue<'a> for Underline {
3177    type Checker = glib::value::GenericValueTypeChecker<Self>;
3178
3179    #[inline]
3180    unsafe fn from_value(value: &'a glib::Value) -> Self {
3181        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3182    }
3183}
3184
3185impl ToValue for Underline {
3186    #[inline]
3187    fn to_value(&self) -> glib::Value {
3188        let mut value = glib::Value::for_value_type::<Self>();
3189        unsafe {
3190            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3191        }
3192        value
3193    }
3194
3195    #[inline]
3196    fn value_type(&self) -> glib::Type {
3197        Self::static_type()
3198    }
3199}
3200
3201impl From<Underline> for glib::Value {
3202    #[inline]
3203    fn from(v: Underline) -> Self {
3204        ToValue::to_value(&v)
3205    }
3206}
3207
3208/// An enumeration specifying capitalization variant of the font.
3209#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3210#[non_exhaustive]
3211#[doc(alias = "PangoVariant")]
3212pub enum Variant {
3213    /// A normal font.
3214    #[doc(alias = "PANGO_VARIANT_NORMAL")]
3215    Normal,
3216    /// A font with the lower case characters
3217    ///   replaced by smaller variants of the capital characters.
3218    #[doc(alias = "PANGO_VARIANT_SMALL_CAPS")]
3219    SmallCaps,
3220    /// A font with all characters
3221    ///   replaced by smaller variants of the capital characters. Since: 1.50
3222    #[cfg(feature = "v1_50")]
3223    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3224    #[doc(alias = "PANGO_VARIANT_ALL_SMALL_CAPS")]
3225    AllSmallCaps,
3226    /// A font with the lower case characters
3227    ///   replaced by smaller variants of the capital characters.
3228    ///   Petite Caps can be even smaller than Small Caps. Since: 1.50
3229    #[cfg(feature = "v1_50")]
3230    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3231    #[doc(alias = "PANGO_VARIANT_PETITE_CAPS")]
3232    PetiteCaps,
3233    /// A font with all characters
3234    ///   replaced by smaller variants of the capital characters.
3235    ///   Petite Caps can be even smaller than Small Caps. Since: 1.50
3236    #[cfg(feature = "v1_50")]
3237    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3238    #[doc(alias = "PANGO_VARIANT_ALL_PETITE_CAPS")]
3239    AllPetiteCaps,
3240    /// A font with the upper case characters
3241    ///   replaced by smaller variants of the capital letters. Since: 1.50
3242    #[cfg(feature = "v1_50")]
3243    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3244    #[doc(alias = "PANGO_VARIANT_UNICASE")]
3245    Unicase,
3246    /// A font with capital letters that
3247    ///   are more suitable for all-uppercase titles. Since: 1.50
3248    #[cfg(feature = "v1_50")]
3249    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3250    #[doc(alias = "PANGO_VARIANT_TITLE_CAPS")]
3251    TitleCaps,
3252    #[doc(hidden)]
3253    __Unknown(i32),
3254}
3255
3256#[doc(hidden)]
3257impl IntoGlib for Variant {
3258    type GlibType = ffi::PangoVariant;
3259
3260    #[inline]
3261    fn into_glib(self) -> ffi::PangoVariant {
3262        match self {
3263            Self::Normal => ffi::PANGO_VARIANT_NORMAL,
3264            Self::SmallCaps => ffi::PANGO_VARIANT_SMALL_CAPS,
3265            #[cfg(feature = "v1_50")]
3266            Self::AllSmallCaps => ffi::PANGO_VARIANT_ALL_SMALL_CAPS,
3267            #[cfg(feature = "v1_50")]
3268            Self::PetiteCaps => ffi::PANGO_VARIANT_PETITE_CAPS,
3269            #[cfg(feature = "v1_50")]
3270            Self::AllPetiteCaps => ffi::PANGO_VARIANT_ALL_PETITE_CAPS,
3271            #[cfg(feature = "v1_50")]
3272            Self::Unicase => ffi::PANGO_VARIANT_UNICASE,
3273            #[cfg(feature = "v1_50")]
3274            Self::TitleCaps => ffi::PANGO_VARIANT_TITLE_CAPS,
3275            Self::__Unknown(value) => value,
3276        }
3277    }
3278}
3279
3280#[doc(hidden)]
3281impl FromGlib<ffi::PangoVariant> for Variant {
3282    #[inline]
3283    unsafe fn from_glib(value: ffi::PangoVariant) -> Self {
3284        match value {
3285            ffi::PANGO_VARIANT_NORMAL => Self::Normal,
3286            ffi::PANGO_VARIANT_SMALL_CAPS => Self::SmallCaps,
3287            #[cfg(feature = "v1_50")]
3288            ffi::PANGO_VARIANT_ALL_SMALL_CAPS => Self::AllSmallCaps,
3289            #[cfg(feature = "v1_50")]
3290            ffi::PANGO_VARIANT_PETITE_CAPS => Self::PetiteCaps,
3291            #[cfg(feature = "v1_50")]
3292            ffi::PANGO_VARIANT_ALL_PETITE_CAPS => Self::AllPetiteCaps,
3293            #[cfg(feature = "v1_50")]
3294            ffi::PANGO_VARIANT_UNICASE => Self::Unicase,
3295            #[cfg(feature = "v1_50")]
3296            ffi::PANGO_VARIANT_TITLE_CAPS => Self::TitleCaps,
3297            value => Self::__Unknown(value),
3298        }
3299    }
3300}
3301
3302impl StaticType for Variant {
3303    #[inline]
3304    #[doc(alias = "pango_variant_get_type")]
3305    fn static_type() -> glib::Type {
3306        unsafe { from_glib(ffi::pango_variant_get_type()) }
3307    }
3308}
3309
3310impl glib::HasParamSpec for Variant {
3311    type ParamSpec = glib::ParamSpecEnum;
3312    type SetValue = Self;
3313    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3314
3315    fn param_spec_builder() -> Self::BuilderFn {
3316        Self::ParamSpec::builder_with_default
3317    }
3318}
3319
3320impl glib::value::ValueType for Variant {
3321    type Type = Self;
3322}
3323
3324unsafe impl<'a> glib::value::FromValue<'a> for Variant {
3325    type Checker = glib::value::GenericValueTypeChecker<Self>;
3326
3327    #[inline]
3328    unsafe fn from_value(value: &'a glib::Value) -> Self {
3329        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3330    }
3331}
3332
3333impl ToValue for Variant {
3334    #[inline]
3335    fn to_value(&self) -> glib::Value {
3336        let mut value = glib::Value::for_value_type::<Self>();
3337        unsafe {
3338            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3339        }
3340        value
3341    }
3342
3343    #[inline]
3344    fn value_type(&self) -> glib::Type {
3345        Self::static_type()
3346    }
3347}
3348
3349impl From<Variant> for glib::Value {
3350    #[inline]
3351    fn from(v: Variant) -> Self {
3352        ToValue::to_value(&v)
3353    }
3354}
3355
3356/// An enumeration specifying the weight (boldness) of a font.
3357///
3358/// Weight is specified as a numeric value ranging from 100 to 1000.
3359/// This enumeration simply provides some common, predefined values.
3360#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3361#[non_exhaustive]
3362#[doc(alias = "PangoWeight")]
3363pub enum Weight {
3364    /// the thin weight (= 100) Since: 1.24
3365    #[doc(alias = "PANGO_WEIGHT_THIN")]
3366    Thin,
3367    /// the ultralight weight (= 200)
3368    #[doc(alias = "PANGO_WEIGHT_ULTRALIGHT")]
3369    Ultralight,
3370    /// the light weight (= 300)
3371    #[doc(alias = "PANGO_WEIGHT_LIGHT")]
3372    Light,
3373    /// the semilight weight (= 350) Since: 1.36.7
3374    #[doc(alias = "PANGO_WEIGHT_SEMILIGHT")]
3375    Semilight,
3376    /// the book weight (= 380) Since: 1.24)
3377    #[doc(alias = "PANGO_WEIGHT_BOOK")]
3378    Book,
3379    /// the default weight (= 400)
3380    #[doc(alias = "PANGO_WEIGHT_NORMAL")]
3381    Normal,
3382    /// the medium weight (= 500) Since: 1.24
3383    #[doc(alias = "PANGO_WEIGHT_MEDIUM")]
3384    Medium,
3385    /// the semibold weight (= 600)
3386    #[doc(alias = "PANGO_WEIGHT_SEMIBOLD")]
3387    Semibold,
3388    /// the bold weight (= 700)
3389    #[doc(alias = "PANGO_WEIGHT_BOLD")]
3390    Bold,
3391    /// the ultrabold weight (= 800)
3392    #[doc(alias = "PANGO_WEIGHT_ULTRABOLD")]
3393    Ultrabold,
3394    /// the heavy weight (= 900)
3395    #[doc(alias = "PANGO_WEIGHT_HEAVY")]
3396    Heavy,
3397    /// the ultraheavy weight (= 1000) Since: 1.24
3398    #[doc(alias = "PANGO_WEIGHT_ULTRAHEAVY")]
3399    Ultraheavy,
3400    #[doc(hidden)]
3401    __Unknown(i32),
3402}
3403
3404#[doc(hidden)]
3405impl IntoGlib for Weight {
3406    type GlibType = ffi::PangoWeight;
3407
3408    #[inline]
3409    fn into_glib(self) -> ffi::PangoWeight {
3410        match self {
3411            Self::Thin => ffi::PANGO_WEIGHT_THIN,
3412            Self::Ultralight => ffi::PANGO_WEIGHT_ULTRALIGHT,
3413            Self::Light => ffi::PANGO_WEIGHT_LIGHT,
3414            Self::Semilight => ffi::PANGO_WEIGHT_SEMILIGHT,
3415            Self::Book => ffi::PANGO_WEIGHT_BOOK,
3416            Self::Normal => ffi::PANGO_WEIGHT_NORMAL,
3417            Self::Medium => ffi::PANGO_WEIGHT_MEDIUM,
3418            Self::Semibold => ffi::PANGO_WEIGHT_SEMIBOLD,
3419            Self::Bold => ffi::PANGO_WEIGHT_BOLD,
3420            Self::Ultrabold => ffi::PANGO_WEIGHT_ULTRABOLD,
3421            Self::Heavy => ffi::PANGO_WEIGHT_HEAVY,
3422            Self::Ultraheavy => ffi::PANGO_WEIGHT_ULTRAHEAVY,
3423            Self::__Unknown(value) => value,
3424        }
3425    }
3426}
3427
3428#[doc(hidden)]
3429impl FromGlib<ffi::PangoWeight> for Weight {
3430    #[inline]
3431    unsafe fn from_glib(value: ffi::PangoWeight) -> Self {
3432        match value {
3433            ffi::PANGO_WEIGHT_THIN => Self::Thin,
3434            ffi::PANGO_WEIGHT_ULTRALIGHT => Self::Ultralight,
3435            ffi::PANGO_WEIGHT_LIGHT => Self::Light,
3436            ffi::PANGO_WEIGHT_SEMILIGHT => Self::Semilight,
3437            ffi::PANGO_WEIGHT_BOOK => Self::Book,
3438            ffi::PANGO_WEIGHT_NORMAL => Self::Normal,
3439            ffi::PANGO_WEIGHT_MEDIUM => Self::Medium,
3440            ffi::PANGO_WEIGHT_SEMIBOLD => Self::Semibold,
3441            ffi::PANGO_WEIGHT_BOLD => Self::Bold,
3442            ffi::PANGO_WEIGHT_ULTRABOLD => Self::Ultrabold,
3443            ffi::PANGO_WEIGHT_HEAVY => Self::Heavy,
3444            ffi::PANGO_WEIGHT_ULTRAHEAVY => Self::Ultraheavy,
3445            value => Self::__Unknown(value),
3446        }
3447    }
3448}
3449
3450impl StaticType for Weight {
3451    #[inline]
3452    #[doc(alias = "pango_weight_get_type")]
3453    fn static_type() -> glib::Type {
3454        unsafe { from_glib(ffi::pango_weight_get_type()) }
3455    }
3456}
3457
3458impl glib::HasParamSpec for Weight {
3459    type ParamSpec = glib::ParamSpecEnum;
3460    type SetValue = Self;
3461    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3462
3463    fn param_spec_builder() -> Self::BuilderFn {
3464        Self::ParamSpec::builder_with_default
3465    }
3466}
3467
3468impl glib::value::ValueType for Weight {
3469    type Type = Self;
3470}
3471
3472unsafe impl<'a> glib::value::FromValue<'a> for Weight {
3473    type Checker = glib::value::GenericValueTypeChecker<Self>;
3474
3475    #[inline]
3476    unsafe fn from_value(value: &'a glib::Value) -> Self {
3477        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3478    }
3479}
3480
3481impl ToValue for Weight {
3482    #[inline]
3483    fn to_value(&self) -> glib::Value {
3484        let mut value = glib::Value::for_value_type::<Self>();
3485        unsafe {
3486            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3487        }
3488        value
3489    }
3490
3491    #[inline]
3492    fn value_type(&self) -> glib::Type {
3493        Self::static_type()
3494    }
3495}
3496
3497impl From<Weight> for glib::Value {
3498    #[inline]
3499    fn from(v: Weight) -> Self {
3500        ToValue::to_value(&v)
3501    }
3502}
3503
3504/// An enumeration specifying the width of the font relative to other designs
3505/// within a family.
3506///
3507/// The enumeration values match [`Stretch`][crate::Stretch], but
3508/// the numeric values are expanded to allow intermediate
3509/// values.
3510#[cfg(feature = "v1_58")]
3511#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3512#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3513#[non_exhaustive]
3514#[doc(alias = "PangoWidth")]
3515pub enum Width {
3516    /// ultra condensed width
3517    #[doc(alias = "PANGO_WIDTH_ULTRA_CONDENSED")]
3518    UltraCondensed,
3519    /// extra condensed width
3520    #[doc(alias = "PANGO_WIDTH_EXTRA_CONDENSED")]
3521    ExtraCondensed,
3522    /// condensed width
3523    #[doc(alias = "PANGO_WIDTH_CONDENSED")]
3524    Condensed,
3525    /// semi condensed width
3526    #[doc(alias = "PANGO_WIDTH_SEMI_CONDENSED")]
3527    SemiCondensed,
3528    /// the normal width
3529    #[doc(alias = "PANGO_WIDTH_NORMAL")]
3530    Normal,
3531    /// semi expanded width
3532    #[doc(alias = "PANGO_WIDTH_SEMI_EXPANDED")]
3533    SemiExpanded,
3534    /// expanded width
3535    #[doc(alias = "PANGO_WIDTH_EXPANDED")]
3536    Expanded,
3537    /// extra expanded width
3538    #[doc(alias = "PANGO_WIDTH_EXTRA_EXPANDED")]
3539    ExtraExpanded,
3540    /// ultra expanded width
3541    #[doc(alias = "PANGO_WIDTH_ULTRA_EXPANDED")]
3542    UltraExpanded,
3543    #[doc(hidden)]
3544    __Unknown(i32),
3545}
3546
3547#[cfg(feature = "v1_58")]
3548#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3549#[doc(hidden)]
3550impl IntoGlib for Width {
3551    type GlibType = ffi::PangoWidth;
3552
3553    #[inline]
3554    fn into_glib(self) -> ffi::PangoWidth {
3555        match self {
3556            Self::UltraCondensed => ffi::PANGO_WIDTH_ULTRA_CONDENSED,
3557            Self::ExtraCondensed => ffi::PANGO_WIDTH_EXTRA_CONDENSED,
3558            Self::Condensed => ffi::PANGO_WIDTH_CONDENSED,
3559            Self::SemiCondensed => ffi::PANGO_WIDTH_SEMI_CONDENSED,
3560            Self::Normal => ffi::PANGO_WIDTH_NORMAL,
3561            Self::SemiExpanded => ffi::PANGO_WIDTH_SEMI_EXPANDED,
3562            Self::Expanded => ffi::PANGO_WIDTH_EXPANDED,
3563            Self::ExtraExpanded => ffi::PANGO_WIDTH_EXTRA_EXPANDED,
3564            Self::UltraExpanded => ffi::PANGO_WIDTH_ULTRA_EXPANDED,
3565            Self::__Unknown(value) => value,
3566        }
3567    }
3568}
3569
3570#[cfg(feature = "v1_58")]
3571#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3572#[doc(hidden)]
3573impl FromGlib<ffi::PangoWidth> for Width {
3574    #[inline]
3575    unsafe fn from_glib(value: ffi::PangoWidth) -> Self {
3576        match value {
3577            ffi::PANGO_WIDTH_ULTRA_CONDENSED => Self::UltraCondensed,
3578            ffi::PANGO_WIDTH_EXTRA_CONDENSED => Self::ExtraCondensed,
3579            ffi::PANGO_WIDTH_CONDENSED => Self::Condensed,
3580            ffi::PANGO_WIDTH_SEMI_CONDENSED => Self::SemiCondensed,
3581            ffi::PANGO_WIDTH_NORMAL => Self::Normal,
3582            ffi::PANGO_WIDTH_SEMI_EXPANDED => Self::SemiExpanded,
3583            ffi::PANGO_WIDTH_EXPANDED => Self::Expanded,
3584            ffi::PANGO_WIDTH_EXTRA_EXPANDED => Self::ExtraExpanded,
3585            ffi::PANGO_WIDTH_ULTRA_EXPANDED => Self::UltraExpanded,
3586            value => Self::__Unknown(value),
3587        }
3588    }
3589}
3590
3591#[cfg(feature = "v1_58")]
3592#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3593impl StaticType for Width {
3594    #[inline]
3595    #[doc(alias = "pango_width_get_type")]
3596    fn static_type() -> glib::Type {
3597        unsafe { from_glib(ffi::pango_width_get_type()) }
3598    }
3599}
3600
3601#[cfg(feature = "v1_58")]
3602#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3603impl glib::HasParamSpec for Width {
3604    type ParamSpec = glib::ParamSpecEnum;
3605    type SetValue = Self;
3606    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3607
3608    fn param_spec_builder() -> Self::BuilderFn {
3609        Self::ParamSpec::builder_with_default
3610    }
3611}
3612
3613#[cfg(feature = "v1_58")]
3614#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3615impl glib::value::ValueType for Width {
3616    type Type = Self;
3617}
3618
3619#[cfg(feature = "v1_58")]
3620#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3621unsafe impl<'a> glib::value::FromValue<'a> for Width {
3622    type Checker = glib::value::GenericValueTypeChecker<Self>;
3623
3624    #[inline]
3625    unsafe fn from_value(value: &'a glib::Value) -> Self {
3626        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3627    }
3628}
3629
3630#[cfg(feature = "v1_58")]
3631#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3632impl ToValue for Width {
3633    #[inline]
3634    fn to_value(&self) -> glib::Value {
3635        let mut value = glib::Value::for_value_type::<Self>();
3636        unsafe {
3637            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3638        }
3639        value
3640    }
3641
3642    #[inline]
3643    fn value_type(&self) -> glib::Type {
3644        Self::static_type()
3645    }
3646}
3647
3648#[cfg(feature = "v1_58")]
3649#[cfg_attr(docsrs, doc(cfg(feature = "v1_58")))]
3650impl From<Width> for glib::Value {
3651    #[inline]
3652    fn from(v: Width) -> Self {
3653        ToValue::to_value(&v)
3654    }
3655}
3656
3657/// [`WrapMode`][crate::WrapMode] describes how to wrap the lines of a [`Layout`][crate::Layout]
3658/// to the desired width.
3659///
3660/// For @PANGO_WRAP_WORD, Pango uses break opportunities that are determined
3661/// by the Unicode line breaking algorithm. For @PANGO_WRAP_CHAR, Pango allows
3662/// breaking at grapheme boundaries that are determined by the Unicode text
3663/// segmentation algorithm.
3664#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3665#[non_exhaustive]
3666#[doc(alias = "PangoWrapMode")]
3667pub enum WrapMode {
3668    /// wrap lines at word boundaries.
3669    #[doc(alias = "PANGO_WRAP_WORD")]
3670    Word,
3671    /// wrap lines at character boundaries.
3672    #[doc(alias = "PANGO_WRAP_CHAR")]
3673    Char,
3674    /// wrap lines at word boundaries, but fall back to
3675    ///   character boundaries if there is not enough space for a full word.
3676    #[doc(alias = "PANGO_WRAP_WORD_CHAR")]
3677    WordChar,
3678    /// do not wrap.
3679    #[cfg(feature = "v1_56")]
3680    #[cfg_attr(docsrs, doc(cfg(feature = "v1_56")))]
3681    #[doc(alias = "PANGO_WRAP_NONE")]
3682    None,
3683    #[doc(hidden)]
3684    __Unknown(i32),
3685}
3686
3687#[doc(hidden)]
3688impl IntoGlib for WrapMode {
3689    type GlibType = ffi::PangoWrapMode;
3690
3691    #[inline]
3692    fn into_glib(self) -> ffi::PangoWrapMode {
3693        match self {
3694            Self::Word => ffi::PANGO_WRAP_WORD,
3695            Self::Char => ffi::PANGO_WRAP_CHAR,
3696            Self::WordChar => ffi::PANGO_WRAP_WORD_CHAR,
3697            #[cfg(feature = "v1_56")]
3698            Self::None => ffi::PANGO_WRAP_NONE,
3699            Self::__Unknown(value) => value,
3700        }
3701    }
3702}
3703
3704#[doc(hidden)]
3705impl FromGlib<ffi::PangoWrapMode> for WrapMode {
3706    #[inline]
3707    unsafe fn from_glib(value: ffi::PangoWrapMode) -> Self {
3708        match value {
3709            ffi::PANGO_WRAP_WORD => Self::Word,
3710            ffi::PANGO_WRAP_CHAR => Self::Char,
3711            ffi::PANGO_WRAP_WORD_CHAR => Self::WordChar,
3712            #[cfg(feature = "v1_56")]
3713            ffi::PANGO_WRAP_NONE => Self::None,
3714            value => Self::__Unknown(value),
3715        }
3716    }
3717}
3718
3719impl StaticType for WrapMode {
3720    #[inline]
3721    #[doc(alias = "pango_wrap_mode_get_type")]
3722    fn static_type() -> glib::Type {
3723        unsafe { from_glib(ffi::pango_wrap_mode_get_type()) }
3724    }
3725}
3726
3727impl glib::HasParamSpec for WrapMode {
3728    type ParamSpec = glib::ParamSpecEnum;
3729    type SetValue = Self;
3730    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3731
3732    fn param_spec_builder() -> Self::BuilderFn {
3733        Self::ParamSpec::builder_with_default
3734    }
3735}
3736
3737impl glib::value::ValueType for WrapMode {
3738    type Type = Self;
3739}
3740
3741unsafe impl<'a> glib::value::FromValue<'a> for WrapMode {
3742    type Checker = glib::value::GenericValueTypeChecker<Self>;
3743
3744    #[inline]
3745    unsafe fn from_value(value: &'a glib::Value) -> Self {
3746        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3747    }
3748}
3749
3750impl ToValue for WrapMode {
3751    #[inline]
3752    fn to_value(&self) -> glib::Value {
3753        let mut value = glib::Value::for_value_type::<Self>();
3754        unsafe {
3755            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3756        }
3757        value
3758    }
3759
3760    #[inline]
3761    fn value_type(&self) -> glib::Type {
3762        Self::static_type()
3763    }
3764}
3765
3766impl From<WrapMode> for glib::Value {
3767    #[inline]
3768    fn from(v: WrapMode) -> Self {
3769        ToValue::to_value(&v)
3770    }
3771}