1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use crate::RenderNodeType;
use glib::translate::*;
use glib::StaticType;
use std::fmt;
use std::ptr;
glib::wrapper! {
#[doc(alias = "GskRenderNode")]
pub struct RenderNode(Shared<ffi::GskRenderNode>);
match fn {
ref => |ptr| ffi::gsk_render_node_ref(ptr),
unref => |ptr| ffi::gsk_render_node_unref(ptr),
}
}
impl glib::StaticType for RenderNode {
fn static_type() -> glib::Type {
unsafe { from_glib(ffi::gsk_render_node_get_type()) }
}
}
impl RenderNode {
pub const NONE: Option<&'static RenderNode> = None;
#[doc(alias = "gsk_render_node_draw")]
pub fn draw(&self, cr: &cairo::Context) {
unsafe {
ffi::gsk_render_node_draw(
self.as_ref().to_glib_none().0,
mut_override(cr.to_glib_none().0),
);
}
}
#[doc(alias = "gsk_render_node_get_bounds")]
#[doc(alias = "get_bounds")]
pub fn bounds(&self) -> graphene::Rect {
unsafe {
let mut bounds = graphene::Rect::uninitialized();
ffi::gsk_render_node_get_bounds(
self.as_ref().to_glib_none().0,
bounds.to_glib_none_mut().0,
);
bounds
}
}
#[doc(alias = "gsk_render_node_get_node_type")]
#[doc(alias = "get_node_type")]
pub fn node_type(&self) -> RenderNodeType {
unsafe {
from_glib(ffi::gsk_render_node_get_node_type(const_override(
self.as_ref().to_glib_none().0,
)))
}
}
#[doc(alias = "gsk_render_node_serialize")]
pub fn serialize(&self) -> glib::Bytes {
unsafe {
from_glib_full(ffi::gsk_render_node_serialize(
self.as_ref().to_glib_none().0,
))
}
}
#[doc(alias = "gsk_render_node_write_to_file")]
pub fn write_to_file(&self, filename: impl AsRef<std::path::Path>) -> Result<(), glib::Error> {
unsafe {
let mut error = ptr::null_mut();
let is_ok = ffi::gsk_render_node_write_to_file(
self.as_ref().to_glib_none().0,
filename.as_ref().to_glib_none().0,
&mut error,
);
assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
}
impl fmt::Display for RenderNode {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("RenderNode")
}
}