summaryrefslogtreecommitdiff
path: root/rust/crates/timeline/src/defaults.rs
blob: 504bab927f66cfcbc6f6c891e598d32ef88a78bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
use scene::{ParamValue, ParamValues, TextElement};
use time::MediaTime;

use crate::creation::DEFAULT_NEW_ELEMENT_DURATION;

pub const DEFAULT_OPACITY: f64 = 1.0;
pub const DEFAULT_BLEND_MODE: &str = "normal";
pub const DEFAULT_VOLUME: f64 = 0.0;
pub const DEFAULT_TRANSFORM_SCALE: f64 = 1.0;
pub const DEFAULT_TRANSFORM_POSITION: f64 = 0.0;
pub const DEFAULT_TRANSFORM_ROTATE: f64 = 0.0;

pub const DEFAULT_TEXT_LETTER_SPACING: f64 = 0.0;
pub const DEFAULT_TEXT_LINE_HEIGHT: f64 = 1.2;

#[derive(Clone, Debug, PartialEq)]
pub struct DefaultTextBackground {
    pub enabled: bool,
    pub color: String,
    pub corner_radius: f64,
    pub padding_x: f64,
    pub padding_y: f64,
    pub offset_x: f64,
    pub offset_y: f64,
}

pub fn default_text_background() -> DefaultTextBackground {
    DefaultTextBackground {
        enabled: false,
        color: "#000000".to_string(),
        corner_radius: 0.0,
        padding_x: 30.0,
        padding_y: 42.0,
        offset_x: 0.0,
        offset_y: 0.0,
    }
}

pub fn default_text_params() -> ParamValues {
    let background = default_text_background();
    ParamValues::from([
        ("content".to_string(), ParamValue::String("Default text".to_string())),
        ("fontSize".to_string(), ParamValue::Number(15.0)),
        ("fontFamily".to_string(), ParamValue::String("Arial".to_string())),
        ("color".to_string(), ParamValue::String("#ffffff".to_string())),
        ("textAlign".to_string(), ParamValue::String("center".to_string())),
        ("fontWeight".to_string(), ParamValue::String("normal".to_string())),
        ("fontStyle".to_string(), ParamValue::String("normal".to_string())),
        ("textDecoration".to_string(), ParamValue::String("none".to_string())),
        (
            "letterSpacing".to_string(),
            ParamValue::Number(DEFAULT_TEXT_LETTER_SPACING),
        ),
        (
            "lineHeight".to_string(),
            ParamValue::Number(DEFAULT_TEXT_LINE_HEIGHT),
        ),
        (
            "background.enabled".to_string(),
            ParamValue::Bool(background.enabled),
        ),
        (
            "background.color".to_string(),
            ParamValue::String(background.color),
        ),
        (
            "background.cornerRadius".to_string(),
            ParamValue::Number(background.corner_radius),
        ),
        (
            "background.paddingX".to_string(),
            ParamValue::Number(background.padding_x),
        ),
        (
            "background.paddingY".to_string(),
            ParamValue::Number(background.padding_y),
        ),
        (
            "background.offsetX".to_string(),
            ParamValue::Number(background.offset_x),
        ),
        (
            "background.offsetY".to_string(),
            ParamValue::Number(background.offset_y),
        ),
        (
            "transform.positionX".to_string(),
            ParamValue::Number(DEFAULT_TRANSFORM_POSITION),
        ),
        (
            "transform.positionY".to_string(),
            ParamValue::Number(DEFAULT_TRANSFORM_POSITION),
        ),
        (
            "transform.scaleX".to_string(),
            ParamValue::Number(DEFAULT_TRANSFORM_SCALE),
        ),
        (
            "transform.scaleY".to_string(),
            ParamValue::Number(DEFAULT_TRANSFORM_SCALE),
        ),
        (
            "transform.rotate".to_string(),
            ParamValue::Number(DEFAULT_TRANSFORM_ROTATE),
        ),
        ("opacity".to_string(), ParamValue::Number(DEFAULT_OPACITY)),
        (
            "blendMode".to_string(),
            ParamValue::String(DEFAULT_BLEND_MODE.to_string()),
        ),
    ])
}

pub fn default_text_element(id: impl Into<String>) -> TextElement {
    TextElement {
        base: scene::BaseTimelineElement {
            id: id.into(),
            name: "Text".to_string(),
            duration: DEFAULT_NEW_ELEMENT_DURATION,
            start_time: MediaTime::ZERO,
            trim_start: MediaTime::ZERO,
            trim_end: MediaTime::ZERO,
            source_duration: None,
            animations: None,
            params: default_text_params(),
        },
        hidden: None,
        effects: None,
    }
}