cairo/font/
font_extents.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use crate::ffi;
4use std::fmt;
5
6#[derive(Clone, Copy)]
7#[repr(transparent)]
8#[doc(alias = "cairo_font_extents_t")]
9pub struct FontExtents(ffi::cairo_font_extents_t);
10
11impl FontExtents {
12    pub fn ascent(&self) -> f64 {
13        self.0.ascent
14    }
15
16    pub fn descent(&self) -> f64 {
17        self.0.descent
18    }
19
20    pub fn height(&self) -> f64 {
21        self.0.height
22    }
23
24    pub fn max_x_advance(&self) -> f64 {
25        self.0.max_x_advance
26    }
27
28    pub fn max_y_advance(&self) -> f64 {
29        self.0.max_y_advance
30    }
31
32    pub fn set_ascent(&mut self, ascent: f64) {
33        self.0.ascent = ascent;
34    }
35
36    pub fn set_descent(&mut self, descent: f64) {
37        self.0.descent = descent;
38    }
39
40    pub fn set_height(&mut self, height: f64) {
41        self.0.height = height;
42    }
43
44    pub fn set_max_x_advance(&mut self, max_x_advance: f64) {
45        self.0.max_x_advance = max_x_advance;
46    }
47
48    pub fn set_max_y_advance(&mut self, max_y_advance: f64) {
49        self.0.max_y_advance = max_y_advance;
50    }
51}
52
53impl fmt::Debug for FontExtents {
54    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55        f.debug_struct("FontExtents")
56            .field("ascent", &self.ascent())
57            .field("descent", &self.descent())
58            .field("height", &self.height())
59            .field("max_x_advance", &self.max_x_advance())
60            .field("max_y_advance", &self.max_y_advance())
61            .finish()
62    }
63}
64
65#[doc(hidden)]
66impl From<FontExtents> for ffi::cairo_font_extents_t {
67    fn from(val: FontExtents) -> ffi::cairo_font_extents_t {
68        val.0
69    }
70}
71
72#[doc(hidden)]
73impl From<ffi::cairo_font_extents_t> for FontExtents {
74    fn from(value: ffi::cairo_font_extents_t) -> Self {
75        Self(value)
76    }
77}