Skip to content

Commit 52c17e6

Browse files
committed
Add gsk::RenderReplay bindings manually
Generated by temporarily adding glib:get-type to the gir file, moving he generated file to src and modifying the glib::wrapper macro.
1 parent 54be5cb commit 52c17e6

File tree

3 files changed

+267
-0
lines changed

3 files changed

+267
-0
lines changed

gsk4/Gir.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,10 @@ status = "generate"
230230
name = "cr"
231231
const = true
232232

233+
[[object]]
234+
name = "Gsk.RenderReplay"
235+
status = "manual"
236+
233237
[[object]]
234238
name = "Gsk.RoundedRect"
235239
status = "manual"

gsk4/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ mod path_builder;
8484
#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
8585
mod path_point;
8686
mod radial_gradient_node;
87+
#[cfg(feature = "v4_22")]
88+
#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
89+
mod render_replay;
8790
mod repeat_node;
8891
mod repeating_linear_gradient_node;
8992
mod repeating_radial_gradient_node;
@@ -109,5 +112,8 @@ pub use color_stop::ColorStop;
109112
#[cfg_attr(feature = "v4_4", deprecated = "Since 4.4")]
110113
pub use ngl_renderer::NglRenderer;
111114
pub use parse_location::ParseLocation;
115+
#[cfg(feature = "v4_22")]
116+
#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
117+
pub use render_replay::RenderReplay;
112118
pub use rounded_rect::RoundedRect;
113119
pub use shadow::Shadow;

