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