ferroui_base/rendering/composition/
compositor_factories.rs1use 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 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 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}