Skip to main content

rustmotion_components/
flex.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use skia_safe::Canvas;
4
5use rustmotion_core::css::CssStyle;
6use rustmotion_core::engine::layout_pass::BoxLayout;
7use rustmotion_core::schema::{SizeDimension, TimelineStep};
8use rustmotion_core::traits::{PaintCtx, Painter, TimingConfig};
9
10use crate::ChildComponent;
11
12/// Flex size — each dimension can be fixed or auto.
13#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
14pub struct FlexSize {
15    pub width: SizeDimension,
16    pub height: SizeDimension,
17}
18
19/// Flex container — children are positioned via flexbox layout.
20#[derive(Debug, Serialize, Deserialize, JsonSchema)]
21pub struct Flex {
22    #[serde(default)]
23    pub children: Vec<ChildComponent>,
24    #[serde(flatten)]
25    pub timing: TimingConfig,
26    #[serde(default)]
27    pub style: CssStyle,
28    #[serde(default)]
29    pub timeline: Vec<TimelineStep>,
30    #[serde(default)]
31    pub stagger: Option<f32>,
32    #[serde(default)]
33    pub time_scale: Option<f64>,
34    #[serde(default)]
35    pub time_offset: Option<f64>,
36}
37
38rustmotion_core::impl_traits!(Flex {
39    Animatable => animation,
40    Timed => timing,
41    Styled => style,
42});
43
44impl Painter for Flex {
45    fn paint_content(
46        &self,
47        _canvas: &Canvas,
48        _layout: &BoxLayout,
49        _props: &rustmotion_core::engine::animator::AnimatedProperties,
50        _ctx: &PaintCtx,
51    ) {
52    }
53}