Animation

[] 表示可选

#![allow(unused)]
fn main() {
animator:{
    $event_name = {
        default: on | off // open or close you can define yourself
        // action when close
        off = {
            from: {$event_name|all: $play}
            [ease]: $ease // default: Linear
            [redraw]: true|false
            apply: {
                $draw_name: {$event_name: 0.0|1.0, ...} // 1.0 is true 0.0 is false 
            }
        }
        // action when open
        on = {
            // ...
        }
    }
}
}

Example

#![allow(unused)]
fn main() {
animator: {
            hover = {
                default: off,
                off = {
                    from: {all: Forward {duration: 0.1}}
                    apply: {
                        draw_bg: {pressed: 0.0, hover: 0.0}
                        draw_icon: {pressed: 0.0, hover: 0.0}
                        draw_text: {pressed: 0.0, hover: 0.0}
                    }
                }

                on = {
                    from: {
                        all: Forward {duration: 0.1}
                        pressed: Forward {duration: 0.01}
                    }
                    apply: {
                        draw_bg: {pressed: 0.0, hover: [{time: 0.0, value: 1.0}],}
                        draw_icon: {pressed: 0.0, hover: [{time: 0.0, value: 1.0}],}
                        draw_text: {pressed: 0.0, hover: [{time: 0.0, value: 1.0}],}
                    }
                }

                pressed = {
                    from: {all: Forward {duration: 0.2}}
                    apply: {
                        draw_bg: {pressed: [{time: 0.0, value: 1.0}], hover: 1.0,}
                        draw_icon: {pressed: [{time: 0.0, value: 1.0}], hover: 1.0,}
                        draw_text: {pressed: [{time: 0.0, value: 1.0}], hover: 1.0,}
                    }
                }
            }
        }
}

$play

在 Makepad 中,Play 枚举用于定义动画的播放模式。

  • duration: 动画播放的持续时间,以秒为单位,默认1.0秒
类型参数示例说明
SnapNonefrom: {all: Snap}动画瞬间跳转到结束点,没有播放过程。这种模式下没有持续时间参数,因为动画是瞬时完成的。
Forwardduration: f64from: {all: Forward{duration: 0.2}}动画从开始点播放到结束点
Reverseduration: f64
end: f64
from: {all: Reverse{duration: 0.5}}动画从结束点向开始点反向播放。
Loopduration: f64
end: f64
``动画从开始点播放到结束点,然后重新开始,循环播放
ReverseLoopduration: f64
end: f64
``动画从开始点播放到结束点,然后反向播放回开始点,反复循环
BounceLoopduration: f64
end: f64
动画从开始点播放到结束点,然后反向播放回开始点,反复循环,就像在两点之间反弹

$ease

Ease 每个枚举变体及其参数定义了不同的缓动行为,可以用于实现各种复杂的动画效果

类型参数示例说明
LinearNoneLinear线性插值
NoneNoneNone无缓动效果
Constantf64Constant(1.0)常量值缓动
InQuadNoneInQuad二次方缓动(加速)
OutQuadNoneOutQuad二次方缓动(减速)
InOutQuadNoneInOutQuad二次方缓动(加速减速)
InCubicNoneInCubic三次方缓动(加速)
OutCubicNoneOutCubic三次方缓动(减速)
InOutCubicNoneInOutCubic三次方缓动(加速减速)
InQuartNoneInQuart四次方缓动(加速)
OutQuartNoneOutQuart四次方缓动(减速)
InOutQuartNoneInOutQuart四次方缓动(加速减速)
InQuintNoneInQuint五次方缓动(加速)
OutQuintNoneOutQuint五次方缓动(减速)
InOutQuintNoneInOutQuint五次方缓动(加速减速)
InSineNoneInSine正弦缓动(加速)
OutSineNoneOutSine正弦缓动(减速)
InOutSineNoneInOutSine正弦缓动(加速减速)
InExpNoneInExp指数缓动(加速)
OutExpNoneOutExp指数缓动(减速)
InOutExpNoneInOutExp指数缓动(加速减速)
InCircNoneInCirc圆形缓动(加速)
OutCircNoneOutCirc圆形缓动(减速)
InOutCircNoneInOutCirc圆形缓动(加速减速)
InElasticNoneInElastic弹性缓动(加速)
OutElasticNoneOutElastic弹性缓动(减速)
InOutElasticNoneInOutElastic弹性缓动(加速减速)
InBackNoneInBack回退缓动(加速)
OutBackNoneOutBack回退缓动(减速)
InOutBackNoneInOutBack回退缓动(加速减速)
InBounceNoneInBounce跳跃缓动(加速)
OutBounceNoneOutBounce跳跃缓动(减速)
InOutBounceNoneInOutBounce跳跃缓动(加速减速)
ExpDecayd1: f64, d2: f64, max: usizeExpDecay {d1: 0.82, d2: 0.97, max: 100}指数衰减缓动,具有初始和最终的衰减因子,以及最大迭代次数
Powbegin: f64, end: f64Pow {begin: 0.0, end: 1.0}幂次方缓动,具有起始和结束位置参数
Beziercp0: f64, cp1: f64, cp2: f64, cp3: f64Bezier {cp0: 0.0, cp1: 0.0, cp2: 1.0, cp3: 1.0}贝塞尔曲线缓动,具有四个控制点参数

$draw_name

draw_name is a struct which can use glsl code

example

#![allow(unused)]
fn main() {
#[derive(Live, LiveRegister)]
#[repr(C)]
pub struct DrawText {
    #[rust] pub many_instances: Option<ManyInstances>,
    
    #[live] pub geometry: GeometryQuad2D,
    #[live] pub text_style: TextStyle,
    #[live] pub wrap: TextWrap,
    
    #[live] pub ignore_newlines: bool,
    #[live] pub combine_spaces: bool,
    
    #[live(1.0)] pub font_scale: f64,
    #[live(1.0)] pub draw_depth: f32,
    
    #[deref] pub draw_vars: DrawVars,
    // these values are all generated
    #[live] pub color: Vec4,
    #[calc] pub font_t1: Vec2,
    #[calc] pub font_t2: Vec2,
    #[calc] pub rect_pos: Vec2,
    #[calc] pub rect_size: Vec2,
    #[calc] pub draw_clip: Vec4,
    #[calc] pub char_depth: f32,
    #[calc] pub delta: Vec2,
    #[calc] pub shader_font_size: f32,
    #[calc] pub advance: f32,
}
}