Skip to main content

gsk4/auto/
render_node.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::{RenderNodeType, ffi};
6use glib::{prelude::*, translate::*};
7
8glib::wrapper! {
9    #[doc(alias = "GskRenderNode")]
10    pub struct RenderNode(Shared<ffi::GskRenderNode>);
11
12    match fn {
13        ref => |ptr| ffi::gsk_render_node_ref(ptr),
14        unref => |ptr| ffi::gsk_render_node_unref(ptr),
15    }
16}
17
18impl StaticType for RenderNode {
19    fn static_type() -> glib::Type {
20        unsafe { from_glib(ffi::gsk_render_node_get_type()) }
21    }
22}
23
24impl RenderNode {
25    pub const NONE: Option<&'static RenderNode> = None;
26
27    #[doc(alias = "gsk_render_node_draw")]
28    pub fn draw(&self, cr: &cairo::Context) {
29        unsafe {
30            ffi::gsk_render_node_draw(
31                self.as_ref().to_glib_none().0,
32                mut_override(cr.to_glib_none().0),
33            );
34        }
35    }
36
37    #[doc(alias = "gsk_render_node_get_bounds")]
38    #[doc(alias = "get_bounds")]
39    pub fn bounds(&self) -> graphene::Rect {
40        unsafe {
41            let mut bounds = graphene::Rect::uninitialized();
42            ffi::gsk_render_node_get_bounds(
43                self.as_ref().to_glib_none().0,
44                bounds.to_glib_none_mut().0,
45            );
46            bounds
47        }
48    }
49
50    #[cfg(feature = "v4_22")]
51    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
52    #[doc(alias = "gsk_render_node_get_children")]
53    #[doc(alias = "get_children")]
54    pub fn children(&self) -> Vec<RenderNode> {
55        unsafe {
56            let mut n_children = std::mem::MaybeUninit::uninit();
57            let ret = FromGlibContainer::from_glib_none_num(
58                ffi::gsk_render_node_get_children(
59                    self.as_ref().to_glib_none().0,
60                    n_children.as_mut_ptr(),
61                ),
62                n_children.assume_init() as _,
63            );
64            ret
65        }
66    }
67
68    #[doc(alias = "gsk_render_node_get_node_type")]
69    #[doc(alias = "get_node_type")]
70    pub fn node_type(&self) -> RenderNodeType {
71        unsafe {
72            from_glib(ffi::gsk_render_node_get_node_type(const_override(
73                self.as_ref().to_glib_none().0,
74            )))
75        }
76    }
77
78    #[cfg(feature = "v4_16")]
79    #[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
80    #[doc(alias = "gsk_render_node_get_opaque_rect")]
81    #[doc(alias = "get_opaque_rect")]
82    pub fn opaque_rect(&self) -> Option<graphene::Rect> {
83        unsafe {
84            let mut out_opaque = graphene::Rect::uninitialized();
85            let ret = from_glib(ffi::gsk_render_node_get_opaque_rect(
86                self.as_ref().to_glib_none().0,
87                out_opaque.to_glib_none_mut().0,
88            ));
89            if ret { Some(out_opaque) } else { None }
90        }
91    }
92
93    #[doc(alias = "gsk_render_node_serialize")]
94    pub fn serialize(&self) -> glib::Bytes {
95        unsafe {
96            from_glib_full(ffi::gsk_render_node_serialize(
97                self.as_ref().to_glib_none().0,
98            ))
99        }
100    }
101
102    #[doc(alias = "gsk_render_node_write_to_file")]
103    pub fn write_to_file(&self, filename: impl AsRef<std::path::Path>) -> Result<(), glib::Error> {
104        unsafe {
105            let mut error = std::ptr::null_mut();
106            let is_ok = ffi::gsk_render_node_write_to_file(
107                self.as_ref().to_glib_none().0,
108                filename.as_ref().to_glib_none().0,
109                &mut error,
110            );
111            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
112            if error.is_null() {
113                Ok(())
114            } else {
115                Err(from_glib_full(error))
116            }
117        }
118    }
119}