1use crate::ffi;
6use glib::{prelude::*, translate::*};
7
8glib::wrapper! {
9 #[doc(alias = "GskTextNode")]
10 pub struct TextNode(Shared<ffi::GskTextNode>);
11
12 match fn {
13 ref => |ptr| ffi::gsk_render_node_ref(ptr as *mut ffi::GskRenderNode),
14 unref => |ptr| ffi::gsk_render_node_unref(ptr as *mut ffi::GskRenderNode),
15 }
16}
17
18impl StaticType for TextNode {
19 fn static_type() -> glib::Type {
20 unsafe { from_glib(ffi::gsk_text_node_get_type()) }
21 }
22}
23
24impl TextNode {
25 #[doc(alias = "gsk_text_node_new")]
26 pub fn new(
27 font: &impl IsA<pango::Font>,
28 glyphs: &pango::GlyphString,
29 color: &gdk::RGBA,
30 offset: &graphene::Point,
31 ) -> Option<TextNode> {
32 assert_initialized_main_thread!();
33 unsafe {
34 from_glib_full(ffi::gsk_text_node_new(
35 font.as_ref().to_glib_none().0,
36 mut_override(glyphs.to_glib_none().0),
37 color.to_glib_none().0,
38 offset.to_glib_none().0,
39 ))
40 }
41 }
42
43 #[doc(alias = "gsk_text_node_get_color")]
44 #[doc(alias = "get_color")]
45 pub fn color(&self) -> gdk::RGBA {
46 unsafe { from_glib_none(ffi::gsk_text_node_get_color(self.to_glib_none().0)) }
47 }
48
49 #[doc(alias = "gsk_text_node_get_font")]
50 #[doc(alias = "get_font")]
51 pub fn font(&self) -> pango::Font {
52 unsafe { from_glib_none(ffi::gsk_text_node_get_font(self.to_glib_none().0)) }
53 }
54
55 #[doc(alias = "gsk_text_node_get_glyphs")]
56 #[doc(alias = "get_glyphs")]
57 pub fn glyphs(&self) -> Vec<pango::GlyphInfo> {
58 unsafe {
59 let mut n_glyphs = std::mem::MaybeUninit::uninit();
60 let ret = FromGlibContainer::from_glib_none_num(
61 ffi::gsk_text_node_get_glyphs(self.to_glib_none().0, n_glyphs.as_mut_ptr()),
62 n_glyphs.assume_init() as _,
63 );
64 ret
65 }
66 }
67
68 #[doc(alias = "gsk_text_node_get_num_glyphs")]
69 #[doc(alias = "get_num_glyphs")]
70 pub fn num_glyphs(&self) -> u32 {
71 unsafe { ffi::gsk_text_node_get_num_glyphs(self.to_glib_none().0) }
72 }
73
74 #[doc(alias = "gsk_text_node_get_offset")]
75 #[doc(alias = "get_offset")]
76 pub fn offset(&self) -> graphene::Point {
77 unsafe { from_glib_none(ffi::gsk_text_node_get_offset(self.to_glib_none().0)) }
78 }
79
80 #[cfg(feature = "v4_2")]
81 #[cfg_attr(docsrs, doc(cfg(feature = "v4_2")))]
82 #[doc(alias = "gsk_text_node_has_color_glyphs")]
83 pub fn has_color_glyphs(&self) -> bool {
84 unsafe { from_glib(ffi::gsk_text_node_has_color_glyphs(self.to_glib_none().0)) }
85 }
86}