Skip to main content

ferroui_base/rendering/composition/
compositor_factories.rs

1use super::animations::{CompositionAnimationGroup, ExpressionAnimation, ImplicitAnimationCollection};
2use super::server::{RenderSurfaces, ServerCompositionContainerVisual};
3use super::visual::CompositionVisualKind;
4use super::{
5    CompositionDrawingSurface, CompositionCustomVisual, ICompositionCustomVisualHandler, CompositionConicGradientBrush, CompositionGradientStop, CompositionLinearGradientBrush,
6    CompositionRadialGradientBrush, CompositionSolidColorBrush, CompositionContainerVisual, CompositionSolidColorVisual, CompositionSurfaceVisual, CompositionTarget,
7    CompositionVisual, Compositor,
8};
9use crate::media::Color;
10use std::rc::Rc;
11
12impl Compositor {
13    fn this_rc(&self) -> Rc<Compositor> {
14        self.this_handle()
15    }
16
17    /// Creates a composition target that renders to one of the surfaces
18    /// `surfaces` returns.
19    pub fn create_composition_target(&self, surfaces: RenderSurfaces) -> Rc<CompositionTarget> {
20        CompositionTarget::new(&self.this_rc(), surfaces)
21    }
22
23    pub fn create_container_visual(&self) -> Rc<CompositionContainerVisual> {
24        CompositionVisual::create(
25            &self.this_rc(),
26            CompositionVisualKind::Container(super::generated::CompositionContainerVisualProps::new()),
27            || Box::new(ServerCompositionContainerVisual),
28        )
29    }
30
31    pub fn create_expression_animation(&self) -> Rc<ExpressionAnimation> {
32        ExpressionAnimation::new(&self.this_rc())
33    }
34
35    pub fn create_expression_animation_with(&self, expression: &str) -> Rc<ExpressionAnimation> {
36        let animation = ExpressionAnimation::new(&self.this_rc());
37        animation.set_expression(Some(expression.to_owned()));
38        animation
39    }
40
41    pub fn create_implicit_animation_collection(&self) -> Rc<ImplicitAnimationCollection> {
42        ImplicitAnimationCollection::new(&self.this_rc())
43    }
44
45    pub fn create_animation_group(&self) -> Rc<CompositionAnimationGroup> {
46        CompositionAnimationGroup::new(&self.this_rc())
47    }
48
49    pub fn create_solid_color_visual(&self) -> CompositionSolidColorVisual {
50        CompositionSolidColorVisual::new(&self.this_rc())
51    }
52
53    ///
54    /// The handler belongs to the render thread: `handler` creates it there.
55    pub fn create_custom_visual(
56        &self,
57        handler: impl FnOnce() -> Rc<dyn ICompositionCustomVisualHandler> + Send + 'static,
58    ) -> CompositionCustomVisual {
59        CompositionCustomVisual::new(&self.this_rc(), handler)
60    }
61
62    pub fn create_drawing_surface(&self) -> CompositionDrawingSurface {
63        CompositionDrawingSurface::new(&self.this_rc())
64    }
65
66    pub fn create_surface_visual(&self) -> CompositionSurfaceVisual {
67        CompositionSurfaceVisual::new(&self.this_rc())
68    }
69
70    pub fn create_solid_color_brush(&self) -> CompositionSolidColorBrush {
71        CompositionSolidColorBrush::new(&self.this_rc())
72    }
73
74    pub fn create_solid_color_brush_with(&self, color: Color) -> CompositionSolidColorBrush {
75        CompositionSolidColorBrush::with_color(&self.this_rc(), color)
76    }
77
78    pub fn create_linear_gradient_brush(&self) -> CompositionLinearGradientBrush {
79        CompositionLinearGradientBrush::new(&self.this_rc())
80    }
81
82    pub fn create_conic_gradient_brush(&self) -> CompositionConicGradientBrush {
83        CompositionConicGradientBrush::new(&self.this_rc())
84    }
85
86    pub fn create_radial_gradient_brush(&self) -> CompositionRadialGradientBrush {
87        CompositionRadialGradientBrush::new(&self.this_rc())
88    }
89
90    pub fn create_gradient_stop_with(&self, offset: f64, color: Color) -> Rc<CompositionGradientStop> {
91        CompositionGradientStop::with_offset_and_color(&self.this_rc(), offset, color)
92    }
93
94    pub fn create_gradient_stop(&self) -> Rc<CompositionGradientStop> {
95        CompositionGradientStop::new(&self.this_rc())
96    }
97}