mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-29 04:51:09 +00:00
d1e562b9f6
Trait objects without are deprecated with the latest nightly and this makes it more clear that we're doing dynamic dispatch anyway.
74 lines
2.3 KiB
Rust
74 lines
2.3 KiB
Rust
// Copyright (C) 2018 Thibault Saunier <tsaunier@igalia.com>
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
use ges_sys;
|
|
use glib;
|
|
use glib::object::IsA;
|
|
use glib::translate::*;
|
|
use std::ptr;
|
|
use TimelineElement;
|
|
|
|
pub trait TimelineElementExtManual: 'static {
|
|
fn get_child_property(&self, name: &str) -> Option<glib::Value>;
|
|
fn set_child_property(
|
|
&self,
|
|
name: &str,
|
|
value: &dyn glib::ToValue,
|
|
) -> Result<(), glib::BoolError>;
|
|
}
|
|
|
|
impl<O: IsA<TimelineElement>> TimelineElementExtManual for O {
|
|
fn get_child_property(&self, name: &str) -> Option<glib::Value> {
|
|
unsafe {
|
|
let found: bool = from_glib(ges_sys::ges_timeline_element_lookup_child(
|
|
self.as_ref().to_glib_none().0,
|
|
name.to_glib_none().0,
|
|
ptr::null_mut(),
|
|
ptr::null_mut(),
|
|
));
|
|
if !found {
|
|
return None;
|
|
}
|
|
|
|
let mut value = glib::Value::uninitialized();
|
|
ges_sys::ges_timeline_element_get_child_property(
|
|
self.as_ref().to_glib_none().0,
|
|
name.to_glib_none().0,
|
|
value.to_glib_none_mut().0,
|
|
);
|
|
Some(value)
|
|
}
|
|
}
|
|
|
|
fn set_child_property(
|
|
&self,
|
|
name: &str,
|
|
value: &dyn glib::ToValue,
|
|
) -> Result<(), glib::BoolError> {
|
|
unsafe {
|
|
let found: bool = from_glib(ges_sys::ges_timeline_element_lookup_child(
|
|
self.as_ref().to_glib_none().0,
|
|
name.to_glib_none().0,
|
|
ptr::null_mut(),
|
|
ptr::null_mut(),
|
|
));
|
|
if !found {
|
|
return Err(glib_bool_error!("Child property not found"));
|
|
}
|
|
|
|
let value = value.to_value();
|
|
ges_sys::ges_timeline_element_set_child_property(
|
|
self.as_ref().to_glib_none().0,
|
|
name.to_glib_none().0,
|
|
value.to_glib_none().0,
|
|
);
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
}
|