gstreamer_controller/auto/
direct_control_binding.rs1use crate::ffi;
7use glib::{
8 prelude::*,
9 signal::{connect_raw, SignalHandlerId},
10 translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15 #[doc(alias = "GstDirectControlBinding")]
16 pub struct DirectControlBinding(Object<ffi::GstDirectControlBinding, ffi::GstDirectControlBindingClass>) @extends gst::ControlBinding, gst::Object;
17
18 match fn {
19 type_ => || ffi::gst_direct_control_binding_get_type(),
20 }
21}
22
23impl DirectControlBinding {
24 pub const NONE: Option<&'static DirectControlBinding> = None;
25
26 #[doc(alias = "gst_direct_control_binding_new")]
27 pub fn new(
28 object: &impl IsA<gst::Object>,
29 property_name: &str,
30 cs: &impl IsA<gst::ControlSource>,
31 ) -> DirectControlBinding {
32 assert_initialized_main_thread!();
33 unsafe {
34 gst::ControlBinding::from_glib_none(ffi::gst_direct_control_binding_new(
35 object.as_ref().to_glib_none().0,
36 property_name.to_glib_none().0,
37 cs.as_ref().to_glib_none().0,
38 ))
39 .unsafe_cast()
40 }
41 }
42
43 #[doc(alias = "gst_direct_control_binding_new_absolute")]
44 pub fn new_absolute(
45 object: &impl IsA<gst::Object>,
46 property_name: &str,
47 cs: &impl IsA<gst::ControlSource>,
48 ) -> DirectControlBinding {
49 assert_initialized_main_thread!();
50 unsafe {
51 gst::ControlBinding::from_glib_none(ffi::gst_direct_control_binding_new_absolute(
52 object.as_ref().to_glib_none().0,
53 property_name.to_glib_none().0,
54 cs.as_ref().to_glib_none().0,
55 ))
56 .unsafe_cast()
57 }
58 }
59}
60
61unsafe impl Send for DirectControlBinding {}
62unsafe impl Sync for DirectControlBinding {}
63
64mod sealed {
65 pub trait Sealed {}
66 impl<T: super::IsA<super::DirectControlBinding>> Sealed for T {}
67}
68
69pub trait DirectControlBindingExt: IsA<DirectControlBinding> + sealed::Sealed + 'static {
70 fn is_absolute(&self) -> bool {
71 ObjectExt::property(self.as_ref(), "absolute")
72 }
73
74 #[doc(alias = "control-source")]
75 fn control_source(&self) -> Option<gst::ControlSource> {
76 ObjectExt::property(self.as_ref(), "control-source")
77 }
78
79 #[doc(alias = "control-source")]
80 fn set_control_source<P: IsA<gst::ControlSource>>(&self, control_source: Option<&P>) {
81 ObjectExt::set_property(self.as_ref(), "control-source", control_source)
82 }
83
84 #[doc(alias = "control-source")]
85 fn connect_control_source_notify<F: Fn(&Self) + Send + Sync + 'static>(
86 &self,
87 f: F,
88 ) -> SignalHandlerId {
89 unsafe extern "C" fn notify_control_source_trampoline<
90 P: IsA<DirectControlBinding>,
91 F: Fn(&P) + Send + Sync + 'static,
92 >(
93 this: *mut ffi::GstDirectControlBinding,
94 _param_spec: glib::ffi::gpointer,
95 f: glib::ffi::gpointer,
96 ) {
97 let f: &F = &*(f as *const F);
98 f(DirectControlBinding::from_glib_borrow(this).unsafe_cast_ref())
99 }
100 unsafe {
101 let f: Box_<F> = Box_::new(f);
102 connect_raw(
103 self.as_ptr() as *mut _,
104 b"notify::control-source\0".as_ptr() as *const _,
105 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
106 notify_control_source_trampoline::<Self, F> as *const (),
107 )),
108 Box_::into_raw(f),
109 )
110 }
111 }
112}
113
114impl<O: IsA<DirectControlBinding>> DirectControlBindingExt for O {}