pango/auto/font_family.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, FontFace};
6#[cfg(feature = "v1_52")]
7#[cfg_attr(docsrs, doc(cfg(feature = "v1_52")))]
8use glib::signal::{connect_raw, SignalHandlerId};
9use glib::{prelude::*, translate::*};
10#[cfg(feature = "v1_52")]
11#[cfg_attr(docsrs, doc(cfg(feature = "v1_52")))]
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15 /// A [`FontFamily`][crate::FontFamily] is used to represent a family of related
16 /// font faces.
17 ///
18 /// The font faces in a family share a common design, but differ in
19 /// slant, weight, width or other aspects.
20 ///
21 /// This is an Abstract Base Class, you cannot instantiate it.
22 ///
23 /// ## Properties
24 ///
25 ///
26 /// #### `is-monospace`
27 /// Is this a monospace font
28 ///
29 /// Readable
30 ///
31 ///
32 /// #### `is-variable`
33 /// Is this a variable font
34 ///
35 /// Readable
36 ///
37 ///
38 /// #### `item-type`
39 /// The type of items contained in this list.
40 ///
41 /// Readable
42 ///
43 ///
44 /// #### `n-items`
45 /// The number of items contained in this list.
46 ///
47 /// Readable
48 ///
49 ///
50 /// #### `name`
51 /// The name of the family
52 ///
53 /// Readable
54 ///
55 /// # Implements
56 ///
57 /// [`FontFamilyExt`][trait@crate::prelude::FontFamilyExt], [`trait@gio::prelude::ListModelExt`]
58 #[doc(alias = "PangoFontFamily")]
59 pub struct FontFamily(Object<ffi::PangoFontFamily, ffi::PangoFontFamilyClass>) @implements gio::ListModel;
60
61 match fn {
62 type_ => || ffi::pango_font_family_get_type(),
63 }
64}
65
66impl FontFamily {
67 pub const NONE: Option<&'static FontFamily> = None;
68}
69
70impl std::fmt::Display for FontFamily {
71 #[inline]
72 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
73 f.write_str(&FontFamilyExt::name(self))
74 }
75}
76
77/// Trait containing all [`struct@FontFamily`] methods.
78///
79/// # Implementors
80///
81/// [`FontFamily`][struct@crate::FontFamily]
82pub trait FontFamilyExt: IsA<FontFamily> + 'static {
83 /// Gets the [`FontFace`][crate::FontFace] of @self with the given name.
84 /// ## `name`
85 /// the name of a face. If the name is [`None`],
86 /// the family's default face (fontconfig calls it "Regular")
87 /// will be returned.
88 ///
89 /// # Returns
90 ///
91 /// the [`FontFace`][crate::FontFace],
92 /// or [`None`] if no face with the given name exists.
93 #[cfg(feature = "v1_46")]
94 #[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
95 #[doc(alias = "pango_font_family_get_face")]
96 #[doc(alias = "get_face")]
97 fn face(&self, name: Option<&str>) -> Option<FontFace> {
98 unsafe {
99 from_glib_none(ffi::pango_font_family_get_face(
100 self.as_ref().to_glib_none().0,
101 name.to_glib_none().0,
102 ))
103 }
104 }
105
106 /// Gets the name of the family.
107 ///
108 /// The name is unique among all fonts for the font backend and can
109 /// be used in a [`FontDescription`][crate::FontDescription] to specify that a face from
110 /// this family is desired.
111 ///
112 /// # Returns
113 ///
114 /// the name of the family. This string is owned
115 /// by the family object and must not be modified or freed.
116 #[doc(alias = "pango_font_family_get_name")]
117 #[doc(alias = "get_name")]
118 fn name(&self) -> glib::GString {
119 unsafe {
120 from_glib_none(ffi::pango_font_family_get_name(
121 self.as_ref().to_glib_none().0,
122 ))
123 }
124 }
125
126 /// A monospace font is a font designed for text display where the the
127 /// characters form a regular grid.
128 ///
129 /// For Western languages this would
130 /// mean that the advance width of all characters are the same, but
131 /// this categorization also includes Asian fonts which include
132 /// double-width characters: characters that occupy two grid cells.
133 /// g_unichar_iswide() returns a result that indicates whether a
134 /// character is typically double-width in a monospace font.
135 ///
136 /// The best way to find out the grid-cell size is to call
137 /// [`FontMetrics::approximate_digit_width()`][crate::FontMetrics::approximate_digit_width()], since the
138 /// results of [`FontMetrics::approximate_char_width()`][crate::FontMetrics::approximate_char_width()] may
139 /// be affected by double-width characters.
140 ///
141 /// # Returns
142 ///
143 /// [`true`] if the family is monospace.
144 #[doc(alias = "pango_font_family_is_monospace")]
145 #[doc(alias = "is-monospace")]
146 fn is_monospace(&self) -> bool {
147 unsafe {
148 from_glib(ffi::pango_font_family_is_monospace(
149 self.as_ref().to_glib_none().0,
150 ))
151 }
152 }
153
154 /// A variable font is a font which has axes that can be modified to
155 /// produce different faces.
156 ///
157 /// Such axes are also known as _variations_; see
158 /// [`FontDescription::set_variations()`][crate::FontDescription::set_variations()] for more information.
159 ///
160 /// # Returns
161 ///
162 /// [`true`] if the family is variable
163 #[cfg(feature = "v1_44")]
164 #[cfg_attr(docsrs, doc(cfg(feature = "v1_44")))]
165 #[doc(alias = "pango_font_family_is_variable")]
166 #[doc(alias = "is-variable")]
167 fn is_variable(&self) -> bool {
168 unsafe {
169 from_glib(ffi::pango_font_family_is_variable(
170 self.as_ref().to_glib_none().0,
171 ))
172 }
173 }
174
175 /// Lists the different font faces that make up @self.
176 ///
177 /// The faces in a family share a common design, but differ in slant, weight,
178 /// width and other aspects.
179 ///
180 /// Note that the returned faces are not in any particular order, and
181 /// multiple faces may have the same name or characteristics.
182 ///
183 /// [`FontFamily`][crate::FontFamily] also implemented the [`gio::ListModel`][crate::gio::ListModel] interface
184 /// for enumerating faces.
185 ///
186 /// # Returns
187 ///
188 ///
189 /// ## `faces`
190 ///
191 /// location to store an array of pointers to [`FontFace`][crate::FontFace] objects,
192 /// or [`None`]. This array should be freed with g_free() when it is no
193 /// longer needed.
194 #[doc(alias = "pango_font_family_list_faces")]
195 fn list_faces(&self) -> Vec<FontFace> {
196 unsafe {
197 let mut faces = std::ptr::null_mut();
198 let mut n_faces = std::mem::MaybeUninit::uninit();
199 ffi::pango_font_family_list_faces(
200 self.as_ref().to_glib_none().0,
201 &mut faces,
202 n_faces.as_mut_ptr(),
203 );
204 FromGlibContainer::from_glib_container_num(faces, n_faces.assume_init() as _)
205 }
206 }
207
208 #[cfg(feature = "v1_52")]
209 #[cfg_attr(docsrs, doc(cfg(feature = "v1_52")))]
210 #[doc(alias = "is-monospace")]
211 fn connect_is_monospace_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
212 unsafe extern "C" fn notify_is_monospace_trampoline<
213 P: IsA<FontFamily>,
214 F: Fn(&P) + 'static,
215 >(
216 this: *mut ffi::PangoFontFamily,
217 _param_spec: glib::ffi::gpointer,
218 f: glib::ffi::gpointer,
219 ) {
220 let f: &F = &*(f as *const F);
221 f(FontFamily::from_glib_borrow(this).unsafe_cast_ref())
222 }
223 unsafe {
224 let f: Box_<F> = Box_::new(f);
225 connect_raw(
226 self.as_ptr() as *mut _,
227 c"notify::is-monospace".as_ptr() as *const _,
228 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
229 notify_is_monospace_trampoline::<Self, F> as *const (),
230 )),
231 Box_::into_raw(f),
232 )
233 }
234 }
235
236 #[cfg(feature = "v1_52")]
237 #[cfg_attr(docsrs, doc(cfg(feature = "v1_52")))]
238 #[doc(alias = "is-variable")]
239 fn connect_is_variable_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
240 unsafe extern "C" fn notify_is_variable_trampoline<
241 P: IsA<FontFamily>,
242 F: Fn(&P) + 'static,
243 >(
244 this: *mut ffi::PangoFontFamily,
245 _param_spec: glib::ffi::gpointer,
246 f: glib::ffi::gpointer,
247 ) {
248 let f: &F = &*(f as *const F);
249 f(FontFamily::from_glib_borrow(this).unsafe_cast_ref())
250 }
251 unsafe {
252 let f: Box_<F> = Box_::new(f);
253 connect_raw(
254 self.as_ptr() as *mut _,
255 c"notify::is-variable".as_ptr() as *const _,
256 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
257 notify_is_variable_trampoline::<Self, F> as *const (),
258 )),
259 Box_::into_raw(f),
260 )
261 }
262 }
263
264 #[cfg(feature = "v1_52")]
265 #[cfg_attr(docsrs, doc(cfg(feature = "v1_52")))]
266 #[doc(alias = "name")]
267 fn connect_name_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
268 unsafe extern "C" fn notify_name_trampoline<P: IsA<FontFamily>, F: Fn(&P) + 'static>(
269 this: *mut ffi::PangoFontFamily,
270 _param_spec: glib::ffi::gpointer,
271 f: glib::ffi::gpointer,
272 ) {
273 let f: &F = &*(f as *const F);
274 f(FontFamily::from_glib_borrow(this).unsafe_cast_ref())
275 }
276 unsafe {
277 let f: Box_<F> = Box_::new(f);
278 connect_raw(
279 self.as_ptr() as *mut _,
280 c"notify::name".as_ptr() as *const _,
281 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
282 notify_name_trampoline::<Self, F> as *const (),
283 )),
284 Box_::into_raw(f),
285 )
286 }
287 }
288}
289
290impl<O: IsA<FontFamily>> FontFamilyExt for O {}