use crate::rendering::composition::animations::ICompositionAnimation;
use crate::rendering::composition::expressions::ExpressionVariant;
use crate::rendering::composition::server::CompositionProperty;
use crate::rendering::composition::transport::BatchStreamReader;
use crate::rendering::composition::transport::BatchStreamWriter;
use std::any::Any;
use std::any::TypeId;
use std::time::Duration;
use super::CompositionVisualHooks;
use super::CompositionVisualProps;
use super::ServerCompositionVisualHooks;
use super::ServerCompositionVisualProps;
pub trait CompositionContainerVisualHooks: CompositionVisualHooks {
fn initialize_defaults_extra(&self) {}
}
pub struct CompositionContainerVisualProps {
base: CompositionVisualProps,
}
impl Default for CompositionContainerVisualProps {
fn default() -> Self {
Self::new()
}
}
impl CompositionContainerVisualProps {
pub fn new() -> Self {
Self {
base: CompositionVisualProps::new(),
}
}
pub fn base(&self) -> &CompositionVisualProps {
&self.base
}
pub fn initialize_defaults(&self, host: &dyn CompositionContainerVisualHooks) {
self.base.initialize_defaults(host);
self.initialize_own_defaults(host);
}
pub fn initialize_own_defaults(&self, host: &dyn CompositionContainerVisualHooks) {
CompositionContainerVisualHooks::initialize_defaults_extra(host);
}
pub fn start_animation(
&self,
host: &dyn CompositionContainerVisualHooks,
property_name: &str,
animation: &dyn ICompositionAnimation,
final_value: Option<ExpressionVariant>,
) -> bool {
self.base.start_animation(host, property_name, animation, final_value)
}
pub fn serialize_changes_core(&self, host: &dyn CompositionContainerVisualHooks, writer: &mut BatchStreamWriter<'_>) {
self.base.serialize_changes_core(host, writer);
}
}
pub trait ServerCompositionContainerVisualHooks: ServerCompositionVisualHooks {
}
pub struct ServerCompositionContainerVisualProps {
base: ServerCompositionVisualProps,
}
impl Default for ServerCompositionContainerVisualProps {
fn default() -> Self {
Self::new()
}
}
impl ServerCompositionContainerVisualProps {
pub fn new() -> Self {
Self {
base: ServerCompositionVisualProps::new(),
}
}
pub fn base(&self) -> &ServerCompositionVisualProps {
&self.base
}
pub fn find_props(&self, type_id: TypeId) -> Option<&dyn Any> {
if type_id == TypeId::of::<Self>() {
return Some(self);
}
self.base.find_props(type_id)
}
pub fn deserialize_changes_core(
&self,
host: &dyn ServerCompositionContainerVisualHooks,
reader: &mut BatchStreamReader<'_>,
committed_at: Duration,
) {
self.base.deserialize_changes_core(host, reader, committed_at);
}
pub fn get_composition_property(name: &str) -> Option<&'static CompositionProperty> {
ServerCompositionVisualProps::get_composition_property(name)
}
}