Skip to content

Commit 8e972de

Browse files
committed
Add gsk::RenderReplay bindings manually
Generated by temporarily adding glib:get-type to the gir file, moving the generated file to src and then - Replace the glib::wrapper macro with `struct` and `impl Drop`. - Replace from_glib_borrow with Self(ptr) - Replace to_glib_none_mut with self.0.as_mut
1 parent 5ba4629 commit 8e972de

File tree

3 files changed

+273
-0
lines changed

3 files changed

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

0 commit comments

Comments
 (0)