gsk4/src/render_replay.rs

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
1+
// Take a look at the license at the top of the repository in the LICENSE file.
2+
3+
use crate::{ffi, RenderNode};
4+
use glib::{prelude::*, translate::*};
5+
use std::boxed::Box as Box_;
6+
7+
glib::wrapper! {
8+
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
9+
pub struct RenderReplay(Boxed<ffi::GskRenderReplay>);
10+
11+
match fn {
12+
free => |ptr| ffi::gsk_render_replay_free(ptr),
13+
}
14+
}
15+
16+
impl RenderReplay {
17+
#[doc(alias = "gsk_render_replay_default")]
18+
#[allow(clippy::should_implement_trait)]
19+
pub fn default(&mut self, node: impl AsRef<RenderNode>) -> Option<RenderNode> {
20+
unsafe {
21+
from_glib_full(ffi::gsk_render_replay_default(
22+
self.to_glib_none_mut().0,
23+
node.as_ref().to_glib_none().0,
24+
))
25+
}
26+
}
27+
28+
#[doc(alias = "gsk_render_replay_filter_font")]
29+
pub fn filter_font(&mut self, font: &impl IsA<pango::Font>) -> pango::Font {
30+
unsafe {
31+
from_glib_full(ffi::gsk_render_replay_filter_font(
32+
self.to_glib_none_mut().0,
33+
font.as_ref().to_glib_none().0,
34+
))
35+
}
36+
}
37+
38+
#[doc(alias = "gsk_render_replay_filter_node")]
39+
pub fn filter_node(&mut self, node: impl AsRef<RenderNode>) -> Option<RenderNode> {
40+
unsafe {
41+
from_glib_full(ffi::gsk_render_replay_filter_node(
42+
self.to_glib_none_mut().0,
43+
node.as_ref().to_glib_none().0,
44+
))
45+
}
46+
}
47+
48+
#[doc(alias = "gsk_render_replay_filter_texture")]
49+
pub fn filter_texture(&mut self, texture: &impl IsA<gdk::Texture>) -> gdk::Texture {
50+
unsafe {
51+
from_glib_full(ffi::gsk_render_replay_filter_texture(
52+
self.to_glib_none_mut().0,
53+
texture.as_ref().to_glib_none().0,
54+
))
55+
}
56+
}
57+
58+
#[doc(alias = "gsk_render_replay_foreach_node")]
59+
pub fn foreach_node(&mut self, node: impl AsRef<RenderNode>) {
60+
unsafe {
61+
ffi::gsk_render_replay_foreach_node(
62+
self.to_glib_none_mut().0,
63+
node.as_ref().to_glib_none().0,
64+
);
65+
}
66+
}
67+
68+
#[doc(alias = "gsk_render_replay_set_font_filter")]
69+
pub fn set_font_filter(
70+
&mut self,
71+
filter: Option<Box_<dyn Fn(&RenderReplay, &pango::Font) -> pango::Font + 'static>>,
72+
) {
73+
let filter_data: Box_<
74+
Option<Box_<dyn Fn(&RenderReplay, &pango::Font) -> pango::Font + 'static>>,
75+
> = Box_::new(filter);
76+
unsafe extern "C" fn filter_func(
77+
replay: *mut ffi::GskRenderReplay,
78+
font: *mut pango::ffi::PangoFont,
79+
user_data: glib::ffi::gpointer,
80+
) -> *mut pango::ffi::PangoFont {
81+
let replay = from_glib_borrow(replay);
82+
let font = from_glib_borrow(font);
83+
let callback = &*(user_data
84+
as *mut Option<Box_<dyn Fn(&RenderReplay, &pango::Font) -> pango::Font + 'static>>);
85+
if let Some(ref callback) = *callback {
86+
callback(&replay, &font)
87+
} else {
88+
panic!("cannot get closure...")
89+
}
90+
.to_glib_full()
91+
}
92+
let filter = if filter_data.is_some() {
93+
Some(filter_func as _)
94+
} else {
95+
None
96+
};
97+
unsafe extern "C" fn user_destroy_func(data: glib::ffi::gpointer) {
98+
let _callback = Box_::from_raw(
99+
data as *mut Option<
100+
Box_<dyn Fn(&RenderReplay, &pango::Font) -> pango::Font + 'static>,
101+
>,
102+
);
103+
}
104+
let destroy_call3 = Some(user_destroy_func as _);
105+
let super_callback0: Box_<
106+
Option<Box_<dyn Fn(&RenderReplay, &pango::Font) -> pango::Font + 'static>>,
107+
> = filter_data;
108+
unsafe {
109+
ffi::gsk_render_replay_set_font_filter(
110+
self.to_glib_none_mut().0,
111+
filter,
112+
Box_::into_raw(super_callback0) as *mut _,
113+
destroy_call3,
114+
);
115+
}
116+
}
117+
118+
#[doc(alias = "gsk_render_replay_set_node_filter")]
119+
pub fn set_node_filter<P: Fn(&RenderReplay, &RenderNode) -> Option<RenderNode> + 'static>(
120+
&mut self,
121+
filter: P,
122+
) {
123+
let filter_data: Box_<P> = Box_::new(filter);
124+
unsafe extern "C" fn filter_func<
125+
P: Fn(&RenderReplay, &RenderNode) -> Option<RenderNode> + 'static,
126+
>(
127+
replay: *mut ffi::GskRenderReplay,
128+
node: *mut ffi::GskRenderNode,
129+
user_data: glib::ffi::gpointer,
130+
) -> *mut ffi::GskRenderNode {
131+
let replay = from_glib_borrow(replay);
132+
let node = from_glib_borrow(node);
133+
let callback = &*(user_data as *mut P);
134+
(*callback)(&replay, &node).to_glib_full()
135+
}
136+
let filter = Some(filter_func::<P> as _);
137+
unsafe extern "C" fn user_destroy_func<
138+
P: Fn(&RenderReplay, &RenderNode) -> Option<RenderNode> + 'static,
139+
>(
140+
data: glib::ffi::gpointer,
141+
) {
142+
let _callback = Box_::from_raw(data as *mut P);
143+
}
144+
let destroy_call3 = Some(user_destroy_func::<P> as _);
145+
let super_callback0: Box_<P> = filter_data;
146+
unsafe {
147+
ffi::gsk_render_replay_set_node_filter(
148+
self.to_glib_none_mut().0,
149+
filter,
150+
Box_::into_raw(super_callback0) as *mut _,
151+
destroy_call3,
152+
);
153+
}
154+
}
155+
156+
#[doc(alias = "gsk_render_replay_set_node_foreach")]
157+
pub fn set_node_foreach<P: Fn(&RenderReplay, &RenderNode) -> bool + 'static>(
158+
&mut self,
159+
foreach: P,
160+
) {
161+
let foreach_data: Box_<P> = Box_::new(foreach);
162+
unsafe extern "C" fn foreach_func<P: Fn(&RenderReplay, &RenderNode) -> bool + 'static>(
163+
replay: *mut ffi::GskRenderReplay,
164+
node: *mut ffi::GskRenderNode,
165+
user_data: glib::ffi::gpointer,
166+
) -> glib::ffi::gboolean {
167+
let replay = from_glib_borrow(replay);
168+
let node = from_glib_borrow(node);
169+
let callback = &*(user_data as *mut P);
170+
(*callback)(&replay, &node).into_glib()
171+
}
172+
let foreach = Some(foreach_func::<P> as _);
173+
unsafe extern "C" fn user_destroy_func<
174+
P: Fn(&RenderReplay, &RenderNode) -> bool + 'static,
175+
>(
176+
data: glib::ffi::gpointer,
177+
) {
178+
let _callback = Box_::from_raw(data as *mut P);
179+
}
180+
let destroy_call3 = Some(user_destroy_func::<P> as _);
181+
let super_callback0: Box_<P> = foreach_data;
182+
unsafe {
183+
ffi::gsk_render_replay_set_node_foreach(
184+
self.to_glib_none_mut().0,
185+
foreach,
186+
Box_::into_raw(super_callback0) as *mut _,
187+
destroy_call3,
188+
);
189+
}
190+
}
191+
192+
#[doc(alias = "gsk_render_replay_set_texture_filter")]
193+
pub fn set_texture_filter(
194+
&mut self,
195+
filter: Option<Box_<dyn Fn(&RenderReplay, &gdk::Texture) -> gdk::Texture + 'static>>,
196+
) {
197+
let filter_data: Box_<
198+
Option<Box_<dyn Fn(&RenderReplay, &gdk::Texture) -> gdk::Texture + 'static>>,
199+
> = Box_::new(filter);
200+
unsafe extern "C" fn filter_func(
201+
replay: *mut ffi::GskRenderReplay,
202+
texture: *mut gdk::ffi::GdkTexture,
203+
user_data: glib::ffi::gpointer,
204+
) -> *mut gdk::ffi::GdkTexture {
205+
let replay = from_glib_borrow(replay);
206+
let texture = from_glib_borrow(texture);
207+
let callback = &*(user_data
208+
as *mut Option<
209+
Box_<dyn Fn(&RenderReplay, &gdk::Texture) -> gdk::Texture + 'static>,
210+
>);
211+
if let Some(ref callback) = *callback {
212+
callback(&replay, &texture)
213+
} else {
214+
panic!("cannot get closure...")
215+
}
216+
.to_glib_full()
217+
}
218+
let filter = if filter_data.is_some() {
219+
Some(filter_func as _)
220+
} else {
221+
None
222+
};
223+
unsafe extern "C" fn user_destroy_func(data: glib::ffi::gpointer) {
224+
let _callback = Box_::from_raw(
225+
data as *mut Option<
226+
Box_<dyn Fn(&RenderReplay, &gdk::Texture) -> gdk::Texture + 'static>,
227+
>,
228+
);
229+
}
230+
let destroy_call3 = Some(user_destroy_func as _);
231+
let super_callback0: Box_<
232+
Option<Box_<dyn Fn(&RenderReplay, &gdk::Texture) -> gdk::Texture + 'static>>,
233+
> = filter_data;
234+
unsafe {
235+
ffi::gsk_render_replay_set_texture_filter(
236+
self.to_glib_none_mut().0,
237+
filter,
238+
Box_::into_raw(super_callback0) as *mut _,
239+
destroy_call3,
240+
);
241+
}
242+
}
243+
244+
#[doc(alias = "gsk_render_replay_new")]
245+
pub fn new() -> RenderReplay {
246+
assert_initialized_main_thread!();
247+
unsafe { from_glib_none(ffi::gsk_render_replay_new()) }
248+
}
249+
}
250+
251+
#[cfg(feature = "v4_22")]
252+
#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
253+
impl Default for RenderReplay {
254+
fn default() -> Self {
255+
Self::new()
256+
}
257+
}

0 commit comments

Comments
 (0)