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