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}