1use crate::{
6 ffi, Direction, Font, FontDescription, FontFamily, FontMap, FontMetrics, Fontset, Gravity,
7 GravityHint, Language, Matrix,
8};
9use glib::{prelude::*, translate::*};
10
11glib::wrapper! {
12 #[doc(alias = "PangoContext")]
13 pub struct Context(Object<ffi::PangoContext, ffi::PangoContextClass>);
14
15 match fn {
16 type_ => || ffi::pango_context_get_type(),
17 }
18}
19
20impl Context {
21 #[doc(alias = "pango_context_new")]
22 pub fn new() -> Context {
23 unsafe { from_glib_full(ffi::pango_context_new()) }
24 }
25
26 #[doc(alias = "pango_context_changed")]
27 pub fn changed(&self) {
28 unsafe {
29 ffi::pango_context_changed(self.to_glib_none().0);
30 }
31 }
32
33 #[doc(alias = "pango_context_get_base_dir")]
34 #[doc(alias = "get_base_dir")]
35 pub fn base_dir(&self) -> Direction {
36 unsafe { from_glib(ffi::pango_context_get_base_dir(self.to_glib_none().0)) }
37 }
38
39 #[doc(alias = "pango_context_get_base_gravity")]
40 #[doc(alias = "get_base_gravity")]
41 pub fn base_gravity(&self) -> Gravity {
42 unsafe { from_glib(ffi::pango_context_get_base_gravity(self.to_glib_none().0)) }
43 }
44
45 #[doc(alias = "pango_context_get_font_description")]
46 #[doc(alias = "get_font_description")]
47 pub fn font_description(&self) -> Option<FontDescription> {
48 unsafe {
49 from_glib_none(ffi::pango_context_get_font_description(
50 self.to_glib_none().0,
51 ))
52 }
53 }
54
55 #[doc(alias = "pango_context_get_font_map")]
56 #[doc(alias = "get_font_map")]
57 pub fn font_map(&self) -> Option<FontMap> {
58 unsafe { from_glib_none(ffi::pango_context_get_font_map(self.to_glib_none().0)) }
59 }
60
61 #[doc(alias = "pango_context_get_gravity")]
62 #[doc(alias = "get_gravity")]
63 pub fn gravity(&self) -> Gravity {
64 unsafe { from_glib(ffi::pango_context_get_gravity(self.to_glib_none().0)) }
65 }
66
67 #[doc(alias = "pango_context_get_gravity_hint")]
68 #[doc(alias = "get_gravity_hint")]
69 pub fn gravity_hint(&self) -> GravityHint {
70 unsafe { from_glib(ffi::pango_context_get_gravity_hint(self.to_glib_none().0)) }
71 }
72
73 #[doc(alias = "pango_context_get_language")]
74 #[doc(alias = "get_language")]
75 pub fn language(&self) -> Option<Language> {
76 unsafe { from_glib_none(ffi::pango_context_get_language(self.to_glib_none().0)) }
77 }
78
79 #[doc(alias = "pango_context_get_matrix")]
80 #[doc(alias = "get_matrix")]
81 pub fn matrix(&self) -> Option<Matrix> {
82 unsafe { from_glib_none(ffi::pango_context_get_matrix(self.to_glib_none().0)) }
83 }
84
85 #[doc(alias = "pango_context_get_metrics")]
86 #[doc(alias = "get_metrics")]
87 pub fn metrics(
88 &self,
89 desc: Option<&FontDescription>,
90 language: Option<&Language>,
91 ) -> FontMetrics {
92 unsafe {
93 from_glib_full(ffi::pango_context_get_metrics(
94 self.to_glib_none().0,
95 desc.to_glib_none().0,
96 mut_override(language.to_glib_none().0),
97 ))
98 }
99 }
100
101 #[cfg(feature = "v1_44")]
102 #[cfg_attr(docsrs, doc(cfg(feature = "v1_44")))]
103 #[doc(alias = "pango_context_get_round_glyph_positions")]
104 #[doc(alias = "get_round_glyph_positions")]
105 pub fn is_round_glyph_positions(&self) -> bool {
106 unsafe {
107 from_glib(ffi::pango_context_get_round_glyph_positions(
108 self.to_glib_none().0,
109 ))
110 }
111 }
112
113 #[doc(alias = "pango_context_get_serial")]
114 #[doc(alias = "get_serial")]
115 pub fn serial(&self) -> u32 {
116 unsafe { ffi::pango_context_get_serial(self.to_glib_none().0) }
117 }
118
119 #[doc(alias = "pango_context_list_families")]
120 pub fn list_families(&self) -> Vec<FontFamily> {
121 unsafe {
122 let mut families = std::ptr::null_mut();
123 let mut n_families = std::mem::MaybeUninit::uninit();
124 ffi::pango_context_list_families(
125 self.to_glib_none().0,
126 &mut families,
127 n_families.as_mut_ptr(),
128 );
129 FromGlibContainer::from_glib_container_num(families, n_families.assume_init() as _)
130 }
131 }
132
133 #[doc(alias = "pango_context_load_font")]
134 pub fn load_font(&self, desc: &FontDescription) -> Option<Font> {
135 unsafe {
136 from_glib_full(ffi::pango_context_load_font(
137 self.to_glib_none().0,
138 desc.to_glib_none().0,
139 ))
140 }
141 }
142
143 #[doc(alias = "pango_context_load_fontset")]
144 pub fn load_fontset(&self, desc: &FontDescription, language: &Language) -> Option<Fontset> {
145 unsafe {
146 from_glib_full(ffi::pango_context_load_fontset(
147 self.to_glib_none().0,
148 desc.to_glib_none().0,
149 mut_override(language.to_glib_none().0),
150 ))
151 }
152 }
153
154 #[doc(alias = "pango_context_set_base_dir")]
155 pub fn set_base_dir(&self, direction: Direction) {
156 unsafe {
157 ffi::pango_context_set_base_dir(self.to_glib_none().0, direction.into_glib());
158 }
159 }
160
161 #[doc(alias = "pango_context_set_base_gravity")]
162 pub fn set_base_gravity(&self, gravity: Gravity) {
163 unsafe {
164 ffi::pango_context_set_base_gravity(self.to_glib_none().0, gravity.into_glib());
165 }
166 }
167
168 #[doc(alias = "pango_context_set_font_description")]
169 pub fn set_font_description(&self, desc: Option<&FontDescription>) {
170 unsafe {
171 ffi::pango_context_set_font_description(self.to_glib_none().0, desc.to_glib_none().0);
172 }
173 }
174
175 #[doc(alias = "pango_context_set_font_map")]
176 pub fn set_font_map(&self, font_map: Option<&impl IsA<FontMap>>) {
177 unsafe {
178 ffi::pango_context_set_font_map(
179 self.to_glib_none().0,
180 font_map.map(|p| p.as_ref()).to_glib_none().0,
181 );
182 }
183 }
184
185 #[doc(alias = "pango_context_set_gravity_hint")]
186 pub fn set_gravity_hint(&self, hint: GravityHint) {
187 unsafe {
188 ffi::pango_context_set_gravity_hint(self.to_glib_none().0, hint.into_glib());
189 }
190 }
191
192 #[doc(alias = "pango_context_set_language")]
193 pub fn set_language(&self, language: Option<&Language>) {
194 unsafe {
195 ffi::pango_context_set_language(
196 self.to_glib_none().0,
197 mut_override(language.to_glib_none().0),
198 );
199 }
200 }
201
202 #[doc(alias = "pango_context_set_matrix")]
203 pub fn set_matrix(&self, matrix: Option<&Matrix>) {
204 unsafe {
205 ffi::pango_context_set_matrix(self.to_glib_none().0, matrix.to_glib_none().0);
206 }
207 }
208
209 #[cfg(feature = "v1_44")]
210 #[cfg_attr(docsrs, doc(cfg(feature = "v1_44")))]
211 #[doc(alias = "pango_context_set_round_glyph_positions")]
212 pub fn set_round_glyph_positions(&self, round_positions: bool) {
213 unsafe {
214 ffi::pango_context_set_round_glyph_positions(
215 self.to_glib_none().0,
216 round_positions.into_glib(),
217 );
218 }
219 }
220}
221
222impl Default for Context {
223 fn default() -> Self {
224 Self::new()
225 }
226}