pango/
coverage.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use std::{mem, ptr};
4
5use glib::translate::*;
6
7use crate::{ffi, CoverageLevel};
8
9#[cfg(feature = "v1_44")]
10glib::wrapper! {
11    /// A [`Coverage`][crate::Coverage] structure is a map from Unicode characters
12    /// to [`CoverageLevel`][crate::CoverageLevel] values.
13    ///
14    /// It is often necessary in Pango to determine if a particular
15    /// font can represent a particular character, and also how well
16    /// it can represent that character. The [`Coverage`][crate::Coverage] is a data
17    /// structure that is used to represent that information. It is an
18    /// opaque structure with no public fields.
19    #[doc(alias = "PangoCoverage")]
20    pub struct Coverage(Object<ffi::PangoCoverage>);
21
22    match fn {
23        type_ => || ffi::pango_coverage_get_type(),
24    }
25}
26
27// There was no get_type() function before 1.44
28#[cfg(not(feature = "v1_44"))]
29glib::wrapper! {
30    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
31    #[doc(alias = "PangoCoverage")]
32    pub struct Coverage(Shared<ffi::PangoCoverage>);
33
34    match fn {
35        ref => |ptr| ffi::pango_coverage_ref(ptr),
36        unref => |ptr| ffi::pango_coverage_unref(ptr),
37    }
38}
39
40impl Coverage {
41    /// Create a new [`Coverage`][crate::Coverage]
42    ///
43    /// # Returns
44    ///
45    /// the newly allocated [`Coverage`][crate::Coverage], initialized
46    ///   to [`CoverageLevel::None`][crate::CoverageLevel::None] with a reference count of one, which
47    ///   should be freed with `Pango::Coverage::unref()`.
48    #[doc(alias = "pango_coverage_new")]
49    pub fn new() -> Self {
50        unsafe { from_glib_full(ffi::pango_coverage_new()) }
51    }
52
53    #[doc(alias = "pango_coverage_copy")]
54    pub fn copy(&self) -> Option<Coverage> {
55        unsafe { from_glib_full(ffi::pango_coverage_copy(self.to_glib_none().0)) }
56    }
57
58    /// Determine whether a particular index is covered by @self.
59    /// ## `index_`
60    /// the index to check
61    ///
62    /// # Returns
63    ///
64    /// the coverage level of @self for character @index_.
65    #[doc(alias = "pango_coverage_get")]
66    pub fn get(&self, index_: i32) -> CoverageLevel {
67        unsafe { from_glib(ffi::pango_coverage_get(self.to_glib_none().0, index_)) }
68    }
69
70    /// Set the coverage for each index in @self to be the max (better)
71    /// value of the current coverage for the index and the coverage for
72    /// the corresponding index in @other.
73    ///
74    /// # Deprecated since 1.44
75    ///
76    /// This function does nothing
77    /// ## `other`
78    /// another [`Coverage`][crate::Coverage]
79    #[cfg_attr(feature = "v1_44", deprecated)]
80    #[doc(alias = "pango_coverage_max")]
81    pub fn max(&self, other: &Coverage) {
82        unsafe {
83            ffi::pango_coverage_max(self.to_glib_none().0, other.to_glib_none().0);
84        }
85    }
86
87    /// Modify a particular index within @self
88    /// ## `index_`
89    /// the index to modify
90    /// ## `level`
91    /// the new level for @index_
92    #[doc(alias = "pango_coverage_set")]
93    pub fn set(&self, index_: i32, level: CoverageLevel) {
94        unsafe {
95            ffi::pango_coverage_set(self.to_glib_none().0, index_, level.into_glib());
96        }
97    }
98
99    /// Convert a [`Coverage`][crate::Coverage] structure into a flat binary format.
100    ///
101    /// # Deprecated since 1.44
102    ///
103    /// This returns [`None`]
104    ///
105    /// # Returns
106    ///
107    ///
108    /// ## `bytes`
109    ///
110    ///   location to store result (must be freed with g_free())
111    #[cfg_attr(feature = "v1_44", deprecated)]
112    #[doc(alias = "pango_coverage_to_bytes")]
113    pub fn to_bytes(&self) -> Vec<u8> {
114        unsafe {
115            let mut bytes = ptr::null_mut();
116            let mut n_bytes = mem::MaybeUninit::uninit();
117            ffi::pango_coverage_to_bytes(self.to_glib_none().0, &mut bytes, n_bytes.as_mut_ptr());
118            FromGlibContainer::from_glib_full_num(bytes, n_bytes.assume_init() as usize)
119        }
120    }
121
122    /// Convert data generated from [`to_bytes()`][Self::to_bytes()]
123    /// back to a [`Coverage`][crate::Coverage].
124    ///
125    /// # Deprecated since 1.44
126    ///
127    /// This returns [`None`]
128    /// ## `bytes`
129    /// binary data
130    ///   representing a [`Coverage`][crate::Coverage]
131    ///
132    /// # Returns
133    ///
134    /// a newly allocated [`Coverage`][crate::Coverage]
135    #[cfg_attr(feature = "v1_44", deprecated)]
136    #[doc(alias = "pango_coverage_from_bytes")]
137    pub fn from_bytes(bytes: &[u8]) -> Option<Coverage> {
138        let n_bytes = bytes.len() as i32;
139        unsafe {
140            from_glib_full(ffi::pango_coverage_from_bytes(
141                bytes.to_glib_none().0,
142                n_bytes,
143            ))
144        }
145    }
146}
147
148impl Default for Coverage {
149    fn default() -> Self {
150        Self::new()
151    }
152}