clutter/auto/
deform_effect.rs1use crate::{ActorMeta, Effect, OffscreenEffect};
2use glib::{
3 object as gobject,
4 object::{Cast, IsA},
5 signal::{connect_raw, SignalHandlerId},
6 translate::*,
7 StaticType, Value,
8};
9use std::boxed::Box as Box_;
10use std::{fmt, mem, mem::transmute};
11
12glib_wrapper! {
13 pub struct DeformEffect(Object<ffi::ClutterDeformEffect, ffi::ClutterDeformEffectClass, DeformEffectClass>) @extends OffscreenEffect, Effect, ActorMeta, gobject::InitiallyUnowned;
14
15 match fn {
16 get_type => || ffi::clutter_deform_effect_get_type(),
17 }
18}
19
20pub const NONE_DEFORM_EFFECT: Option<&DeformEffect> = None;
21
22pub trait DeformEffectExt: 'static {
28 fn get_n_tiles(&self) -> (u32, u32);
39
40 fn invalidate(&self);
43
44 fn set_n_tiles(&self, x_tiles: u32, y_tiles: u32);
56
57 fn get_property_x_tiles(&self) -> u32;
60
61 fn set_property_x_tiles(&self, x_tiles: u32);
64
65 fn get_property_y_tiles(&self) -> u32;
68
69 fn set_property_y_tiles(&self, y_tiles: u32);
72
73 fn connect_property_x_tiles_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
74
75 fn connect_property_y_tiles_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
76}
77
78impl<O: IsA<DeformEffect>> DeformEffectExt for O {
79 fn get_n_tiles(&self) -> (u32, u32) {
84 unsafe {
85 let mut x_tiles = mem::MaybeUninit::uninit();
86 let mut y_tiles = mem::MaybeUninit::uninit();
87 ffi::clutter_deform_effect_get_n_tiles(
88 self.as_ref().to_glib_none().0,
89 x_tiles.as_mut_ptr(),
90 y_tiles.as_mut_ptr(),
91 );
92 let x_tiles = x_tiles.assume_init();
93 let y_tiles = y_tiles.assume_init();
94 (x_tiles, y_tiles)
95 }
96 }
97
98 fn invalidate(&self) {
99 unsafe {
100 ffi::clutter_deform_effect_invalidate(self.as_ref().to_glib_none().0);
101 }
102 }
103
104 fn set_n_tiles(&self, x_tiles: u32, y_tiles: u32) {
109 unsafe {
110 ffi::clutter_deform_effect_set_n_tiles(
111 self.as_ref().to_glib_none().0,
112 x_tiles,
113 y_tiles,
114 );
115 }
116 }
117
118 fn get_property_x_tiles(&self) -> u32 {
119 unsafe {
120 let mut value = Value::from_type(<u32 as StaticType>::static_type());
121 gobject_sys::g_object_get_property(
122 self.to_glib_none().0 as *mut gobject_sys::GObject,
123 b"x-tiles\0".as_ptr() as *const _,
124 value.to_glib_none_mut().0,
125 );
126 value
127 .get()
128 .expect("Return Value for property `x-tiles` getter")
129 .unwrap()
130 }
131 }
132
133 fn set_property_x_tiles(&self, x_tiles: u32) {
134 unsafe {
135 gobject_sys::g_object_set_property(
136 self.to_glib_none().0 as *mut gobject_sys::GObject,
137 b"x-tiles\0".as_ptr() as *const _,
138 Value::from(&x_tiles).to_glib_none().0,
139 );
140 }
141 }
142
143 fn get_property_y_tiles(&self) -> u32 {
144 unsafe {
145 let mut value = Value::from_type(<u32 as StaticType>::static_type());
146 gobject_sys::g_object_get_property(
147 self.to_glib_none().0 as *mut gobject_sys::GObject,
148 b"y-tiles\0".as_ptr() as *const _,
149 value.to_glib_none_mut().0,
150 );
151 value
152 .get()
153 .expect("Return Value for property `y-tiles` getter")
154 .unwrap()
155 }
156 }
157
158 fn set_property_y_tiles(&self, y_tiles: u32) {
159 unsafe {
160 gobject_sys::g_object_set_property(
161 self.to_glib_none().0 as *mut gobject_sys::GObject,
162 b"y-tiles\0".as_ptr() as *const _,
163 Value::from(&y_tiles).to_glib_none().0,
164 );
165 }
166 }
167
168 fn connect_property_x_tiles_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
169 unsafe extern "C" fn notify_x_tiles_trampoline<P, F: Fn(&P) + 'static>(
170 this: *mut ffi::ClutterDeformEffect,
171 _param_spec: glib_sys::gpointer,
172 f: glib_sys::gpointer,
173 ) where
174 P: IsA<DeformEffect>,
175 {
176 let f: &F = &*(f as *const F);
177 f(&DeformEffect::from_glib_borrow(this).unsafe_cast_ref())
178 }
179 unsafe {
180 let f: Box_<F> = Box_::new(f);
181 connect_raw(
182 self.as_ptr() as *mut _,
183 b"notify::x-tiles\0".as_ptr() as *const _,
184 Some(transmute::<_, unsafe extern "C" fn()>(
185 notify_x_tiles_trampoline::<Self, F> as *const (),
186 )),
187 Box_::into_raw(f),
188 )
189 }
190 }
191
192 fn connect_property_y_tiles_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
193 unsafe extern "C" fn notify_y_tiles_trampoline<P, F: Fn(&P) + 'static>(
194 this: *mut ffi::ClutterDeformEffect,
195 _param_spec: glib_sys::gpointer,
196 f: glib_sys::gpointer,
197 ) where
198 P: IsA<DeformEffect>,
199 {
200 let f: &F = &*(f as *const F);
201 f(&DeformEffect::from_glib_borrow(this).unsafe_cast_ref())
202 }
203 unsafe {
204 let f: Box_<F> = Box_::new(f);
205 connect_raw(
206 self.as_ptr() as *mut _,
207 b"notify::y-tiles\0".as_ptr() as *const _,
208 Some(transmute::<_, unsafe extern "C" fn()>(
209 notify_y_tiles_trampoline::<Self, F> as *const (),
210 )),
211 Box_::into_raw(f),
212 )
213 }
214 }
215}
216
217impl fmt::Display for DeformEffect {
218 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
219 write!(f, "DeformEffect")
220 }
221}