gstreamer_player/auto/
player_video_overlay_video_renderer.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::{ffi, PlayerVideoRenderer};
7use glib::{
8    prelude::*,
9    signal::{connect_raw, SignalHandlerId},
10    translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15    ///
16    ///
17    /// ## Properties
18    ///
19    ///
20    /// #### `video-sink`
21    ///  Readable | Writeable
22    ///
23    ///
24    /// #### `window-handle`
25    ///  Readable | Writeable | Construct
26    ///
27    /// # Implements
28    ///
29    /// [`trait@glib::ObjectExt`], [`PlayerVideoRendererExt`][trait@crate::prelude::PlayerVideoRendererExt]
30    #[doc(alias = "GstPlayerVideoOverlayVideoRenderer")]
31    pub struct PlayerVideoOverlayVideoRenderer(Object<ffi::GstPlayerVideoOverlayVideoRenderer, ffi::GstPlayerVideoOverlayVideoRendererClass>) @implements PlayerVideoRenderer;
32
33    match fn {
34        type_ => || ffi::gst_player_video_overlay_video_renderer_get_type(),
35    }
36}
37
38impl PlayerVideoOverlayVideoRenderer {
39    /// Tell an overlay that it has been exposed. This will redraw the current frame
40    /// in the drawable even if the pipeline is PAUSED.
41    #[doc(alias = "gst_player_video_overlay_video_renderer_expose")]
42    pub fn expose(&self) {
43        unsafe {
44            ffi::gst_player_video_overlay_video_renderer_expose(self.to_glib_none().0);
45        }
46    }
47
48    /// Return the currently configured render rectangle. See [`set_render_rectangle()`][Self::set_render_rectangle()]
49    /// for details.
50    ///
51    /// # Returns
52    ///
53    ///
54    /// ## `x`
55    /// the horizontal offset of the render area inside the window
56    ///
57    /// ## `y`
58    /// the vertical offset of the render area inside the window
59    ///
60    /// ## `width`
61    /// the width of the render area inside the window
62    ///
63    /// ## `height`
64    /// the height of the render area inside the window
65    #[doc(alias = "gst_player_video_overlay_video_renderer_get_render_rectangle")]
66    #[doc(alias = "get_render_rectangle")]
67    pub fn render_rectangle(&self) -> (i32, i32, i32, i32) {
68        unsafe {
69            let mut x = std::mem::MaybeUninit::uninit();
70            let mut y = std::mem::MaybeUninit::uninit();
71            let mut width = std::mem::MaybeUninit::uninit();
72            let mut height = std::mem::MaybeUninit::uninit();
73            ffi::gst_player_video_overlay_video_renderer_get_render_rectangle(
74                self.to_glib_none().0,
75                x.as_mut_ptr(),
76                y.as_mut_ptr(),
77                width.as_mut_ptr(),
78                height.as_mut_ptr(),
79            );
80            (
81                x.assume_init(),
82                y.assume_init(),
83                width.assume_init(),
84                height.assume_init(),
85            )
86        }
87    }
88
89    /// Configure a subregion as a video target within the window set by
90    /// [`set_window_handle()`][Self::set_window_handle()]. If this is not
91    /// used or not supported the video will fill the area of the window set as the
92    /// overlay to 100%. By specifying the rectangle, the video can be overlaid to
93    /// a specific region of that window only. After setting the new rectangle one
94    /// should call [`expose()`][Self::expose()] to force a
95    /// redraw. To unset the region pass -1 for the `width` and `height` parameters.
96    ///
97    /// This method is needed for non fullscreen video overlay in UI toolkits that
98    /// do not support subwindows.
99    /// ## `x`
100    /// the horizontal offset of the render area inside the window
101    /// ## `y`
102    /// the vertical offset of the render area inside the window
103    /// ## `width`
104    /// the width of the render area inside the window
105    /// ## `height`
106    /// the height of the render area inside the window
107    #[doc(alias = "gst_player_video_overlay_video_renderer_set_render_rectangle")]
108    pub fn set_render_rectangle(&self, x: i32, y: i32, width: i32, height: i32) {
109        unsafe {
110            ffi::gst_player_video_overlay_video_renderer_set_render_rectangle(
111                self.to_glib_none().0,
112                x,
113                y,
114                width,
115                height,
116            );
117        }
118    }
119
120    #[doc(alias = "video-sink")]
121    pub fn video_sink(&self) -> Option<gst::Element> {
122        ObjectExt::property(self, "video-sink")
123    }
124
125    #[doc(alias = "video-sink")]
126    pub fn set_video_sink<P: IsA<gst::Element>>(&self, video_sink: Option<&P>) {
127        ObjectExt::set_property(self, "video-sink", video_sink)
128    }
129
130    #[doc(alias = "video-sink")]
131    pub fn connect_video_sink_notify<F: Fn(&Self) + Send + Sync + 'static>(
132        &self,
133        f: F,
134    ) -> SignalHandlerId {
135        unsafe extern "C" fn notify_video_sink_trampoline<
136            F: Fn(&PlayerVideoOverlayVideoRenderer) + Send + Sync + 'static,
137        >(
138            this: *mut ffi::GstPlayerVideoOverlayVideoRenderer,
139            _param_spec: glib::ffi::gpointer,
140            f: glib::ffi::gpointer,
141        ) {
142            let f: &F = &*(f as *const F);
143            f(&from_glib_borrow(this))
144        }
145        unsafe {
146            let f: Box_<F> = Box_::new(f);
147            connect_raw(
148                self.as_ptr() as *mut _,
149                c"notify::video-sink".as_ptr() as *const _,
150                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
151                    notify_video_sink_trampoline::<F> as *const (),
152                )),
153                Box_::into_raw(f),
154            )
155        }
156    }
157
158    #[doc(alias = "window-handle")]
159    pub fn connect_window_handle_notify<F: Fn(&Self) + Send + Sync + 'static>(
160        &self,
161        f: F,
162    ) -> SignalHandlerId {
163        unsafe extern "C" fn notify_window_handle_trampoline<
164            F: Fn(&PlayerVideoOverlayVideoRenderer) + Send + Sync + 'static,
165        >(
166            this: *mut ffi::GstPlayerVideoOverlayVideoRenderer,
167            _param_spec: glib::ffi::gpointer,
168            f: glib::ffi::gpointer,
169        ) {
170            let f: &F = &*(f as *const F);
171            f(&from_glib_borrow(this))
172        }
173        unsafe {
174            let f: Box_<F> = Box_::new(f);
175            connect_raw(
176                self.as_ptr() as *mut _,
177                c"notify::window-handle".as_ptr() as *const _,
178                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
179                    notify_window_handle_trampoline::<F> as *const (),
180                )),
181                Box_::into_raw(f),
182            )
183        }
184    }
185}
186
187unsafe impl Send for PlayerVideoOverlayVideoRenderer {}
188unsafe impl Sync for PlayerVideoOverlayVideoRenderer {}