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/// Specifies whether a font should or should not have color glyphs.
1138#[cfg(feature = "v1_57")]
1139#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1140#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1141#[non_exhaustive]
1142#[doc(alias = "PangoFontColor")]
1143pub enum FontColor {
1144    /// The font should not have color glyphs
1145    #[doc(alias = "PANGO_FONT_COLOR_FORBIDDEN")]
1146    Forbidden,
1147    /// The font should have color glyphs
1148    #[doc(alias = "PANGO_FONT_COLOR_REQUIRED")]
1149    Required,
1150    /// The font may or may not use color
1151    #[doc(alias = "PANGO_FONT_COLOR_DONT_CARE")]
1152    DontCare,
1153    #[doc(hidden)]
1154    __Unknown(i32),
1155}
1156
1157#[cfg(feature = "v1_57")]
1158#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1159#[doc(hidden)]
1160impl IntoGlib for FontColor {
1161    type GlibType = ffi::PangoFontColor;
1162
1163    #[inline]
1164    fn into_glib(self) -> ffi::PangoFontColor {
1165        match self {
1166            Self::Forbidden => ffi::PANGO_FONT_COLOR_FORBIDDEN,
1167            Self::Required => ffi::PANGO_FONT_COLOR_REQUIRED,
1168            Self::DontCare => ffi::PANGO_FONT_COLOR_DONT_CARE,
1169            Self::__Unknown(value) => value,
1170        }
1171    }
1172}
1173
1174#[cfg(feature = "v1_57")]
1175#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1176#[doc(hidden)]
1177impl FromGlib<ffi::PangoFontColor> for FontColor {
1178    #[inline]
1179    unsafe fn from_glib(value: ffi::PangoFontColor) -> Self {
1180        match value {
1181            ffi::PANGO_FONT_COLOR_FORBIDDEN => Self::Forbidden,
1182            ffi::PANGO_FONT_COLOR_REQUIRED => Self::Required,
1183            ffi::PANGO_FONT_COLOR_DONT_CARE => Self::DontCare,
1184            value => Self::__Unknown(value),
1185        }
1186    }
1187}
1188
1189#[cfg(feature = "v1_57")]
1190#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1191impl StaticType for FontColor {
1192    #[inline]
1193    #[doc(alias = "pango_font_color_get_type")]
1194    fn static_type() -> glib::Type {
1195        unsafe { from_glib(ffi::pango_font_color_get_type()) }
1196    }
1197}
1198
1199#[cfg(feature = "v1_57")]
1200#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1201impl glib::HasParamSpec for FontColor {
1202    type ParamSpec = glib::ParamSpecEnum;
1203    type SetValue = Self;
1204    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1205
1206    fn param_spec_builder() -> Self::BuilderFn {
1207        Self::ParamSpec::builder_with_default
1208    }
1209}
1210
1211#[cfg(feature = "v1_57")]
1212#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1213impl glib::value::ValueType for FontColor {
1214    type Type = Self;
1215}
1216
1217#[cfg(feature = "v1_57")]
1218#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1219unsafe impl<'a> glib::value::FromValue<'a> for FontColor {
1220    type Checker = glib::value::GenericValueTypeChecker<Self>;
1221
1222    #[inline]
1223    unsafe fn from_value(value: &'a glib::Value) -> Self {
1224        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1225    }
1226}
1227
1228#[cfg(feature = "v1_57")]
1229#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1230impl ToValue for FontColor {
1231    #[inline]
1232    fn to_value(&self) -> glib::Value {
1233        let mut value = glib::Value::for_value_type::<Self>();
1234        unsafe {
1235            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1236        }
1237        value
1238    }
1239
1240    #[inline]
1241    fn value_type(&self) -> glib::Type {
1242        Self::static_type()
1243    }
1244}
1245
1246#[cfg(feature = "v1_57")]
1247#[cfg_attr(docsrs, doc(cfg(feature = "v1_57")))]
1248impl From<FontColor> for glib::Value {
1249    #[inline]
1250    fn from(v: FontColor) -> Self {
1251        ToValue::to_value(&v)
1252    }
1253}
1254
1255/// An enumeration that affects font sizes for superscript
1256/// and subscript positioning and for (emulated) Small Caps.
1257#[cfg(feature = "v1_50")]
1258#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1259#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1260#[non_exhaustive]
1261#[doc(alias = "PangoFontScale")]
1262pub enum FontScale {
1263    /// Leave the font size unchanged
1264    #[doc(alias = "PANGO_FONT_SCALE_NONE")]
1265    None,
1266    /// Change the font to a size suitable for superscripts
1267    #[doc(alias = "PANGO_FONT_SCALE_SUPERSCRIPT")]
1268    Superscript,
1269    /// Change the font to a size suitable for subscripts
1270    #[doc(alias = "PANGO_FONT_SCALE_SUBSCRIPT")]
1271    Subscript,
1272    /// Change the font to a size suitable for Small Caps
1273    #[doc(alias = "PANGO_FONT_SCALE_SMALL_CAPS")]
1274    SmallCaps,
1275    #[doc(hidden)]
1276    __Unknown(i32),
1277}
1278
1279#[cfg(feature = "v1_50")]
1280#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1281#[doc(hidden)]
1282impl IntoGlib for FontScale {
1283    type GlibType = ffi::PangoFontScale;
1284
1285    #[inline]
1286    fn into_glib(self) -> ffi::PangoFontScale {
1287        match self {
1288            Self::None => ffi::PANGO_FONT_SCALE_NONE,
1289            Self::Superscript => ffi::PANGO_FONT_SCALE_SUPERSCRIPT,
1290            Self::Subscript => ffi::PANGO_FONT_SCALE_SUBSCRIPT,
1291            Self::SmallCaps => ffi::PANGO_FONT_SCALE_SMALL_CAPS,
1292            Self::__Unknown(value) => value,
1293        }
1294    }
1295}
1296
1297#[cfg(feature = "v1_50")]
1298#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1299#[doc(hidden)]
1300impl FromGlib<ffi::PangoFontScale> for FontScale {
1301    #[inline]
1302    unsafe fn from_glib(value: ffi::PangoFontScale) -> Self {
1303        match value {
1304            ffi::PANGO_FONT_SCALE_NONE => Self::None,
1305            ffi::PANGO_FONT_SCALE_SUPERSCRIPT => Self::Superscript,
1306            ffi::PANGO_FONT_SCALE_SUBSCRIPT => Self::Subscript,
1307            ffi::PANGO_FONT_SCALE_SMALL_CAPS => Self::SmallCaps,
1308            value => Self::__Unknown(value),
1309        }
1310    }
1311}
1312
1313#[cfg(feature = "v1_50")]
1314#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1315impl StaticType for FontScale {
1316    #[inline]
1317    #[doc(alias = "pango_font_scale_get_type")]
1318    fn static_type() -> glib::Type {
1319        unsafe { from_glib(ffi::pango_font_scale_get_type()) }
1320    }
1321}
1322
1323#[cfg(feature = "v1_50")]
1324#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1325impl glib::HasParamSpec for FontScale {
1326    type ParamSpec = glib::ParamSpecEnum;
1327    type SetValue = Self;
1328    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1329
1330    fn param_spec_builder() -> Self::BuilderFn {
1331        Self::ParamSpec::builder_with_default
1332    }
1333}
1334
1335#[cfg(feature = "v1_50")]
1336#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1337impl glib::value::ValueType for FontScale {
1338    type Type = Self;
1339}
1340
1341#[cfg(feature = "v1_50")]
1342#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1343unsafe impl<'a> glib::value::FromValue<'a> for FontScale {
1344    type Checker = glib::value::GenericValueTypeChecker<Self>;
1345
1346    #[inline]
1347    unsafe fn from_value(value: &'a glib::Value) -> Self {
1348        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1349    }
1350}
1351
1352#[cfg(feature = "v1_50")]
1353#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1354impl ToValue for FontScale {
1355    #[inline]
1356    fn to_value(&self) -> glib::Value {
1357        let mut value = glib::Value::for_value_type::<Self>();
1358        unsafe {
1359            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1360        }
1361        value
1362    }
1363
1364    #[inline]
1365    fn value_type(&self) -> glib::Type {
1366        Self::static_type()
1367    }
1368}
1369
1370#[cfg(feature = "v1_50")]
1371#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
1372impl From<FontScale> for glib::Value {
1373    #[inline]
1374    fn from(v: FontScale) -> Self {
1375        ToValue::to_value(&v)
1376    }
1377}
1378
1379/// [`Gravity`][crate::Gravity] represents the orientation of glyphs in a segment
1380/// of text.
1381///
1382/// This is useful when rendering vertical text layouts. In those situations,
1383/// the layout is rotated using a non-identity [`Matrix`][crate::Matrix], and then
1384/// glyph orientation is controlled using [`Gravity`][crate::Gravity].
1385///
1386/// Not every value in this enumeration makes sense for every usage of
1387/// [`Gravity`][crate::Gravity]; for example, [`Auto`][Self::Auto] only can be passed to
1388/// [`Context::set_base_gravity()`][crate::Context::set_base_gravity()] and can only be returned by
1389/// [`Context::base_gravity()`][crate::Context::base_gravity()].
1390///
1391/// See also: [`GravityHint`][crate::GravityHint]
1392#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1393#[non_exhaustive]
1394#[doc(alias = "PangoGravity")]
1395pub enum Gravity {
1396    /// Glyphs stand upright (default) <img align="right" valign="center" src="m-south.png">
1397    #[doc(alias = "PANGO_GRAVITY_SOUTH")]
1398    South,
1399    /// Glyphs are rotated 90 degrees counter-clockwise. <img align="right" valign="center" src="m-east.png">
1400    #[doc(alias = "PANGO_GRAVITY_EAST")]
1401    East,
1402    /// Glyphs are upside-down. <img align="right" valign="cener" src="m-north.png">
1403    #[doc(alias = "PANGO_GRAVITY_NORTH")]
1404    North,
1405    /// Glyphs are rotated 90 degrees clockwise. <img align="right" valign="center" src="m-west.png">
1406    #[doc(alias = "PANGO_GRAVITY_WEST")]
1407    West,
1408    /// Gravity is resolved from the context matrix
1409    #[doc(alias = "PANGO_GRAVITY_AUTO")]
1410    Auto,
1411    #[doc(hidden)]
1412    __Unknown(i32),
1413}
1414
1415impl Gravity {
1416    #[doc(alias = "pango_gravity_get_for_matrix")]
1417    #[doc(alias = "get_for_matrix")]
1418    pub fn for_matrix(matrix: Option<&Matrix>) -> Gravity {
1419        unsafe { from_glib(ffi::pango_gravity_get_for_matrix(matrix.to_glib_none().0)) }
1420    }
1421
1422    #[doc(alias = "pango_gravity_get_for_script")]
1423    #[doc(alias = "get_for_script")]
1424    pub fn for_script(script: Script, base_gravity: Gravity, hint: GravityHint) -> Gravity {
1425        unsafe {
1426            from_glib(ffi::pango_gravity_get_for_script(
1427                script.into_glib(),
1428                base_gravity.into_glib(),
1429                hint.into_glib(),
1430            ))
1431        }
1432    }
1433
1434    #[doc(alias = "pango_gravity_get_for_script_and_width")]
1435    #[doc(alias = "get_for_script_and_width")]
1436    pub fn for_script_and_width(
1437        script: Script,
1438        wide: bool,
1439        base_gravity: Gravity,
1440        hint: GravityHint,
1441    ) -> Gravity {
1442        unsafe {
1443            from_glib(ffi::pango_gravity_get_for_script_and_width(
1444                script.into_glib(),
1445                wide.into_glib(),
1446                base_gravity.into_glib(),
1447                hint.into_glib(),
1448            ))
1449        }
1450    }
1451
1452    #[doc(alias = "pango_gravity_to_rotation")]
1453    pub fn to_rotation(self) -> f64 {
1454        unsafe { ffi::pango_gravity_to_rotation(self.into_glib()) }
1455    }
1456}
1457
1458#[doc(hidden)]
1459impl IntoGlib for Gravity {
1460    type GlibType = ffi::PangoGravity;
1461
1462    #[inline]
1463    fn into_glib(self) -> ffi::PangoGravity {
1464        match self {
1465            Self::South => ffi::PANGO_GRAVITY_SOUTH,
1466            Self::East => ffi::PANGO_GRAVITY_EAST,
1467            Self::North => ffi::PANGO_GRAVITY_NORTH,
1468            Self::West => ffi::PANGO_GRAVITY_WEST,
1469            Self::Auto => ffi::PANGO_GRAVITY_AUTO,
1470            Self::__Unknown(value) => value,
1471        }
1472    }
1473}
1474
1475#[doc(hidden)]
1476impl FromGlib<ffi::PangoGravity> for Gravity {
1477    #[inline]
1478    unsafe fn from_glib(value: ffi::PangoGravity) -> Self {
1479        match value {
1480            ffi::PANGO_GRAVITY_SOUTH => Self::South,
1481            ffi::PANGO_GRAVITY_EAST => Self::East,
1482            ffi::PANGO_GRAVITY_NORTH => Self::North,
1483            ffi::PANGO_GRAVITY_WEST => Self::West,
1484            ffi::PANGO_GRAVITY_AUTO => Self::Auto,
1485            value => Self::__Unknown(value),
1486        }
1487    }
1488}
1489
1490impl StaticType for Gravity {
1491    #[inline]
1492    #[doc(alias = "pango_gravity_get_type")]
1493    fn static_type() -> glib::Type {
1494        unsafe { from_glib(ffi::pango_gravity_get_type()) }
1495    }
1496}
1497
1498impl glib::HasParamSpec for Gravity {
1499    type ParamSpec = glib::ParamSpecEnum;
1500    type SetValue = Self;
1501    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1502
1503    fn param_spec_builder() -> Self::BuilderFn {
1504        Self::ParamSpec::builder_with_default
1505    }
1506}
1507
1508impl glib::value::ValueType for Gravity {
1509    type Type = Self;
1510}
1511
1512unsafe impl<'a> glib::value::FromValue<'a> for Gravity {
1513    type Checker = glib::value::GenericValueTypeChecker<Self>;
1514
1515    #[inline]
1516    unsafe fn from_value(value: &'a glib::Value) -> Self {
1517        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1518    }
1519}
1520
1521impl ToValue for Gravity {
1522    #[inline]
1523    fn to_value(&self) -> glib::Value {
1524        let mut value = glib::Value::for_value_type::<Self>();
1525        unsafe {
1526            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1527        }
1528        value
1529    }
1530
1531    #[inline]
1532    fn value_type(&self) -> glib::Type {
1533        Self::static_type()
1534    }
1535}
1536
1537impl From<Gravity> for glib::Value {
1538    #[inline]
1539    fn from(v: Gravity) -> Self {
1540        ToValue::to_value(&v)
1541    }
1542}
1543
1544/// [`GravityHint`][crate::GravityHint] defines how horizontal scripts should behave in a
1545/// vertical context.
1546///
1547/// That is, English excerpts in a vertical paragraph for example.
1548///
1549/// See also [`Gravity`][crate::Gravity]
1550#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1551#[non_exhaustive]
1552#[doc(alias = "PangoGravityHint")]
1553pub enum GravityHint {
1554    /// scripts will take their natural gravity based
1555    ///   on the base gravity and the script.  This is the default.
1556    #[doc(alias = "PANGO_GRAVITY_HINT_NATURAL")]
1557    Natural,
1558    /// always use the base gravity set, regardless of
1559    ///   the script.
1560    #[doc(alias = "PANGO_GRAVITY_HINT_STRONG")]
1561    Strong,
1562    /// for scripts not in their natural direction (eg.
1563    ///   Latin in East gravity), choose per-script gravity such that every script
1564    ///   respects the line progression. This means, Latin and Arabic will take
1565    ///   opposite gravities and both flow top-to-bottom for example.
1566    #[doc(alias = "PANGO_GRAVITY_HINT_LINE")]
1567    Line,
1568    #[doc(hidden)]
1569    __Unknown(i32),
1570}
1571
1572#[doc(hidden)]
1573impl IntoGlib for GravityHint {
1574    type GlibType = ffi::PangoGravityHint;
1575
1576    #[inline]
1577    fn into_glib(self) -> ffi::PangoGravityHint {
1578        match self {
1579            Self::Natural => ffi::PANGO_GRAVITY_HINT_NATURAL,
1580            Self::Strong => ffi::PANGO_GRAVITY_HINT_STRONG,
1581            Self::Line => ffi::PANGO_GRAVITY_HINT_LINE,
1582            Self::__Unknown(value) => value,
1583        }
1584    }
1585}
1586
1587#[doc(hidden)]
1588impl FromGlib<ffi::PangoGravityHint> for GravityHint {
1589    #[inline]
1590    unsafe fn from_glib(value: ffi::PangoGravityHint) -> Self {
1591        match value {
1592            ffi::PANGO_GRAVITY_HINT_NATURAL => Self::Natural,
1593            ffi::PANGO_GRAVITY_HINT_STRONG => Self::Strong,
1594            ffi::PANGO_GRAVITY_HINT_LINE => Self::Line,
1595            value => Self::__Unknown(value),
1596        }
1597    }
1598}
1599
1600impl StaticType for GravityHint {
1601    #[inline]
1602    #[doc(alias = "pango_gravity_hint_get_type")]
1603    fn static_type() -> glib::Type {
1604        unsafe { from_glib(ffi::pango_gravity_hint_get_type()) }
1605    }
1606}
1607
1608impl glib::HasParamSpec for GravityHint {
1609    type ParamSpec = glib::ParamSpecEnum;
1610    type SetValue = Self;
1611    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1612
1613    fn param_spec_builder() -> Self::BuilderFn {
1614        Self::ParamSpec::builder_with_default
1615    }
1616}
1617
1618impl glib::value::ValueType for GravityHint {
1619    type Type = Self;
1620}
1621
1622unsafe impl<'a> glib::value::FromValue<'a> for GravityHint {
1623    type Checker = glib::value::GenericValueTypeChecker<Self>;
1624
1625    #[inline]
1626    unsafe fn from_value(value: &'a glib::Value) -> Self {
1627        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1628    }
1629}
1630
1631impl ToValue for GravityHint {
1632    #[inline]
1633    fn to_value(&self) -> glib::Value {
1634        let mut value = glib::Value::for_value_type::<Self>();
1635        unsafe {
1636            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1637        }
1638        value
1639    }
1640
1641    #[inline]
1642    fn value_type(&self) -> glib::Type {
1643        Self::static_type()
1644    }
1645}
1646
1647impl From<GravityHint> for glib::Value {
1648    #[inline]
1649    fn from(v: GravityHint) -> Self {
1650        ToValue::to_value(&v)
1651    }
1652}
1653
1654/// The [`Overline`][crate::Overline] enumeration is used to specify whether text
1655/// should be overlined, and if so, the type of line.
1656#[cfg(feature = "v1_46")]
1657#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1658#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1659#[non_exhaustive]
1660#[doc(alias = "PangoOverline")]
1661pub enum Overline {
1662    /// no overline should be drawn
1663    #[doc(alias = "PANGO_OVERLINE_NONE")]
1664    None,
1665    /// Draw a single line above the ink
1666    ///   extents of the text being underlined.
1667    #[doc(alias = "PANGO_OVERLINE_SINGLE")]
1668    Single,
1669    #[doc(hidden)]
1670    __Unknown(i32),
1671}
1672
1673#[cfg(feature = "v1_46")]
1674#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1675#[doc(hidden)]
1676impl IntoGlib for Overline {
1677    type GlibType = ffi::PangoOverline;
1678
1679    #[inline]
1680    fn into_glib(self) -> ffi::PangoOverline {
1681        match self {
1682            Self::None => ffi::PANGO_OVERLINE_NONE,
1683            Self::Single => ffi::PANGO_OVERLINE_SINGLE,
1684            Self::__Unknown(value) => value,
1685        }
1686    }
1687}
1688
1689#[cfg(feature = "v1_46")]
1690#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1691#[doc(hidden)]
1692impl FromGlib<ffi::PangoOverline> for Overline {
1693    #[inline]
1694    unsafe fn from_glib(value: ffi::PangoOverline) -> Self {
1695        match value {
1696            ffi::PANGO_OVERLINE_NONE => Self::None,
1697            ffi::PANGO_OVERLINE_SINGLE => Self::Single,
1698            value => Self::__Unknown(value),
1699        }
1700    }
1701}
1702
1703#[cfg(feature = "v1_46")]
1704#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1705impl StaticType for Overline {
1706    #[inline]
1707    #[doc(alias = "pango_overline_get_type")]
1708    fn static_type() -> glib::Type {
1709        unsafe { from_glib(ffi::pango_overline_get_type()) }
1710    }
1711}
1712
1713#[cfg(feature = "v1_46")]
1714#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1715impl glib::HasParamSpec for Overline {
1716    type ParamSpec = glib::ParamSpecEnum;
1717    type SetValue = Self;
1718    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1719
1720    fn param_spec_builder() -> Self::BuilderFn {
1721        Self::ParamSpec::builder_with_default
1722    }
1723}
1724
1725#[cfg(feature = "v1_46")]
1726#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1727impl glib::value::ValueType for Overline {
1728    type Type = Self;
1729}
1730
1731#[cfg(feature = "v1_46")]
1732#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1733unsafe impl<'a> glib::value::FromValue<'a> for Overline {
1734    type Checker = glib::value::GenericValueTypeChecker<Self>;
1735
1736    #[inline]
1737    unsafe fn from_value(value: &'a glib::Value) -> Self {
1738        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1739    }
1740}
1741
1742#[cfg(feature = "v1_46")]
1743#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1744impl ToValue for Overline {
1745    #[inline]
1746    fn to_value(&self) -> glib::Value {
1747        let mut value = glib::Value::for_value_type::<Self>();
1748        unsafe {
1749            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1750        }
1751        value
1752    }
1753
1754    #[inline]
1755    fn value_type(&self) -> glib::Type {
1756        Self::static_type()
1757    }
1758}
1759
1760#[cfg(feature = "v1_46")]
1761#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
1762impl From<Overline> for glib::Value {
1763    #[inline]
1764    fn from(v: Overline) -> Self {
1765        ToValue::to_value(&v)
1766    }
1767}
1768
1769/// [`RenderPart`][crate::RenderPart] defines different items to render for such
1770/// purposes as setting colors.
1771#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1772#[non_exhaustive]
1773#[doc(alias = "PangoRenderPart")]
1774pub enum RenderPart {
1775    /// the text itself
1776    #[doc(alias = "PANGO_RENDER_PART_FOREGROUND")]
1777    Foreground,
1778    /// the area behind the text
1779    #[doc(alias = "PANGO_RENDER_PART_BACKGROUND")]
1780    Background,
1781    /// underlines
1782    #[doc(alias = "PANGO_RENDER_PART_UNDERLINE")]
1783    Underline,
1784    /// strikethrough lines
1785    #[doc(alias = "PANGO_RENDER_PART_STRIKETHROUGH")]
1786    Strikethrough,
1787    /// overlines
1788    #[doc(alias = "PANGO_RENDER_PART_OVERLINE")]
1789    Overline,
1790    #[doc(hidden)]
1791    __Unknown(i32),
1792}
1793
1794#[doc(hidden)]
1795impl IntoGlib for RenderPart {
1796    type GlibType = ffi::PangoRenderPart;
1797
1798    #[inline]
1799    fn into_glib(self) -> ffi::PangoRenderPart {
1800        match self {
1801            Self::Foreground => ffi::PANGO_RENDER_PART_FOREGROUND,
1802            Self::Background => ffi::PANGO_RENDER_PART_BACKGROUND,
1803            Self::Underline => ffi::PANGO_RENDER_PART_UNDERLINE,
1804            Self::Strikethrough => ffi::PANGO_RENDER_PART_STRIKETHROUGH,
1805            Self::Overline => ffi::PANGO_RENDER_PART_OVERLINE,
1806            Self::__Unknown(value) => value,
1807        }
1808    }
1809}
1810
1811#[doc(hidden)]
1812impl FromGlib<ffi::PangoRenderPart> for RenderPart {
1813    #[inline]
1814    unsafe fn from_glib(value: ffi::PangoRenderPart) -> Self {
1815        match value {
1816            ffi::PANGO_RENDER_PART_FOREGROUND => Self::Foreground,
1817            ffi::PANGO_RENDER_PART_BACKGROUND => Self::Background,
1818            ffi::PANGO_RENDER_PART_UNDERLINE => Self::Underline,
1819            ffi::PANGO_RENDER_PART_STRIKETHROUGH => Self::Strikethrough,
1820            ffi::PANGO_RENDER_PART_OVERLINE => Self::Overline,
1821            value => Self::__Unknown(value),
1822        }
1823    }
1824}
1825
1826impl StaticType for RenderPart {
1827    #[inline]
1828    #[doc(alias = "pango_render_part_get_type")]
1829    fn static_type() -> glib::Type {
1830        unsafe { from_glib(ffi::pango_render_part_get_type()) }
1831    }
1832}
1833
1834impl glib::HasParamSpec for RenderPart {
1835    type ParamSpec = glib::ParamSpecEnum;
1836    type SetValue = Self;
1837    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1838
1839    fn param_spec_builder() -> Self::BuilderFn {
1840        Self::ParamSpec::builder_with_default
1841    }
1842}
1843
1844impl glib::value::ValueType for RenderPart {
1845    type Type = Self;
1846}
1847
1848unsafe impl<'a> glib::value::FromValue<'a> for RenderPart {
1849    type Checker = glib::value::GenericValueTypeChecker<Self>;
1850
1851    #[inline]
1852    unsafe fn from_value(value: &'a glib::Value) -> Self {
1853        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1854    }
1855}
1856
1857impl ToValue for RenderPart {
1858    #[inline]
1859    fn to_value(&self) -> glib::Value {
1860        let mut value = glib::Value::for_value_type::<Self>();
1861        unsafe {
1862            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1863        }
1864        value
1865    }
1866
1867    #[inline]
1868    fn value_type(&self) -> glib::Type {
1869        Self::static_type()
1870    }
1871}
1872
1873impl From<RenderPart> for glib::Value {
1874    #[inline]
1875    fn from(v: RenderPart) -> Self {
1876        ToValue::to_value(&v)
1877    }
1878}
1879
1880/// The [`Script`][crate::Script] enumeration identifies different writing
1881/// systems.
1882///
1883/// The values correspond to the names as defined in the Unicode standard. See
1884/// [Unicode Standard Annex 24: Script names](http://www.unicode.org/reports/tr24/)
1885///
1886/// Note that this enumeration is deprecated and will not be updated to include values
1887/// in newer versions of the Unicode standard. Applications should use the
1888/// `GLib::UnicodeScript` enumeration instead,
1889/// whose values are interchangeable with [`Script`][crate::Script].
1890#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1891#[non_exhaustive]
1892#[doc(alias = "PangoScript")]
1893pub enum Script {
1894    /// a value never returned from pango_script_for_unichar()
1895    #[doc(alias = "PANGO_SCRIPT_INVALID_CODE")]
1896    InvalidCode,
1897    /// a character used by multiple different scripts
1898    #[doc(alias = "PANGO_SCRIPT_COMMON")]
1899    Common,
1900    /// a mark glyph that takes its script from the
1901    /// base glyph to which it is attached
1902    #[doc(alias = "PANGO_SCRIPT_INHERITED")]
1903    Inherited,
1904    /// Arabic
1905    #[doc(alias = "PANGO_SCRIPT_ARABIC")]
1906    Arabic,
1907    /// Armenian
1908    #[doc(alias = "PANGO_SCRIPT_ARMENIAN")]
1909    Armenian,
1910    /// Bengali
1911    #[doc(alias = "PANGO_SCRIPT_BENGALI")]
1912    Bengali,
1913    /// Bopomofo
1914    #[doc(alias = "PANGO_SCRIPT_BOPOMOFO")]
1915    Bopomofo,
1916    /// Cherokee
1917    #[doc(alias = "PANGO_SCRIPT_CHEROKEE")]
1918    Cherokee,
1919    /// Coptic
1920    #[doc(alias = "PANGO_SCRIPT_COPTIC")]
1921    Coptic,
1922    /// Cyrillic
1923    #[doc(alias = "PANGO_SCRIPT_CYRILLIC")]
1924    Cyrillic,
1925    /// Deseret
1926    #[doc(alias = "PANGO_SCRIPT_DESERET")]
1927    Deseret,
1928    /// Devanagari
1929    #[doc(alias = "PANGO_SCRIPT_DEVANAGARI")]
1930    Devanagari,
1931    /// Ethiopic
1932    #[doc(alias = "PANGO_SCRIPT_ETHIOPIC")]
1933    Ethiopic,
1934    /// Georgian
1935    #[doc(alias = "PANGO_SCRIPT_GEORGIAN")]
1936    Georgian,
1937    /// Gothic
1938    #[doc(alias = "PANGO_SCRIPT_GOTHIC")]
1939    Gothic,
1940    /// Greek
1941    #[doc(alias = "PANGO_SCRIPT_GREEK")]
1942    Greek,
1943    /// Gujarati
1944    #[doc(alias = "PANGO_SCRIPT_GUJARATI")]
1945    Gujarati,
1946    /// Gurmukhi
1947    #[doc(alias = "PANGO_SCRIPT_GURMUKHI")]
1948    Gurmukhi,
1949    /// Han
1950    #[doc(alias = "PANGO_SCRIPT_HAN")]
1951    Han,
1952    /// Hangul
1953    #[doc(alias = "PANGO_SCRIPT_HANGUL")]
1954    Hangul,
1955    /// Hebrew
1956    #[doc(alias = "PANGO_SCRIPT_HEBREW")]
1957    Hebrew,
1958    /// Hiragana
1959    #[doc(alias = "PANGO_SCRIPT_HIRAGANA")]
1960    Hiragana,
1961    /// Kannada
1962    #[doc(alias = "PANGO_SCRIPT_KANNADA")]
1963    Kannada,
1964    /// Katakana
1965    #[doc(alias = "PANGO_SCRIPT_KATAKANA")]
1966    Katakana,
1967    /// Khmer
1968    #[doc(alias = "PANGO_SCRIPT_KHMER")]
1969    Khmer,
1970    /// Lao
1971    #[doc(alias = "PANGO_SCRIPT_LAO")]
1972    Lao,
1973    /// Latin
1974    #[doc(alias = "PANGO_SCRIPT_LATIN")]
1975    Latin,
1976    /// Malayalam
1977    #[doc(alias = "PANGO_SCRIPT_MALAYALAM")]
1978    Malayalam,
1979    /// Mongolian
1980    #[doc(alias = "PANGO_SCRIPT_MONGOLIAN")]
1981    Mongolian,
1982    /// Myanmar
1983    #[doc(alias = "PANGO_SCRIPT_MYANMAR")]
1984    Myanmar,
1985    /// Ogham
1986    #[doc(alias = "PANGO_SCRIPT_OGHAM")]
1987    Ogham,
1988    /// Old Italic
1989    #[doc(alias = "PANGO_SCRIPT_OLD_ITALIC")]
1990    OldItalic,
1991    /// Oriya
1992    #[doc(alias = "PANGO_SCRIPT_ORIYA")]
1993    Oriya,
1994    /// Runic
1995    #[doc(alias = "PANGO_SCRIPT_RUNIC")]
1996    Runic,
1997    /// Sinhala
1998    #[doc(alias = "PANGO_SCRIPT_SINHALA")]
1999    Sinhala,
2000    /// Syriac
2001    #[doc(alias = "PANGO_SCRIPT_SYRIAC")]
2002    Syriac,
2003    /// Tamil
2004    #[doc(alias = "PANGO_SCRIPT_TAMIL")]
2005    Tamil,
2006    /// Telugu
2007    #[doc(alias = "PANGO_SCRIPT_TELUGU")]
2008    Telugu,
2009    /// Thaana
2010    #[doc(alias = "PANGO_SCRIPT_THAANA")]
2011    Thaana,
2012    /// Thai
2013    #[doc(alias = "PANGO_SCRIPT_THAI")]
2014    Thai,
2015    /// Tibetan
2016    #[doc(alias = "PANGO_SCRIPT_TIBETAN")]
2017    Tibetan,
2018    /// Canadian Aboriginal
2019    #[doc(alias = "PANGO_SCRIPT_CANADIAN_ABORIGINAL")]
2020    CanadianAboriginal,
2021    /// Yi
2022    #[doc(alias = "PANGO_SCRIPT_YI")]
2023    Yi,
2024    /// Tagalog
2025    #[doc(alias = "PANGO_SCRIPT_TAGALOG")]
2026    Tagalog,
2027    /// Hanunoo
2028    #[doc(alias = "PANGO_SCRIPT_HANUNOO")]
2029    Hanunoo,
2030    /// Buhid
2031    #[doc(alias = "PANGO_SCRIPT_BUHID")]
2032    Buhid,
2033    /// Tagbanwa
2034    #[doc(alias = "PANGO_SCRIPT_TAGBANWA")]
2035    Tagbanwa,
2036    /// Braille
2037    #[doc(alias = "PANGO_SCRIPT_BRAILLE")]
2038    Braille,
2039    /// Cypriot
2040    #[doc(alias = "PANGO_SCRIPT_CYPRIOT")]
2041    Cypriot,
2042    /// Limbu
2043    #[doc(alias = "PANGO_SCRIPT_LIMBU")]
2044    Limbu,
2045    /// Osmanya
2046    #[doc(alias = "PANGO_SCRIPT_OSMANYA")]
2047    Osmanya,
2048    /// Shavian
2049    #[doc(alias = "PANGO_SCRIPT_SHAVIAN")]
2050    Shavian,
2051    /// Linear B
2052    #[doc(alias = "PANGO_SCRIPT_LINEAR_B")]
2053    LinearB,
2054    /// Tai Le
2055    #[doc(alias = "PANGO_SCRIPT_TAI_LE")]
2056    TaiLe,
2057    /// Ugaritic
2058    #[doc(alias = "PANGO_SCRIPT_UGARITIC")]
2059    Ugaritic,
2060    /// New Tai Lue. Since 1.10
2061    #[doc(alias = "PANGO_SCRIPT_NEW_TAI_LUE")]
2062    NewTaiLue,
2063    /// Buginese. Since 1.10
2064    #[doc(alias = "PANGO_SCRIPT_BUGINESE")]
2065    Buginese,
2066    /// Glagolitic. Since 1.10
2067    #[doc(alias = "PANGO_SCRIPT_GLAGOLITIC")]
2068    Glagolitic,
2069    /// Tifinagh. Since 1.10
2070    #[doc(alias = "PANGO_SCRIPT_TIFINAGH")]
2071    Tifinagh,
2072    /// Syloti Nagri. Since 1.10
2073    #[doc(alias = "PANGO_SCRIPT_SYLOTI_NAGRI")]
2074    SylotiNagri,
2075    /// Old Persian. Since 1.10
2076    #[doc(alias = "PANGO_SCRIPT_OLD_PERSIAN")]
2077    OldPersian,
2078    /// Kharoshthi. Since 1.10
2079    #[doc(alias = "PANGO_SCRIPT_KHAROSHTHI")]
2080    Kharoshthi,
2081    /// an unassigned code point. Since 1.14
2082    #[doc(alias = "PANGO_SCRIPT_UNKNOWN")]
2083    Unknown,
2084    /// Balinese. Since 1.14
2085    #[doc(alias = "PANGO_SCRIPT_BALINESE")]
2086    Balinese,
2087    /// Cuneiform. Since 1.14
2088    #[doc(alias = "PANGO_SCRIPT_CUNEIFORM")]
2089    Cuneiform,
2090    /// Phoenician. Since 1.14
2091    #[doc(alias = "PANGO_SCRIPT_PHOENICIAN")]
2092    Phoenician,
2093    /// Phags-pa. Since 1.14
2094    #[doc(alias = "PANGO_SCRIPT_PHAGS_PA")]
2095    PhagsPa,
2096    /// N'Ko. Since 1.14
2097    #[doc(alias = "PANGO_SCRIPT_NKO")]
2098    Nko,
2099    /// Kayah Li. Since 1.20.1
2100    #[doc(alias = "PANGO_SCRIPT_KAYAH_LI")]
2101    KayahLi,
2102    /// Lepcha. Since 1.20.1
2103    #[doc(alias = "PANGO_SCRIPT_LEPCHA")]
2104    Lepcha,
2105    /// Rejang. Since 1.20.1
2106    #[doc(alias = "PANGO_SCRIPT_REJANG")]
2107    Rejang,
2108    /// Sundanese. Since 1.20.1
2109    #[doc(alias = "PANGO_SCRIPT_SUNDANESE")]
2110    Sundanese,
2111    /// Saurashtra. Since 1.20.1
2112    #[doc(alias = "PANGO_SCRIPT_SAURASHTRA")]
2113    Saurashtra,
2114    /// Cham. Since 1.20.1
2115    #[doc(alias = "PANGO_SCRIPT_CHAM")]
2116    Cham,
2117    /// Ol Chiki. Since 1.20.1
2118    #[doc(alias = "PANGO_SCRIPT_OL_CHIKI")]
2119    OlChiki,
2120    /// Vai. Since 1.20.1
2121    #[doc(alias = "PANGO_SCRIPT_VAI")]
2122    Vai,
2123    /// Carian. Since 1.20.1
2124    #[doc(alias = "PANGO_SCRIPT_CARIAN")]
2125    Carian,
2126    /// Lycian. Since 1.20.1
2127    #[doc(alias = "PANGO_SCRIPT_LYCIAN")]
2128    Lycian,
2129    /// Lydian. Since 1.20.1
2130    #[doc(alias = "PANGO_SCRIPT_LYDIAN")]
2131    Lydian,
2132    /// Batak. Since 1.32
2133    #[doc(alias = "PANGO_SCRIPT_BATAK")]
2134    Batak,
2135    /// Brahmi. Since 1.32
2136    #[doc(alias = "PANGO_SCRIPT_BRAHMI")]
2137    Brahmi,
2138    /// Mandaic. Since 1.32
2139    #[doc(alias = "PANGO_SCRIPT_MANDAIC")]
2140    Mandaic,
2141    /// Chakma. Since: 1.32
2142    #[doc(alias = "PANGO_SCRIPT_CHAKMA")]
2143    Chakma,
2144    /// Meroitic Cursive. Since: 1.32
2145    #[doc(alias = "PANGO_SCRIPT_MEROITIC_CURSIVE")]
2146    MeroiticCursive,
2147    /// Meroitic Hieroglyphs. Since: 1.32
2148    #[doc(alias = "PANGO_SCRIPT_MEROITIC_HIEROGLYPHS")]
2149    MeroiticHieroglyphs,
2150    /// Miao. Since: 1.32
2151    #[doc(alias = "PANGO_SCRIPT_MIAO")]
2152    Miao,
2153    /// Sharada. Since: 1.32
2154    #[doc(alias = "PANGO_SCRIPT_SHARADA")]
2155    Sharada,
2156    /// Sora Sompeng. Since: 1.32
2157    #[doc(alias = "PANGO_SCRIPT_SORA_SOMPENG")]
2158    SoraSompeng,
2159    /// Takri. Since: 1.32
2160    #[doc(alias = "PANGO_SCRIPT_TAKRI")]
2161    Takri,
2162    /// Bassa. Since: 1.40
2163    #[doc(alias = "PANGO_SCRIPT_BASSA_VAH")]
2164    BassaVah,
2165    /// Caucasian Albanian. Since: 1.40
2166    #[doc(alias = "PANGO_SCRIPT_CAUCASIAN_ALBANIAN")]
2167    CaucasianAlbanian,
2168    /// Duployan. Since: 1.40
2169    #[doc(alias = "PANGO_SCRIPT_DUPLOYAN")]
2170    Duployan,
2171    /// Elbasan. Since: 1.40
2172    #[doc(alias = "PANGO_SCRIPT_ELBASAN")]
2173    Elbasan,
2174    /// Grantha. Since: 1.40
2175    #[doc(alias = "PANGO_SCRIPT_GRANTHA")]
2176    Grantha,
2177    /// Kjohki. Since: 1.40
2178    #[doc(alias = "PANGO_SCRIPT_KHOJKI")]
2179    Khojki,
2180    /// Khudawadi, Sindhi. Since: 1.40
2181    #[doc(alias = "PANGO_SCRIPT_KHUDAWADI")]
2182    Khudawadi,
2183    /// Linear A. Since: 1.40
2184    #[doc(alias = "PANGO_SCRIPT_LINEAR_A")]
2185    LinearA,
2186    /// Mahajani. Since: 1.40
2187    #[doc(alias = "PANGO_SCRIPT_MAHAJANI")]
2188    Mahajani,
2189    /// Manichaean. Since: 1.40
2190    #[doc(alias = "PANGO_SCRIPT_MANICHAEAN")]
2191    Manichaean,
2192    /// Mende Kikakui. Since: 1.40
2193    #[doc(alias = "PANGO_SCRIPT_MENDE_KIKAKUI")]
2194    MendeKikakui,
2195    /// Modi. Since: 1.40
2196    #[doc(alias = "PANGO_SCRIPT_MODI")]
2197    Modi,
2198    /// Mro. Since: 1.40
2199    #[doc(alias = "PANGO_SCRIPT_MRO")]
2200    Mro,
2201    /// Nabataean. Since: 1.40
2202    #[doc(alias = "PANGO_SCRIPT_NABATAEAN")]
2203    Nabataean,
2204    /// Old North Arabian. Since: 1.40
2205    #[doc(alias = "PANGO_SCRIPT_OLD_NORTH_ARABIAN")]
2206    OldNorthArabian,
2207    /// Old Permic. Since: 1.40
2208    #[doc(alias = "PANGO_SCRIPT_OLD_PERMIC")]
2209    OldPermic,
2210    /// Pahawh Hmong. Since: 1.40
2211    #[doc(alias = "PANGO_SCRIPT_PAHAWH_HMONG")]
2212    PahawhHmong,
2213    /// Palmyrene. Since: 1.40
2214    #[doc(alias = "PANGO_SCRIPT_PALMYRENE")]
2215    Palmyrene,
2216    /// Pau Cin Hau. Since: 1.40
2217    #[doc(alias = "PANGO_SCRIPT_PAU_CIN_HAU")]
2218    PauCinHau,
2219    /// Psalter Pahlavi. Since: 1.40
2220    #[doc(alias = "PANGO_SCRIPT_PSALTER_PAHLAVI")]
2221    PsalterPahlavi,
2222    /// Siddham. Since: 1.40
2223    #[doc(alias = "PANGO_SCRIPT_SIDDHAM")]
2224    Siddham,
2225    /// Tirhuta. Since: 1.40
2226    #[doc(alias = "PANGO_SCRIPT_TIRHUTA")]
2227    Tirhuta,
2228    /// Warang Citi. Since: 1.40
2229    #[doc(alias = "PANGO_SCRIPT_WARANG_CITI")]
2230    WarangCiti,
2231    /// Ahom. Since: 1.40
2232    #[doc(alias = "PANGO_SCRIPT_AHOM")]
2233    Ahom,
2234    /// Anatolian Hieroglyphs. Since: 1.40
2235    #[doc(alias = "PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS")]
2236    AnatolianHieroglyphs,
2237    /// Hatran. Since: 1.40
2238    #[doc(alias = "PANGO_SCRIPT_HATRAN")]
2239    Hatran,
2240    /// Multani. Since: 1.40
2241    #[doc(alias = "PANGO_SCRIPT_MULTANI")]
2242    Multani,
2243    /// Old Hungarian. Since: 1.40
2244    #[doc(alias = "PANGO_SCRIPT_OLD_HUNGARIAN")]
2245    OldHungarian,
2246    /// Signwriting. Since: 1.40
2247    #[doc(alias = "PANGO_SCRIPT_SIGNWRITING")]
2248    Signwriting,
2249    #[doc(hidden)]
2250    __Unknown(i32),
2251}
2252
2253impl Script {
2254    #[cfg_attr(feature = "v1_44", deprecated = "Since 1.44")]
2255    #[allow(deprecated)]
2256    #[doc(alias = "pango_script_for_unichar")]
2257    pub fn for_unichar(ch: char) -> Script {
2258        unsafe { from_glib(ffi::pango_script_for_unichar(ch.into_glib())) }
2259    }
2260
2261    #[doc(alias = "pango_script_get_sample_language")]
2262    #[doc(alias = "get_sample_language")]
2263    pub fn sample_language(self) -> Option<Language> {
2264        unsafe { from_glib_full(ffi::pango_script_get_sample_language(self.into_glib())) }
2265    }
2266}
2267
2268#[doc(hidden)]
2269impl IntoGlib for Script {
2270    type GlibType = ffi::PangoScript;
2271
2272    fn into_glib(self) -> ffi::PangoScript {
2273        match self {
2274            Self::InvalidCode => ffi::PANGO_SCRIPT_INVALID_CODE,
2275            Self::Common => ffi::PANGO_SCRIPT_COMMON,
2276            Self::Inherited => ffi::PANGO_SCRIPT_INHERITED,
2277            Self::Arabic => ffi::PANGO_SCRIPT_ARABIC,
2278            Self::Armenian => ffi::PANGO_SCRIPT_ARMENIAN,
2279            Self::Bengali => ffi::PANGO_SCRIPT_BENGALI,
2280            Self::Bopomofo => ffi::PANGO_SCRIPT_BOPOMOFO,
2281            Self::Cherokee => ffi::PANGO_SCRIPT_CHEROKEE,
2282            Self::Coptic => ffi::PANGO_SCRIPT_COPTIC,
2283            Self::Cyrillic => ffi::PANGO_SCRIPT_CYRILLIC,
2284            Self::Deseret => ffi::PANGO_SCRIPT_DESERET,
2285            Self::Devanagari => ffi::PANGO_SCRIPT_DEVANAGARI,
2286            Self::Ethiopic => ffi::PANGO_SCRIPT_ETHIOPIC,
2287            Self::Georgian => ffi::PANGO_SCRIPT_GEORGIAN,
2288            Self::Gothic => ffi::PANGO_SCRIPT_GOTHIC,
2289            Self::Greek => ffi::PANGO_SCRIPT_GREEK,
2290            Self::Gujarati => ffi::PANGO_SCRIPT_GUJARATI,
2291            Self::Gurmukhi => ffi::PANGO_SCRIPT_GURMUKHI,
2292            Self::Han => ffi::PANGO_SCRIPT_HAN,
2293            Self::Hangul => ffi::PANGO_SCRIPT_HANGUL,
2294            Self::Hebrew => ffi::PANGO_SCRIPT_HEBREW,
2295            Self::Hiragana => ffi::PANGO_SCRIPT_HIRAGANA,
2296            Self::Kannada => ffi::PANGO_SCRIPT_KANNADA,
2297            Self::Katakana => ffi::PANGO_SCRIPT_KATAKANA,
2298            Self::Khmer => ffi::PANGO_SCRIPT_KHMER,
2299            Self::Lao => ffi::PANGO_SCRIPT_LAO,
2300            Self::Latin => ffi::PANGO_SCRIPT_LATIN,
2301            Self::Malayalam => ffi::PANGO_SCRIPT_MALAYALAM,
2302            Self::Mongolian => ffi::PANGO_SCRIPT_MONGOLIAN,
2303            Self::Myanmar => ffi::PANGO_SCRIPT_MYANMAR,
2304            Self::Ogham => ffi::PANGO_SCRIPT_OGHAM,
2305            Self::OldItalic => ffi::PANGO_SCRIPT_OLD_ITALIC,
2306            Self::Oriya => ffi::PANGO_SCRIPT_ORIYA,
2307            Self::Runic => ffi::PANGO_SCRIPT_RUNIC,
2308            Self::Sinhala => ffi::PANGO_SCRIPT_SINHALA,
2309            Self::Syriac => ffi::PANGO_SCRIPT_SYRIAC,
2310            Self::Tamil => ffi::PANGO_SCRIPT_TAMIL,
2311            Self::Telugu => ffi::PANGO_SCRIPT_TELUGU,
2312            Self::Thaana => ffi::PANGO_SCRIPT_THAANA,
2313            Self::Thai => ffi::PANGO_SCRIPT_THAI,
2314            Self::Tibetan => ffi::PANGO_SCRIPT_TIBETAN,
2315            Self::CanadianAboriginal => ffi::PANGO_SCRIPT_CANADIAN_ABORIGINAL,
2316            Self::Yi => ffi::PANGO_SCRIPT_YI,
2317            Self::Tagalog => ffi::PANGO_SCRIPT_TAGALOG,
2318            Self::Hanunoo => ffi::PANGO_SCRIPT_HANUNOO,
2319            Self::Buhid => ffi::PANGO_SCRIPT_BUHID,
2320            Self::Tagbanwa => ffi::PANGO_SCRIPT_TAGBANWA,
2321            Self::Braille => ffi::PANGO_SCRIPT_BRAILLE,
2322            Self::Cypriot => ffi::PANGO_SCRIPT_CYPRIOT,
2323            Self::Limbu => ffi::PANGO_SCRIPT_LIMBU,
2324            Self::Osmanya => ffi::PANGO_SCRIPT_OSMANYA,
2325            Self::Shavian => ffi::PANGO_SCRIPT_SHAVIAN,
2326            Self::LinearB => ffi::PANGO_SCRIPT_LINEAR_B,
2327            Self::TaiLe => ffi::PANGO_SCRIPT_TAI_LE,
2328            Self::Ugaritic => ffi::PANGO_SCRIPT_UGARITIC,
2329            Self::NewTaiLue => ffi::PANGO_SCRIPT_NEW_TAI_LUE,
2330            Self::Buginese => ffi::PANGO_SCRIPT_BUGINESE,
2331            Self::Glagolitic => ffi::PANGO_SCRIPT_GLAGOLITIC,
2332            Self::Tifinagh => ffi::PANGO_SCRIPT_TIFINAGH,
2333            Self::SylotiNagri => ffi::PANGO_SCRIPT_SYLOTI_NAGRI,
2334            Self::OldPersian => ffi::PANGO_SCRIPT_OLD_PERSIAN,
2335            Self::Kharoshthi => ffi::PANGO_SCRIPT_KHAROSHTHI,
2336            Self::Unknown => ffi::PANGO_SCRIPT_UNKNOWN,
2337            Self::Balinese => ffi::PANGO_SCRIPT_BALINESE,
2338            Self::Cuneiform => ffi::PANGO_SCRIPT_CUNEIFORM,
2339            Self::Phoenician => ffi::PANGO_SCRIPT_PHOENICIAN,
2340            Self::PhagsPa => ffi::PANGO_SCRIPT_PHAGS_PA,
2341            Self::Nko => ffi::PANGO_SCRIPT_NKO,
2342            Self::KayahLi => ffi::PANGO_SCRIPT_KAYAH_LI,
2343            Self::Lepcha => ffi::PANGO_SCRIPT_LEPCHA,
2344            Self::Rejang => ffi::PANGO_SCRIPT_REJANG,
2345            Self::Sundanese => ffi::PANGO_SCRIPT_SUNDANESE,
2346            Self::Saurashtra => ffi::PANGO_SCRIPT_SAURASHTRA,
2347            Self::Cham => ffi::PANGO_SCRIPT_CHAM,
2348            Self::OlChiki => ffi::PANGO_SCRIPT_OL_CHIKI,
2349            Self::Vai => ffi::PANGO_SCRIPT_VAI,
2350            Self::Carian => ffi::PANGO_SCRIPT_CARIAN,
2351            Self::Lycian => ffi::PANGO_SCRIPT_LYCIAN,
2352            Self::Lydian => ffi::PANGO_SCRIPT_LYDIAN,
2353            Self::Batak => ffi::PANGO_SCRIPT_BATAK,
2354            Self::Brahmi => ffi::PANGO_SCRIPT_BRAHMI,
2355            Self::Mandaic => ffi::PANGO_SCRIPT_MANDAIC,
2356            Self::Chakma => ffi::PANGO_SCRIPT_CHAKMA,
2357            Self::MeroiticCursive => ffi::PANGO_SCRIPT_MEROITIC_CURSIVE,
2358            Self::MeroiticHieroglyphs => ffi::PANGO_SCRIPT_MEROITIC_HIEROGLYPHS,
2359            Self::Miao => ffi::PANGO_SCRIPT_MIAO,
2360            Self::Sharada => ffi::PANGO_SCRIPT_SHARADA,
2361            Self::SoraSompeng => ffi::PANGO_SCRIPT_SORA_SOMPENG,
2362            Self::Takri => ffi::PANGO_SCRIPT_TAKRI,
2363            Self::BassaVah => ffi::PANGO_SCRIPT_BASSA_VAH,
2364            Self::CaucasianAlbanian => ffi::PANGO_SCRIPT_CAUCASIAN_ALBANIAN,
2365            Self::Duployan => ffi::PANGO_SCRIPT_DUPLOYAN,
2366            Self::Elbasan => ffi::PANGO_SCRIPT_ELBASAN,
2367            Self::Grantha => ffi::PANGO_SCRIPT_GRANTHA,
2368            Self::Khojki => ffi::PANGO_SCRIPT_KHOJKI,
2369            Self::Khudawadi => ffi::PANGO_SCRIPT_KHUDAWADI,
2370            Self::LinearA => ffi::PANGO_SCRIPT_LINEAR_A,
2371            Self::Mahajani => ffi::PANGO_SCRIPT_MAHAJANI,
2372            Self::Manichaean => ffi::PANGO_SCRIPT_MANICHAEAN,
2373            Self::MendeKikakui => ffi::PANGO_SCRIPT_MENDE_KIKAKUI,
2374            Self::Modi => ffi::PANGO_SCRIPT_MODI,
2375            Self::Mro => ffi::PANGO_SCRIPT_MRO,
2376            Self::Nabataean => ffi::PANGO_SCRIPT_NABATAEAN,
2377            Self::OldNorthArabian => ffi::PANGO_SCRIPT_OLD_NORTH_ARABIAN,
2378            Self::OldPermic => ffi::PANGO_SCRIPT_OLD_PERMIC,
2379            Self::PahawhHmong => ffi::PANGO_SCRIPT_PAHAWH_HMONG,
2380            Self::Palmyrene => ffi::PANGO_SCRIPT_PALMYRENE,
2381            Self::PauCinHau => ffi::PANGO_SCRIPT_PAU_CIN_HAU,
2382            Self::PsalterPahlavi => ffi::PANGO_SCRIPT_PSALTER_PAHLAVI,
2383            Self::Siddham => ffi::PANGO_SCRIPT_SIDDHAM,
2384            Self::Tirhuta => ffi::PANGO_SCRIPT_TIRHUTA,
2385            Self::WarangCiti => ffi::PANGO_SCRIPT_WARANG_CITI,
2386            Self::Ahom => ffi::PANGO_SCRIPT_AHOM,
2387            Self::AnatolianHieroglyphs => ffi::PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS,
2388            Self::Hatran => ffi::PANGO_SCRIPT_HATRAN,
2389            Self::Multani => ffi::PANGO_SCRIPT_MULTANI,
2390            Self::OldHungarian => ffi::PANGO_SCRIPT_OLD_HUNGARIAN,
2391            Self::Signwriting => ffi::PANGO_SCRIPT_SIGNWRITING,
2392            Self::__Unknown(value) => value,
2393        }
2394    }
2395}
2396
2397#[doc(hidden)]
2398impl FromGlib<ffi::PangoScript> for Script {
2399    unsafe fn from_glib(value: ffi::PangoScript) -> Self {
2400        match value {
2401            ffi::PANGO_SCRIPT_INVALID_CODE => Self::InvalidCode,
2402            ffi::PANGO_SCRIPT_COMMON => Self::Common,
2403            ffi::PANGO_SCRIPT_INHERITED => Self::Inherited,
2404            ffi::PANGO_SCRIPT_ARABIC => Self::Arabic,
2405            ffi::PANGO_SCRIPT_ARMENIAN => Self::Armenian,
2406            ffi::PANGO_SCRIPT_BENGALI => Self::Bengali,
2407            ffi::PANGO_SCRIPT_BOPOMOFO => Self::Bopomofo,
2408            ffi::PANGO_SCRIPT_CHEROKEE => Self::Cherokee,
2409            ffi::PANGO_SCRIPT_COPTIC => Self::Coptic,
2410            ffi::PANGO_SCRIPT_CYRILLIC => Self::Cyrillic,
2411            ffi::PANGO_SCRIPT_DESERET => Self::Deseret,
2412            ffi::PANGO_SCRIPT_DEVANAGARI => Self::Devanagari,
2413            ffi::PANGO_SCRIPT_ETHIOPIC => Self::Ethiopic,
2414            ffi::PANGO_SCRIPT_GEORGIAN => Self::Georgian,
2415            ffi::PANGO_SCRIPT_GOTHIC => Self::Gothic,
2416            ffi::PANGO_SCRIPT_GREEK => Self::Greek,
2417            ffi::PANGO_SCRIPT_GUJARATI => Self::Gujarati,
2418            ffi::PANGO_SCRIPT_GURMUKHI => Self::Gurmukhi,
2419            ffi::PANGO_SCRIPT_HAN => Self::Han,
2420            ffi::PANGO_SCRIPT_HANGUL => Self::Hangul,
2421            ffi::PANGO_SCRIPT_HEBREW => Self::Hebrew,
2422            ffi::PANGO_SCRIPT_HIRAGANA => Self::Hiragana,
2423            ffi::PANGO_SCRIPT_KANNADA => Self::Kannada,
2424            ffi::PANGO_SCRIPT_KATAKANA => Self::Katakana,
2425            ffi::PANGO_SCRIPT_KHMER => Self::Khmer,
2426            ffi::PANGO_SCRIPT_LAO => Self::Lao,
2427            ffi::PANGO_SCRIPT_LATIN => Self::Latin,
2428            ffi::PANGO_SCRIPT_MALAYALAM => Self::Malayalam,
2429            ffi::PANGO_SCRIPT_MONGOLIAN => Self::Mongolian,
2430            ffi::PANGO_SCRIPT_MYANMAR => Self::Myanmar,
2431            ffi::PANGO_SCRIPT_OGHAM => Self::Ogham,
2432            ffi::PANGO_SCRIPT_OLD_ITALIC => Self::OldItalic,
2433            ffi::PANGO_SCRIPT_ORIYA => Self::Oriya,
2434            ffi::PANGO_SCRIPT_RUNIC => Self::Runic,
2435            ffi::PANGO_SCRIPT_SINHALA => Self::Sinhala,
2436            ffi::PANGO_SCRIPT_SYRIAC => Self::Syriac,
2437            ffi::PANGO_SCRIPT_TAMIL => Self::Tamil,
2438            ffi::PANGO_SCRIPT_TELUGU => Self::Telugu,
2439            ffi::PANGO_SCRIPT_THAANA => Self::Thaana,
2440            ffi::PANGO_SCRIPT_THAI => Self::Thai,
2441            ffi::PANGO_SCRIPT_TIBETAN => Self::Tibetan,
2442            ffi::PANGO_SCRIPT_CANADIAN_ABORIGINAL => Self::CanadianAboriginal,
2443            ffi::PANGO_SCRIPT_YI => Self::Yi,
2444            ffi::PANGO_SCRIPT_TAGALOG => Self::Tagalog,
2445            ffi::PANGO_SCRIPT_HANUNOO => Self::Hanunoo,
2446            ffi::PANGO_SCRIPT_BUHID => Self::Buhid,
2447            ffi::PANGO_SCRIPT_TAGBANWA => Self::Tagbanwa,
2448            ffi::PANGO_SCRIPT_BRAILLE => Self::Braille,
2449            ffi::PANGO_SCRIPT_CYPRIOT => Self::Cypriot,
2450            ffi::PANGO_SCRIPT_LIMBU => Self::Limbu,
2451            ffi::PANGO_SCRIPT_OSMANYA => Self::Osmanya,
2452            ffi::PANGO_SCRIPT_SHAVIAN => Self::Shavian,
2453            ffi::PANGO_SCRIPT_LINEAR_B => Self::LinearB,
2454            ffi::PANGO_SCRIPT_TAI_LE => Self::TaiLe,
2455            ffi::PANGO_SCRIPT_UGARITIC => Self::Ugaritic,
2456            ffi::PANGO_SCRIPT_NEW_TAI_LUE => Self::NewTaiLue,
2457            ffi::PANGO_SCRIPT_BUGINESE => Self::Buginese,
2458            ffi::PANGO_SCRIPT_GLAGOLITIC => Self::Glagolitic,
2459            ffi::PANGO_SCRIPT_TIFINAGH => Self::Tifinagh,
2460            ffi::PANGO_SCRIPT_SYLOTI_NAGRI => Self::SylotiNagri,
2461            ffi::PANGO_SCRIPT_OLD_PERSIAN => Self::OldPersian,
2462            ffi::PANGO_SCRIPT_KHAROSHTHI => Self::Kharoshthi,
2463            ffi::PANGO_SCRIPT_UNKNOWN => Self::Unknown,
2464            ffi::PANGO_SCRIPT_BALINESE => Self::Balinese,
2465            ffi::PANGO_SCRIPT_CUNEIFORM => Self::Cuneiform,
2466            ffi::PANGO_SCRIPT_PHOENICIAN => Self::Phoenician,
2467            ffi::PANGO_SCRIPT_PHAGS_PA => Self::PhagsPa,
2468            ffi::PANGO_SCRIPT_NKO => Self::Nko,
2469            ffi::PANGO_SCRIPT_KAYAH_LI => Self::KayahLi,
2470            ffi::PANGO_SCRIPT_LEPCHA => Self::Lepcha,
2471            ffi::PANGO_SCRIPT_REJANG => Self::Rejang,
2472            ffi::PANGO_SCRIPT_SUNDANESE => Self::Sundanese,
2473            ffi::PANGO_SCRIPT_SAURASHTRA => Self::Saurashtra,
2474            ffi::PANGO_SCRIPT_CHAM => Self::Cham,
2475            ffi::PANGO_SCRIPT_OL_CHIKI => Self::OlChiki,
2476            ffi::PANGO_SCRIPT_VAI => Self::Vai,
2477            ffi::PANGO_SCRIPT_CARIAN => Self::Carian,
2478            ffi::PANGO_SCRIPT_LYCIAN => Self::Lycian,
2479            ffi::PANGO_SCRIPT_LYDIAN => Self::Lydian,
2480            ffi::PANGO_SCRIPT_BATAK => Self::Batak,
2481            ffi::PANGO_SCRIPT_BRAHMI => Self::Brahmi,
2482            ffi::PANGO_SCRIPT_MANDAIC => Self::Mandaic,
2483            ffi::PANGO_SCRIPT_CHAKMA => Self::Chakma,
2484            ffi::PANGO_SCRIPT_MEROITIC_CURSIVE => Self::MeroiticCursive,
2485            ffi::PANGO_SCRIPT_MEROITIC_HIEROGLYPHS => Self::MeroiticHieroglyphs,
2486            ffi::PANGO_SCRIPT_MIAO => Self::Miao,
2487            ffi::PANGO_SCRIPT_SHARADA => Self::Sharada,
2488            ffi::PANGO_SCRIPT_SORA_SOMPENG => Self::SoraSompeng,
2489            ffi::PANGO_SCRIPT_TAKRI => Self::Takri,
2490            ffi::PANGO_SCRIPT_BASSA_VAH => Self::BassaVah,
2491            ffi::PANGO_SCRIPT_CAUCASIAN_ALBANIAN => Self::CaucasianAlbanian,
2492            ffi::PANGO_SCRIPT_DUPLOYAN => Self::Duployan,
2493            ffi::PANGO_SCRIPT_ELBASAN => Self::Elbasan,
2494            ffi::PANGO_SCRIPT_GRANTHA => Self::Grantha,
2495            ffi::PANGO_SCRIPT_KHOJKI => Self::Khojki,
2496            ffi::PANGO_SCRIPT_KHUDAWADI => Self::Khudawadi,
2497            ffi::PANGO_SCRIPT_LINEAR_A => Self::LinearA,
2498            ffi::PANGO_SCRIPT_MAHAJANI => Self::Mahajani,
2499            ffi::PANGO_SCRIPT_MANICHAEAN => Self::Manichaean,
2500            ffi::PANGO_SCRIPT_MENDE_KIKAKUI => Self::MendeKikakui,
2501            ffi::PANGO_SCRIPT_MODI => Self::Modi,
2502            ffi::PANGO_SCRIPT_MRO => Self::Mro,
2503            ffi::PANGO_SCRIPT_NABATAEAN => Self::Nabataean,
2504            ffi::PANGO_SCRIPT_OLD_NORTH_ARABIAN => Self::OldNorthArabian,
2505            ffi::PANGO_SCRIPT_OLD_PERMIC => Self::OldPermic,
2506            ffi::PANGO_SCRIPT_PAHAWH_HMONG => Self::PahawhHmong,
2507            ffi::PANGO_SCRIPT_PALMYRENE => Self::Palmyrene,
2508            ffi::PANGO_SCRIPT_PAU_CIN_HAU => Self::PauCinHau,
2509            ffi::PANGO_SCRIPT_PSALTER_PAHLAVI => Self::PsalterPahlavi,
2510            ffi::PANGO_SCRIPT_SIDDHAM => Self::Siddham,
2511            ffi::PANGO_SCRIPT_TIRHUTA => Self::Tirhuta,
2512            ffi::PANGO_SCRIPT_WARANG_CITI => Self::WarangCiti,
2513            ffi::PANGO_SCRIPT_AHOM => Self::Ahom,
2514            ffi::PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS => Self::AnatolianHieroglyphs,
2515            ffi::PANGO_SCRIPT_HATRAN => Self::Hatran,
2516            ffi::PANGO_SCRIPT_MULTANI => Self::Multani,
2517            ffi::PANGO_SCRIPT_OLD_HUNGARIAN => Self::OldHungarian,
2518            ffi::PANGO_SCRIPT_SIGNWRITING => Self::Signwriting,
2519            value => Self::__Unknown(value),
2520        }
2521    }
2522}
2523
2524impl StaticType for Script {
2525    #[inline]
2526    #[doc(alias = "pango_script_get_type")]
2527    fn static_type() -> glib::Type {
2528        unsafe { from_glib(ffi::pango_script_get_type()) }
2529    }
2530}
2531
2532impl glib::HasParamSpec for Script {
2533    type ParamSpec = glib::ParamSpecEnum;
2534    type SetValue = Self;
2535    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2536
2537    fn param_spec_builder() -> Self::BuilderFn {
2538        Self::ParamSpec::builder_with_default
2539    }
2540}
2541
2542impl glib::value::ValueType for Script {
2543    type Type = Self;
2544}
2545
2546unsafe impl<'a> glib::value::FromValue<'a> for Script {
2547    type Checker = glib::value::GenericValueTypeChecker<Self>;
2548
2549    #[inline]
2550    unsafe fn from_value(value: &'a glib::Value) -> Self {
2551        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2552    }
2553}
2554
2555impl ToValue for Script {
2556    #[inline]
2557    fn to_value(&self) -> glib::Value {
2558        let mut value = glib::Value::for_value_type::<Self>();
2559        unsafe {
2560            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2561        }
2562        value
2563    }
2564
2565    #[inline]
2566    fn value_type(&self) -> glib::Type {
2567        Self::static_type()
2568    }
2569}
2570
2571impl From<Script> for glib::Value {
2572    #[inline]
2573    fn from(v: Script) -> Self {
2574        ToValue::to_value(&v)
2575    }
2576}
2577
2578/// An enumeration specifying the width of the font relative to other designs
2579/// within a family.
2580#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2581#[non_exhaustive]
2582#[doc(alias = "PangoStretch")]
2583pub enum Stretch {
2584    /// ultra condensed width
2585    #[doc(alias = "PANGO_STRETCH_ULTRA_CONDENSED")]
2586    UltraCondensed,
2587    /// extra condensed width
2588    #[doc(alias = "PANGO_STRETCH_EXTRA_CONDENSED")]
2589    ExtraCondensed,
2590    /// condensed width
2591    #[doc(alias = "PANGO_STRETCH_CONDENSED")]
2592    Condensed,
2593    /// semi condensed width
2594    #[doc(alias = "PANGO_STRETCH_SEMI_CONDENSED")]
2595    SemiCondensed,
2596    /// the normal width
2597    #[doc(alias = "PANGO_STRETCH_NORMAL")]
2598    Normal,
2599    /// semi expanded width
2600    #[doc(alias = "PANGO_STRETCH_SEMI_EXPANDED")]
2601    SemiExpanded,
2602    /// expanded width
2603    #[doc(alias = "PANGO_STRETCH_EXPANDED")]
2604    Expanded,
2605    /// extra expanded width
2606    #[doc(alias = "PANGO_STRETCH_EXTRA_EXPANDED")]
2607    ExtraExpanded,
2608    /// ultra expanded width
2609    #[doc(alias = "PANGO_STRETCH_ULTRA_EXPANDED")]
2610    UltraExpanded,
2611    #[doc(hidden)]
2612    __Unknown(i32),
2613}
2614
2615#[doc(hidden)]
2616impl IntoGlib for Stretch {
2617    type GlibType = ffi::PangoStretch;
2618
2619    #[inline]
2620    fn into_glib(self) -> ffi::PangoStretch {
2621        match self {
2622            Self::UltraCondensed => ffi::PANGO_STRETCH_ULTRA_CONDENSED,
2623            Self::ExtraCondensed => ffi::PANGO_STRETCH_EXTRA_CONDENSED,
2624            Self::Condensed => ffi::PANGO_STRETCH_CONDENSED,
2625            Self::SemiCondensed => ffi::PANGO_STRETCH_SEMI_CONDENSED,
2626            Self::Normal => ffi::PANGO_STRETCH_NORMAL,
2627            Self::SemiExpanded => ffi::PANGO_STRETCH_SEMI_EXPANDED,
2628            Self::Expanded => ffi::PANGO_STRETCH_EXPANDED,
2629            Self::ExtraExpanded => ffi::PANGO_STRETCH_EXTRA_EXPANDED,
2630            Self::UltraExpanded => ffi::PANGO_STRETCH_ULTRA_EXPANDED,
2631            Self::__Unknown(value) => value,
2632        }
2633    }
2634}
2635
2636#[doc(hidden)]
2637impl FromGlib<ffi::PangoStretch> for Stretch {
2638    #[inline]
2639    unsafe fn from_glib(value: ffi::PangoStretch) -> Self {
2640        match value {
2641            ffi::PANGO_STRETCH_ULTRA_CONDENSED => Self::UltraCondensed,
2642            ffi::PANGO_STRETCH_EXTRA_CONDENSED => Self::ExtraCondensed,
2643            ffi::PANGO_STRETCH_CONDENSED => Self::Condensed,
2644            ffi::PANGO_STRETCH_SEMI_CONDENSED => Self::SemiCondensed,
2645            ffi::PANGO_STRETCH_NORMAL => Self::Normal,
2646            ffi::PANGO_STRETCH_SEMI_EXPANDED => Self::SemiExpanded,
2647            ffi::PANGO_STRETCH_EXPANDED => Self::Expanded,
2648            ffi::PANGO_STRETCH_EXTRA_EXPANDED => Self::ExtraExpanded,
2649            ffi::PANGO_STRETCH_ULTRA_EXPANDED => Self::UltraExpanded,
2650            value => Self::__Unknown(value),
2651        }
2652    }
2653}
2654
2655impl StaticType for Stretch {
2656    #[inline]
2657    #[doc(alias = "pango_stretch_get_type")]
2658    fn static_type() -> glib::Type {
2659        unsafe { from_glib(ffi::pango_stretch_get_type()) }
2660    }
2661}
2662
2663impl glib::HasParamSpec for Stretch {
2664    type ParamSpec = glib::ParamSpecEnum;
2665    type SetValue = Self;
2666    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2667
2668    fn param_spec_builder() -> Self::BuilderFn {
2669        Self::ParamSpec::builder_with_default
2670    }
2671}
2672
2673impl glib::value::ValueType for Stretch {
2674    type Type = Self;
2675}
2676
2677unsafe impl<'a> glib::value::FromValue<'a> for Stretch {
2678    type Checker = glib::value::GenericValueTypeChecker<Self>;
2679
2680    #[inline]
2681    unsafe fn from_value(value: &'a glib::Value) -> Self {
2682        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2683    }
2684}
2685
2686impl ToValue for Stretch {
2687    #[inline]
2688    fn to_value(&self) -> glib::Value {
2689        let mut value = glib::Value::for_value_type::<Self>();
2690        unsafe {
2691            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2692        }
2693        value
2694    }
2695
2696    #[inline]
2697    fn value_type(&self) -> glib::Type {
2698        Self::static_type()
2699    }
2700}
2701
2702impl From<Stretch> for glib::Value {
2703    #[inline]
2704    fn from(v: Stretch) -> Self {
2705        ToValue::to_value(&v)
2706    }
2707}
2708
2709/// An enumeration specifying the various slant styles possible for a font.
2710#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2711#[non_exhaustive]
2712#[doc(alias = "PangoStyle")]
2713pub enum Style {
2714    /// the font is upright.
2715    #[doc(alias = "PANGO_STYLE_NORMAL")]
2716    Normal,
2717    /// the font is slanted, but in a roman style.
2718    #[doc(alias = "PANGO_STYLE_OBLIQUE")]
2719    Oblique,
2720    /// the font is slanted in an italic style.
2721    #[doc(alias = "PANGO_STYLE_ITALIC")]
2722    Italic,
2723    #[doc(hidden)]
2724    __Unknown(i32),
2725}
2726
2727#[doc(hidden)]
2728impl IntoGlib for Style {
2729    type GlibType = ffi::PangoStyle;
2730
2731    #[inline]
2732    fn into_glib(self) -> ffi::PangoStyle {
2733        match self {
2734            Self::Normal => ffi::PANGO_STYLE_NORMAL,
2735            Self::Oblique => ffi::PANGO_STYLE_OBLIQUE,
2736            Self::Italic => ffi::PANGO_STYLE_ITALIC,
2737            Self::__Unknown(value) => value,
2738        }
2739    }
2740}
2741
2742#[doc(hidden)]
2743impl FromGlib<ffi::PangoStyle> for Style {
2744    #[inline]
2745    unsafe fn from_glib(value: ffi::PangoStyle) -> Self {
2746        match value {
2747            ffi::PANGO_STYLE_NORMAL => Self::Normal,
2748            ffi::PANGO_STYLE_OBLIQUE => Self::Oblique,
2749            ffi::PANGO_STYLE_ITALIC => Self::Italic,
2750            value => Self::__Unknown(value),
2751        }
2752    }
2753}
2754
2755impl StaticType for Style {
2756    #[inline]
2757    #[doc(alias = "pango_style_get_type")]
2758    fn static_type() -> glib::Type {
2759        unsafe { from_glib(ffi::pango_style_get_type()) }
2760    }
2761}
2762
2763impl glib::HasParamSpec for Style {
2764    type ParamSpec = glib::ParamSpecEnum;
2765    type SetValue = Self;
2766    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2767
2768    fn param_spec_builder() -> Self::BuilderFn {
2769        Self::ParamSpec::builder_with_default
2770    }
2771}
2772
2773impl glib::value::ValueType for Style {
2774    type Type = Self;
2775}
2776
2777unsafe impl<'a> glib::value::FromValue<'a> for Style {
2778    type Checker = glib::value::GenericValueTypeChecker<Self>;
2779
2780    #[inline]
2781    unsafe fn from_value(value: &'a glib::Value) -> Self {
2782        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2783    }
2784}
2785
2786impl ToValue for Style {
2787    #[inline]
2788    fn to_value(&self) -> glib::Value {
2789        let mut value = glib::Value::for_value_type::<Self>();
2790        unsafe {
2791            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2792        }
2793        value
2794    }
2795
2796    #[inline]
2797    fn value_type(&self) -> glib::Type {
2798        Self::static_type()
2799    }
2800}
2801
2802impl From<Style> for glib::Value {
2803    #[inline]
2804    fn from(v: Style) -> Self {
2805        ToValue::to_value(&v)
2806    }
2807}
2808
2809/// [`TabAlign`][crate::TabAlign] specifies where the text appears relative to the tab stop
2810/// position.
2811#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2812#[non_exhaustive]
2813#[doc(alias = "PangoTabAlign")]
2814pub enum TabAlign {
2815    /// the text appears to the right of the tab stop position
2816    #[doc(alias = "PANGO_TAB_LEFT")]
2817    Left,
2818    /// the text appears to the left of the tab stop position
2819    ///   until the available space is filled. Since: 1.50
2820    #[cfg(feature = "v1_50")]
2821    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2822    #[doc(alias = "PANGO_TAB_RIGHT")]
2823    Right,
2824    /// the text is centered at the tab stop position
2825    ///   until the available space is filled. Since: 1.50
2826    #[cfg(feature = "v1_50")]
2827    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2828    #[doc(alias = "PANGO_TAB_CENTER")]
2829    Center,
2830    /// text before the first occurrence of the decimal point
2831    ///   character appears to the left of the tab stop position (until the available
2832    ///   space is filled), the rest to the right. Since: 1.50
2833    #[cfg(feature = "v1_50")]
2834    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2835    #[doc(alias = "PANGO_TAB_DECIMAL")]
2836    Decimal,
2837    #[doc(hidden)]
2838    __Unknown(i32),
2839}
2840
2841#[doc(hidden)]
2842impl IntoGlib for TabAlign {
2843    type GlibType = ffi::PangoTabAlign;
2844
2845    #[inline]
2846    fn into_glib(self) -> ffi::PangoTabAlign {
2847        match self {
2848            Self::Left => ffi::PANGO_TAB_LEFT,
2849            #[cfg(feature = "v1_50")]
2850            Self::Right => ffi::PANGO_TAB_RIGHT,
2851            #[cfg(feature = "v1_50")]
2852            Self::Center => ffi::PANGO_TAB_CENTER,
2853            #[cfg(feature = "v1_50")]
2854            Self::Decimal => ffi::PANGO_TAB_DECIMAL,
2855            Self::__Unknown(value) => value,
2856        }
2857    }
2858}
2859
2860#[doc(hidden)]
2861impl FromGlib<ffi::PangoTabAlign> for TabAlign {
2862    #[inline]
2863    unsafe fn from_glib(value: ffi::PangoTabAlign) -> Self {
2864        match value {
2865            ffi::PANGO_TAB_LEFT => Self::Left,
2866            #[cfg(feature = "v1_50")]
2867            ffi::PANGO_TAB_RIGHT => Self::Right,
2868            #[cfg(feature = "v1_50")]
2869            ffi::PANGO_TAB_CENTER => Self::Center,
2870            #[cfg(feature = "v1_50")]
2871            ffi::PANGO_TAB_DECIMAL => Self::Decimal,
2872            value => Self::__Unknown(value),
2873        }
2874    }
2875}
2876
2877impl StaticType for TabAlign {
2878    #[inline]
2879    #[doc(alias = "pango_tab_align_get_type")]
2880    fn static_type() -> glib::Type {
2881        unsafe { from_glib(ffi::pango_tab_align_get_type()) }
2882    }
2883}
2884
2885impl glib::HasParamSpec for TabAlign {
2886    type ParamSpec = glib::ParamSpecEnum;
2887    type SetValue = Self;
2888    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2889
2890    fn param_spec_builder() -> Self::BuilderFn {
2891        Self::ParamSpec::builder_with_default
2892    }
2893}
2894
2895impl glib::value::ValueType for TabAlign {
2896    type Type = Self;
2897}
2898
2899unsafe impl<'a> glib::value::FromValue<'a> for TabAlign {
2900    type Checker = glib::value::GenericValueTypeChecker<Self>;
2901
2902    #[inline]
2903    unsafe fn from_value(value: &'a glib::Value) -> Self {
2904        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2905    }
2906}
2907
2908impl ToValue for TabAlign {
2909    #[inline]
2910    fn to_value(&self) -> glib::Value {
2911        let mut value = glib::Value::for_value_type::<Self>();
2912        unsafe {
2913            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2914        }
2915        value
2916    }
2917
2918    #[inline]
2919    fn value_type(&self) -> glib::Type {
2920        Self::static_type()
2921    }
2922}
2923
2924impl From<TabAlign> for glib::Value {
2925    #[inline]
2926    fn from(v: TabAlign) -> Self {
2927        ToValue::to_value(&v)
2928    }
2929}
2930
2931/// An enumeration that affects how Pango treats characters during shaping.
2932#[cfg(feature = "v1_50")]
2933#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2934#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2935#[non_exhaustive]
2936#[doc(alias = "PangoTextTransform")]
2937pub enum TextTransform {
2938    /// Leave text unchanged
2939    #[doc(alias = "PANGO_TEXT_TRANSFORM_NONE")]
2940    None,
2941    /// Display letters and numbers as lowercase
2942    #[doc(alias = "PANGO_TEXT_TRANSFORM_LOWERCASE")]
2943    Lowercase,
2944    /// Display letters and numbers as uppercase
2945    #[doc(alias = "PANGO_TEXT_TRANSFORM_UPPERCASE")]
2946    Uppercase,
2947    /// Display the first character of a word
2948    ///   in titlecase
2949    #[doc(alias = "PANGO_TEXT_TRANSFORM_CAPITALIZE")]
2950    Capitalize,
2951    #[doc(hidden)]
2952    __Unknown(i32),
2953}
2954
2955#[cfg(feature = "v1_50")]
2956#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2957#[doc(hidden)]
2958impl IntoGlib for TextTransform {
2959    type GlibType = ffi::PangoTextTransform;
2960
2961    #[inline]
2962    fn into_glib(self) -> ffi::PangoTextTransform {
2963        match self {
2964            Self::None => ffi::PANGO_TEXT_TRANSFORM_NONE,
2965            Self::Lowercase => ffi::PANGO_TEXT_TRANSFORM_LOWERCASE,
2966            Self::Uppercase => ffi::PANGO_TEXT_TRANSFORM_UPPERCASE,
2967            Self::Capitalize => ffi::PANGO_TEXT_TRANSFORM_CAPITALIZE,
2968            Self::__Unknown(value) => value,
2969        }
2970    }
2971}
2972
2973#[cfg(feature = "v1_50")]
2974#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2975#[doc(hidden)]
2976impl FromGlib<ffi::PangoTextTransform> for TextTransform {
2977    #[inline]
2978    unsafe fn from_glib(value: ffi::PangoTextTransform) -> Self {
2979        match value {
2980            ffi::PANGO_TEXT_TRANSFORM_NONE => Self::None,
2981            ffi::PANGO_TEXT_TRANSFORM_LOWERCASE => Self::Lowercase,
2982            ffi::PANGO_TEXT_TRANSFORM_UPPERCASE => Self::Uppercase,
2983            ffi::PANGO_TEXT_TRANSFORM_CAPITALIZE => Self::Capitalize,
2984            value => Self::__Unknown(value),
2985        }
2986    }
2987}
2988
2989#[cfg(feature = "v1_50")]
2990#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
2991impl StaticType for TextTransform {
2992    #[inline]
2993    #[doc(alias = "pango_text_transform_get_type")]
2994    fn static_type() -> glib::Type {
2995        unsafe { from_glib(ffi::pango_text_transform_get_type()) }
2996    }
2997}
2998
2999#[cfg(feature = "v1_50")]
3000#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3001impl glib::HasParamSpec for TextTransform {
3002    type ParamSpec = glib::ParamSpecEnum;
3003    type SetValue = Self;
3004    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3005
3006    fn param_spec_builder() -> Self::BuilderFn {
3007        Self::ParamSpec::builder_with_default
3008    }
3009}
3010
3011#[cfg(feature = "v1_50")]
3012#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3013impl glib::value::ValueType for TextTransform {
3014    type Type = Self;
3015}
3016
3017#[cfg(feature = "v1_50")]
3018#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3019unsafe impl<'a> glib::value::FromValue<'a> for TextTransform {
3020    type Checker = glib::value::GenericValueTypeChecker<Self>;
3021
3022    #[inline]
3023    unsafe fn from_value(value: &'a glib::Value) -> Self {
3024        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3025    }
3026}
3027
3028#[cfg(feature = "v1_50")]
3029#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3030impl ToValue for TextTransform {
3031    #[inline]
3032    fn to_value(&self) -> glib::Value {
3033        let mut value = glib::Value::for_value_type::<Self>();
3034        unsafe {
3035            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3036        }
3037        value
3038    }
3039
3040    #[inline]
3041    fn value_type(&self) -> glib::Type {
3042        Self::static_type()
3043    }
3044}
3045
3046#[cfg(feature = "v1_50")]
3047#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3048impl From<TextTransform> for glib::Value {
3049    #[inline]
3050    fn from(v: TextTransform) -> Self {
3051        ToValue::to_value(&v)
3052    }
3053}
3054
3055/// The [`Underline`][crate::Underline] enumeration is used to specify whether text
3056/// should be underlined, and if so, the type of underlining.
3057#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3058#[non_exhaustive]
3059#[doc(alias = "PangoUnderline")]
3060pub enum Underline {
3061    /// no underline should be drawn
3062    #[doc(alias = "PANGO_UNDERLINE_NONE")]
3063    None,
3064    /// a single underline should be drawn
3065    #[doc(alias = "PANGO_UNDERLINE_SINGLE")]
3066    Single,
3067    /// a double underline should be drawn
3068    #[doc(alias = "PANGO_UNDERLINE_DOUBLE")]
3069    Double,
3070    /// a single underline should be drawn at a
3071    ///   position beneath the ink extents of the text being
3072    ///   underlined. This should be used only for underlining
3073    ///   single characters, such as for keyboard accelerators.
3074    ///   [`Single`][Self::Single] should be used for extended
3075    ///   portions of text.
3076    #[doc(alias = "PANGO_UNDERLINE_LOW")]
3077    Low,
3078    /// an underline indicating an error should
3079    ///   be drawn below. The exact style of rendering is up to the
3080    ///   [`Renderer`][crate::Renderer] in use, but typical styles include wavy
3081    ///   or dotted lines.
3082    ///   This underline is typically used to indicate an error such
3083    ///   as a possible mispelling; in some cases a contrasting color
3084    ///   may automatically be used. This type of underlining is
3085    ///   available since Pango 1.4.
3086    #[doc(alias = "PANGO_UNDERLINE_ERROR")]
3087    Error,
3088    /// Like @PANGO_UNDERLINE_SINGLE, but
3089    ///   drawn continuously across multiple runs. This type
3090    ///   of underlining is available since Pango 1.46.
3091    #[doc(alias = "PANGO_UNDERLINE_SINGLE_LINE")]
3092    SingleLine,
3093    /// Like @PANGO_UNDERLINE_DOUBLE, but
3094    ///   drawn continuously across multiple runs. This type
3095    ///   of underlining is available since Pango 1.46.
3096    #[doc(alias = "PANGO_UNDERLINE_DOUBLE_LINE")]
3097    DoubleLine,
3098    /// Like @PANGO_UNDERLINE_ERROR, but
3099    ///   drawn continuously across multiple runs. This type
3100    ///   of underlining is available since Pango 1.46.
3101    #[doc(alias = "PANGO_UNDERLINE_ERROR_LINE")]
3102    ErrorLine,
3103    #[doc(hidden)]
3104    __Unknown(i32),
3105}
3106
3107#[doc(hidden)]
3108impl IntoGlib for Underline {
3109    type GlibType = ffi::PangoUnderline;
3110
3111    #[inline]
3112    fn into_glib(self) -> ffi::PangoUnderline {
3113        match self {
3114            Self::None => ffi::PANGO_UNDERLINE_NONE,
3115            Self::Single => ffi::PANGO_UNDERLINE_SINGLE,
3116            Self::Double => ffi::PANGO_UNDERLINE_DOUBLE,
3117            Self::Low => ffi::PANGO_UNDERLINE_LOW,
3118            Self::Error => ffi::PANGO_UNDERLINE_ERROR,
3119            Self::SingleLine => ffi::PANGO_UNDERLINE_SINGLE_LINE,
3120            Self::DoubleLine => ffi::PANGO_UNDERLINE_DOUBLE_LINE,
3121            Self::ErrorLine => ffi::PANGO_UNDERLINE_ERROR_LINE,
3122            Self::__Unknown(value) => value,
3123        }
3124    }
3125}
3126
3127#[doc(hidden)]
3128impl FromGlib<ffi::PangoUnderline> for Underline {
3129    #[inline]
3130    unsafe fn from_glib(value: ffi::PangoUnderline) -> Self {
3131        match value {
3132            ffi::PANGO_UNDERLINE_NONE => Self::None,
3133            ffi::PANGO_UNDERLINE_SINGLE => Self::Single,
3134            ffi::PANGO_UNDERLINE_DOUBLE => Self::Double,
3135            ffi::PANGO_UNDERLINE_LOW => Self::Low,
3136            ffi::PANGO_UNDERLINE_ERROR => Self::Error,
3137            ffi::PANGO_UNDERLINE_SINGLE_LINE => Self::SingleLine,
3138            ffi::PANGO_UNDERLINE_DOUBLE_LINE => Self::DoubleLine,
3139            ffi::PANGO_UNDERLINE_ERROR_LINE => Self::ErrorLine,
3140            value => Self::__Unknown(value),
3141        }
3142    }
3143}
3144
3145impl StaticType for Underline {
3146    #[inline]
3147    #[doc(alias = "pango_underline_get_type")]
3148    fn static_type() -> glib::Type {
3149        unsafe { from_glib(ffi::pango_underline_get_type()) }
3150    }
3151}
3152
3153impl glib::HasParamSpec for Underline {
3154    type ParamSpec = glib::ParamSpecEnum;
3155    type SetValue = Self;
3156    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3157
3158    fn param_spec_builder() -> Self::BuilderFn {
3159        Self::ParamSpec::builder_with_default
3160    }
3161}
3162
3163impl glib::value::ValueType for Underline {
3164    type Type = Self;
3165}
3166
3167unsafe impl<'a> glib::value::FromValue<'a> for Underline {
3168    type Checker = glib::value::GenericValueTypeChecker<Self>;
3169
3170    #[inline]
3171    unsafe fn from_value(value: &'a glib::Value) -> Self {
3172        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3173    }
3174}
3175
3176impl ToValue for Underline {
3177    #[inline]
3178    fn to_value(&self) -> glib::Value {
3179        let mut value = glib::Value::for_value_type::<Self>();
3180        unsafe {
3181            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3182        }
3183        value
3184    }
3185
3186    #[inline]
3187    fn value_type(&self) -> glib::Type {
3188        Self::static_type()
3189    }
3190}
3191
3192impl From<Underline> for glib::Value {
3193    #[inline]
3194    fn from(v: Underline) -> Self {
3195        ToValue::to_value(&v)
3196    }
3197}
3198
3199/// An enumeration specifying capitalization variant of the font.
3200#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3201#[non_exhaustive]
3202#[doc(alias = "PangoVariant")]
3203pub enum Variant {
3204    /// A normal font.
3205    #[doc(alias = "PANGO_VARIANT_NORMAL")]
3206    Normal,
3207    /// A font with the lower case characters
3208    ///   replaced by smaller variants of the capital characters.
3209    #[doc(alias = "PANGO_VARIANT_SMALL_CAPS")]
3210    SmallCaps,
3211    /// A font with all characters
3212    ///   replaced by smaller variants of the capital characters. Since: 1.50
3213    #[cfg(feature = "v1_50")]
3214    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3215    #[doc(alias = "PANGO_VARIANT_ALL_SMALL_CAPS")]
3216    AllSmallCaps,
3217    /// A font with the lower case characters
3218    ///   replaced by smaller variants of the capital characters.
3219    ///   Petite Caps can be even smaller than Small Caps. Since: 1.50
3220    #[cfg(feature = "v1_50")]
3221    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3222    #[doc(alias = "PANGO_VARIANT_PETITE_CAPS")]
3223    PetiteCaps,
3224    /// A font with all characters
3225    ///   replaced by smaller variants of the capital characters.
3226    ///   Petite Caps can be even smaller than Small Caps. Since: 1.50
3227    #[cfg(feature = "v1_50")]
3228    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3229    #[doc(alias = "PANGO_VARIANT_ALL_PETITE_CAPS")]
3230    AllPetiteCaps,
3231    /// A font with the upper case characters
3232    ///   replaced by smaller variants of the capital letters. Since: 1.50
3233    #[cfg(feature = "v1_50")]
3234    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3235    #[doc(alias = "PANGO_VARIANT_UNICASE")]
3236    Unicase,
3237    /// A font with capital letters that
3238    ///   are more suitable for all-uppercase titles. Since: 1.50
3239    #[cfg(feature = "v1_50")]
3240    #[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
3241    #[doc(alias = "PANGO_VARIANT_TITLE_CAPS")]
3242    TitleCaps,
3243    #[doc(hidden)]
3244    __Unknown(i32),
3245}
3246
3247#[doc(hidden)]
3248impl IntoGlib for Variant {
3249    type GlibType = ffi::PangoVariant;
3250
3251    #[inline]
3252    fn into_glib(self) -> ffi::PangoVariant {
3253        match self {
3254            Self::Normal => ffi::PANGO_VARIANT_NORMAL,
3255            Self::SmallCaps => ffi::PANGO_VARIANT_SMALL_CAPS,
3256            #[cfg(feature = "v1_50")]
3257            Self::AllSmallCaps => ffi::PANGO_VARIANT_ALL_SMALL_CAPS,
3258            #[cfg(feature = "v1_50")]
3259            Self::PetiteCaps => ffi::PANGO_VARIANT_PETITE_CAPS,
3260            #[cfg(feature = "v1_50")]
3261            Self::AllPetiteCaps => ffi::PANGO_VARIANT_ALL_PETITE_CAPS,
3262            #[cfg(feature = "v1_50")]
3263            Self::Unicase => ffi::PANGO_VARIANT_UNICASE,
3264            #[cfg(feature = "v1_50")]
3265            Self::TitleCaps => ffi::PANGO_VARIANT_TITLE_CAPS,
3266            Self::__Unknown(value) => value,
3267        }
3268    }
3269}
3270
3271#[doc(hidden)]
3272impl FromGlib<ffi::PangoVariant> for Variant {
3273    #[inline]
3274    unsafe fn from_glib(value: ffi::PangoVariant) -> Self {
3275        match value {
3276            ffi::PANGO_VARIANT_NORMAL => Self::Normal,
3277            ffi::PANGO_VARIANT_SMALL_CAPS => Self::SmallCaps,
3278            #[cfg(feature = "v1_50")]
3279            ffi::PANGO_VARIANT_ALL_SMALL_CAPS => Self::AllSmallCaps,
3280            #[cfg(feature = "v1_50")]
3281            ffi::PANGO_VARIANT_PETITE_CAPS => Self::PetiteCaps,
3282            #[cfg(feature = "v1_50")]
3283            ffi::PANGO_VARIANT_ALL_PETITE_CAPS => Self::AllPetiteCaps,
3284            #[cfg(feature = "v1_50")]
3285            ffi::PANGO_VARIANT_UNICASE => Self::Unicase,
3286            #[cfg(feature = "v1_50")]
3287            ffi::PANGO_VARIANT_TITLE_CAPS => Self::TitleCaps,
3288            value => Self::__Unknown(value),
3289        }
3290    }
3291}
3292
3293impl StaticType for Variant {
3294    #[inline]
3295    #[doc(alias = "pango_variant_get_type")]
3296    fn static_type() -> glib::Type {
3297        unsafe { from_glib(ffi::pango_variant_get_type()) }
3298    }
3299}
3300
3301impl glib::HasParamSpec for Variant {
3302    type ParamSpec = glib::ParamSpecEnum;
3303    type SetValue = Self;
3304    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3305
3306    fn param_spec_builder() -> Self::BuilderFn {
3307        Self::ParamSpec::builder_with_default
3308    }
3309}
3310
3311impl glib::value::ValueType for Variant {
3312    type Type = Self;
3313}
3314
3315unsafe impl<'a> glib::value::FromValue<'a> for Variant {
3316    type Checker = glib::value::GenericValueTypeChecker<Self>;
3317
3318    #[inline]
3319    unsafe fn from_value(value: &'a glib::Value) -> Self {
3320        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3321    }
3322}
3323
3324impl ToValue for Variant {
3325    #[inline]
3326    fn to_value(&self) -> glib::Value {
3327        let mut value = glib::Value::for_value_type::<Self>();
3328        unsafe {
3329            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3330        }
3331        value
3332    }
3333
3334    #[inline]
3335    fn value_type(&self) -> glib::Type {
3336        Self::static_type()
3337    }
3338}
3339
3340impl From<Variant> for glib::Value {
3341    #[inline]
3342    fn from(v: Variant) -> Self {
3343        ToValue::to_value(&v)
3344    }
3345}
3346
3347/// An enumeration specifying the weight (boldness) of a font.
3348///
3349/// Weight is specified as a numeric value ranging from 100 to 1000.
3350/// This enumeration simply provides some common, predefined values.
3351#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3352#[non_exhaustive]
3353#[doc(alias = "PangoWeight")]
3354pub enum Weight {
3355    /// the thin weight (= 100) Since: 1.24
3356    #[doc(alias = "PANGO_WEIGHT_THIN")]
3357    Thin,
3358    /// the ultralight weight (= 200)
3359    #[doc(alias = "PANGO_WEIGHT_ULTRALIGHT")]
3360    Ultralight,
3361    /// the light weight (= 300)
3362    #[doc(alias = "PANGO_WEIGHT_LIGHT")]
3363    Light,
3364    /// the semilight weight (= 350) Since: 1.36.7
3365    #[doc(alias = "PANGO_WEIGHT_SEMILIGHT")]
3366    Semilight,
3367    /// the book weight (= 380) Since: 1.24)
3368    #[doc(alias = "PANGO_WEIGHT_BOOK")]
3369    Book,
3370    /// the default weight (= 400)
3371    #[doc(alias = "PANGO_WEIGHT_NORMAL")]
3372    Normal,
3373    /// the medium weight (= 500) Since: 1.24
3374    #[doc(alias = "PANGO_WEIGHT_MEDIUM")]
3375    Medium,
3376    /// the semibold weight (= 600)
3377    #[doc(alias = "PANGO_WEIGHT_SEMIBOLD")]
3378    Semibold,
3379    /// the bold weight (= 700)
3380    #[doc(alias = "PANGO_WEIGHT_BOLD")]
3381    Bold,
3382    /// the ultrabold weight (= 800)
3383    #[doc(alias = "PANGO_WEIGHT_ULTRABOLD")]
3384    Ultrabold,
3385    /// the heavy weight (= 900)
3386    #[doc(alias = "PANGO_WEIGHT_HEAVY")]
3387    Heavy,
3388    /// the ultraheavy weight (= 1000) Since: 1.24
3389    #[doc(alias = "PANGO_WEIGHT_ULTRAHEAVY")]
3390    Ultraheavy,
3391    #[doc(hidden)]
3392    __Unknown(i32),
3393}
3394
3395#[doc(hidden)]
3396impl IntoGlib for Weight {
3397    type GlibType = ffi::PangoWeight;
3398
3399    #[inline]
3400    fn into_glib(self) -> ffi::PangoWeight {
3401        match self {
3402            Self::Thin => ffi::PANGO_WEIGHT_THIN,
3403            Self::Ultralight => ffi::PANGO_WEIGHT_ULTRALIGHT,
3404            Self::Light => ffi::PANGO_WEIGHT_LIGHT,
3405            Self::Semilight => ffi::PANGO_WEIGHT_SEMILIGHT,
3406            Self::Book => ffi::PANGO_WEIGHT_BOOK,
3407            Self::Normal => ffi::PANGO_WEIGHT_NORMAL,
3408            Self::Medium => ffi::PANGO_WEIGHT_MEDIUM,
3409            Self::Semibold => ffi::PANGO_WEIGHT_SEMIBOLD,
3410            Self::Bold => ffi::PANGO_WEIGHT_BOLD,
3411            Self::Ultrabold => ffi::PANGO_WEIGHT_ULTRABOLD,
3412            Self::Heavy => ffi::PANGO_WEIGHT_HEAVY,
3413            Self::Ultraheavy => ffi::PANGO_WEIGHT_ULTRAHEAVY,
3414            Self::__Unknown(value) => value,
3415        }
3416    }
3417}
3418
3419#[doc(hidden)]
3420impl FromGlib<ffi::PangoWeight> for Weight {
3421    #[inline]
3422    unsafe fn from_glib(value: ffi::PangoWeight) -> Self {
3423        match value {
3424            ffi::PANGO_WEIGHT_THIN => Self::Thin,
3425            ffi::PANGO_WEIGHT_ULTRALIGHT => Self::Ultralight,
3426            ffi::PANGO_WEIGHT_LIGHT => Self::Light,
3427            ffi::PANGO_WEIGHT_SEMILIGHT => Self::Semilight,
3428            ffi::PANGO_WEIGHT_BOOK => Self::Book,
3429            ffi::PANGO_WEIGHT_NORMAL => Self::Normal,
3430            ffi::PANGO_WEIGHT_MEDIUM => Self::Medium,
3431            ffi::PANGO_WEIGHT_SEMIBOLD => Self::Semibold,
3432            ffi::PANGO_WEIGHT_BOLD => Self::Bold,
3433            ffi::PANGO_WEIGHT_ULTRABOLD => Self::Ultrabold,
3434            ffi::PANGO_WEIGHT_HEAVY => Self::Heavy,
3435            ffi::PANGO_WEIGHT_ULTRAHEAVY => Self::Ultraheavy,
3436            value => Self::__Unknown(value),
3437        }
3438    }
3439}
3440
3441impl StaticType for Weight {
3442    #[inline]
3443    #[doc(alias = "pango_weight_get_type")]
3444    fn static_type() -> glib::Type {
3445        unsafe { from_glib(ffi::pango_weight_get_type()) }
3446    }
3447}
3448
3449impl glib::HasParamSpec for Weight {
3450    type ParamSpec = glib::ParamSpecEnum;
3451    type SetValue = Self;
3452    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3453
3454    fn param_spec_builder() -> Self::BuilderFn {
3455        Self::ParamSpec::builder_with_default
3456    }
3457}
3458
3459impl glib::value::ValueType for Weight {
3460    type Type = Self;
3461}
3462
3463unsafe impl<'a> glib::value::FromValue<'a> for Weight {
3464    type Checker = glib::value::GenericValueTypeChecker<Self>;
3465
3466    #[inline]
3467    unsafe fn from_value(value: &'a glib::Value) -> Self {
3468        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3469    }
3470}
3471
3472impl ToValue for Weight {
3473    #[inline]
3474    fn to_value(&self) -> glib::Value {
3475        let mut value = glib::Value::for_value_type::<Self>();
3476        unsafe {
3477            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3478        }
3479        value
3480    }
3481
3482    #[inline]
3483    fn value_type(&self) -> glib::Type {
3484        Self::static_type()
3485    }
3486}
3487
3488impl From<Weight> for glib::Value {
3489    #[inline]
3490    fn from(v: Weight) -> Self {
3491        ToValue::to_value(&v)
3492    }
3493}
3494
3495/// [`WrapMode`][crate::WrapMode] describes how to wrap the lines of a [`Layout`][crate::Layout]
3496/// to the desired width.
3497///
3498/// For @PANGO_WRAP_WORD, Pango uses break opportunities that are determined
3499/// by the Unicode line breaking algorithm. For @PANGO_WRAP_CHAR, Pango allows
3500/// breaking at grapheme boundaries that are determined by the Unicode text
3501/// segmentation algorithm.
3502#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3503#[non_exhaustive]
3504#[doc(alias = "PangoWrapMode")]
3505pub enum WrapMode {
3506    /// wrap lines at word boundaries.
3507    #[doc(alias = "PANGO_WRAP_WORD")]
3508    Word,
3509    /// wrap lines at character boundaries.
3510    #[doc(alias = "PANGO_WRAP_CHAR")]
3511    Char,
3512    /// wrap lines at word boundaries, but fall back to
3513    ///   character boundaries if there is not enough space for a full word.
3514    #[doc(alias = "PANGO_WRAP_WORD_CHAR")]
3515    WordChar,
3516    /// do not wrap.
3517    #[cfg(feature = "v1_56")]
3518    #[cfg_attr(docsrs, doc(cfg(feature = "v1_56")))]
3519    #[doc(alias = "PANGO_WRAP_NONE")]
3520    None,
3521    #[doc(hidden)]
3522    __Unknown(i32),
3523}
3524
3525#[doc(hidden)]
3526impl IntoGlib for WrapMode {
3527    type GlibType = ffi::PangoWrapMode;
3528
3529    #[inline]
3530    fn into_glib(self) -> ffi::PangoWrapMode {
3531        match self {
3532            Self::Word => ffi::PANGO_WRAP_WORD,
3533            Self::Char => ffi::PANGO_WRAP_CHAR,
3534            Self::WordChar => ffi::PANGO_WRAP_WORD_CHAR,
3535            #[cfg(feature = "v1_56")]
3536            Self::None => ffi::PANGO_WRAP_NONE,
3537            Self::__Unknown(value) => value,
3538        }
3539    }
3540}
3541
3542#[doc(hidden)]
3543impl FromGlib<ffi::PangoWrapMode> for WrapMode {
3544    #[inline]
3545    unsafe fn from_glib(value: ffi::PangoWrapMode) -> Self {
3546        match value {
3547            ffi::PANGO_WRAP_WORD => Self::Word,
3548            ffi::PANGO_WRAP_CHAR => Self::Char,
3549            ffi::PANGO_WRAP_WORD_CHAR => Self::WordChar,
3550            #[cfg(feature = "v1_56")]
3551            ffi::PANGO_WRAP_NONE => Self::None,
3552            value => Self::__Unknown(value),
3553        }
3554    }
3555}
3556
3557impl StaticType for WrapMode {
3558    #[inline]
3559    #[doc(alias = "pango_wrap_mode_get_type")]
3560    fn static_type() -> glib::Type {
3561        unsafe { from_glib(ffi::pango_wrap_mode_get_type()) }
3562    }
3563}
3564
3565impl glib::HasParamSpec for WrapMode {
3566    type ParamSpec = glib::ParamSpecEnum;
3567    type SetValue = Self;
3568    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3569
3570    fn param_spec_builder() -> Self::BuilderFn {
3571        Self::ParamSpec::builder_with_default
3572    }
3573}
3574
3575impl glib::value::ValueType for WrapMode {
3576    type Type = Self;
3577}
3578
3579unsafe impl<'a> glib::value::FromValue<'a> for WrapMode {
3580    type Checker = glib::value::GenericValueTypeChecker<Self>;
3581
3582    #[inline]
3583    unsafe fn from_value(value: &'a glib::Value) -> Self {
3584        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3585    }
3586}
3587
3588impl ToValue for WrapMode {
3589    #[inline]
3590    fn to_value(&self) -> glib::Value {
3591        let mut value = glib::Value::for_value_type::<Self>();
3592        unsafe {
3593            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3594        }
3595        value
3596    }
3597
3598    #[inline]
3599    fn value_type(&self) -> glib::Type {
3600        Self::static_type()
3601    }
3602}
3603
3604impl From<WrapMode> for glib::Value {
3605    #[inline]
3606    fn from(v: WrapMode) -> Self {
3607        ToValue::to_value(&v)
3608    }
3609}