Antigravity-awesome-skills makepad-animation

install
source · Clone the upstream repo
git clone https://github.com/sickn33/antigravity-awesome-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sickn33/antigravity-awesome-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/antigravity-awesome-skills/skills/makepad-animation" ~/.claude/skills/sickn33-antigravity-awesome-skills-makepad-animation-f6f111 && rm -rf "$T"
manifest: plugins/antigravity-awesome-skills/skills/makepad-animation/SKILL.md
source content

Makepad Animation Skill

Version: makepad-widgets (dev branch) | Last Updated: 2026-01-19

Check for updates: https://crates.io/crates/makepad-widgets

You are an expert at Makepad animations. Help users by:

  • Writing code: Generate animation code following the patterns below
  • Answering questions: Explain states, transitions, timelines

When to Use

  • You need to build or debug animations, transitions, hover states, or animator timelines in Makepad.
  • The task involves
    animator
    , state changes, easing, keyframes, or visual interaction feedback.
  • You want Makepad-specific animation patterns instead of generic Rust UI guidance.

Documentation

Refer to the local files for detailed documentation:

  • ./references/animation-system.md
    - Complete animation reference

Advanced Patterns

For production-ready animation patterns, see the

_base/
directory:

PatternDescription
06-animator-basicsAnimator fundamentals
07-easing-functionsEasing and timing
08-keyframe-animationComplex keyframes

IMPORTANT: Documentation Completeness Check

Before answering questions, Claude MUST:

  1. Read the relevant reference file(s) listed above
  2. If file read fails or file is empty:
    • Inform user: "本地文档不完整,建议运行
      /sync-crate-skills makepad --force
      更新文档"
    • Still answer based on SKILL.md patterns + built-in knowledge
  3. If reference file exists, incorporate its content into the answer

Key Patterns

1. Basic Hover Animation

<Button> {
    text: "Hover Me"

    animator: {
        hover = {
            default: off

            off = {
                from: { all: Forward { duration: 0.15 } }
                apply: {
                    draw_bg: { color: #333333 }
                }
            }

            on = {
                from: { all: Forward { duration: 0.15 } }
                apply: {
                    draw_bg: { color: #555555 }
                }
            }
        }
    }
}

2. Multi-State Animation

<View> {
    animator: {
        hover = {
            default: off
            off = {
                from: { all: Forward { duration: 0.2 } }
                apply: { draw_bg: { color: #222222 } }
            }
            on = {
                from: { all: Forward { duration: 0.2 } }
                apply: { draw_bg: { color: #444444 } }
            }
        }

        pressed = {
            default: off
            off = {
                from: { all: Forward { duration: 0.1 } }
                apply: { draw_bg: { scale: 1.0 } }
            }
            on = {
                from: { all: Forward { duration: 0.1 } }
                apply: { draw_bg: { scale: 0.95 } }
            }
        }
    }
}

3. Focus State Animation

<TextInput> {
    animator: {
        focus = {
            default: off

            off = {
                from: { all: Forward { duration: 0.2 } }
                apply: {
                    draw_bg: {
                        border_color: #444444
                        border_size: 1.0
                    }
                }
            }

            on = {
                from: { all: Forward { duration: 0.2 } }
                apply: {
                    draw_bg: {
                        border_color: #0066CC
                        border_size: 2.0
                    }
                }
            }
        }
    }
}

4. Disabled State

<Button> {
    animator: {
        disabled = {
            default: off

            off = {
                from: { all: Snap }
                apply: {
                    draw_bg: { color: #0066CC }
                    draw_text: { color: #FFFFFF }
                }
            }

            on = {
                from: { all: Snap }
                apply: {
                    draw_bg: { color: #333333 }
                    draw_text: { color: #666666 }
                }
            }
        }
    }
}

Animator Structure

PropertyDescription
animator
Root animation container
{state} =
State definition (hover, pressed, focus, disabled)
default:
Initial state value
{value} =
State value definition (on, off, custom)
from:
Transition timeline
apply:
Properties to animate

Timeline Types (Play Enum)

TypeDescription
Forward { duration: f64 }
Linear forward animation
Snap
Instant change, no transition
Reverse { duration: f64, end: f64 }
Reverse animation
Loop { duration: f64, end: f64 }
Looping animation
BounceLoop { duration: f64, end: f64 }
Bounce loop animation

Easing Functions (Ease Enum)

// Basic
Linear

// Quadratic
InQuad, OutQuad, InOutQuad

// Cubic
InCubic, OutCubic, InOutCubic

// Quartic
InQuart, OutQuart, InOutQuart

// Quintic
InQuint, OutQuint, InOutQuint

// Sinusoidal
InSine, OutSine, InOutSine

// Exponential
InExp, OutExp, InOutExp

// Circular
InCirc, OutCirc, InOutCirc

// Elastic
InElastic, OutElastic, InOutElastic

// Back
InBack, OutBack, InOutBack

// Bounce
InBounce, OutBounce, InOutBounce

// Custom
ExpDecay { d1: f64, d2: f64 }
Bezier { cp0: f64, cp1: f64, cp2: f64, cp3: f64 }
Pow { begin: f64, end: f64 }

Using Easing

from: {
    all: Ease { duration: 0.3, ease: InOutQuad }
}

Common States

StateValuesTrigger
hover
on, offMouse enter/leave
pressed
/
down
on, offMouse press/release
focus
on, offFocus gain/lose
disabled
on, offWidget enabled/disabled
selected
on, offSelection change

Animatable Properties

Most

draw_*
shader uniforms can be animated:

  • Colors:
    color
    ,
    border_color
    ,
    shadow_color
  • Sizes:
    border_size
    ,
    border_radius
    ,
    shadow_radius
  • Transforms:
    scale
    ,
    rotation
    ,
    offset
  • Opacity:
    opacity

When Writing Code

  1. Always set
    default:
    for initial state
  2. Use
    Forward
    for smooth transitions
  3. Use
    Snap
    for instant state changes (like disabled)
  4. Keep durations short (0.1-0.3s) for responsive feel
  5. Animate shader uniforms in
    draw_bg
    ,
    draw_text
    , etc.

Rust API (AnimatorImpl Trait)

pub trait AnimatorImpl {
    // Animate to state
    fn animator_play(&mut self, cx: &mut Cx, state: &[LiveId; 2]);

    // Cut to state (no animation)
    fn animator_cut(&mut self, cx: &mut Cx, state: &[LiveId; 2]);

    // Check current state
    fn animator_in_state(&self, cx: &Cx, state: &[LiveId; 2]) -> bool;
}

// Usage example
fn handle_event(&mut self, cx: &mut Cx, event: &Event, scope: &mut Scope) {
    match event.hits(cx, self.area()) {
        Hit::FingerHoverIn(_) => {
            self.animator_play(cx, id!(hover.on));
        }
        Hit::FingerHoverOut(_) => {
            self.animator_play(cx, id!(hover.off));
        }
        Hit::FingerDown(_) => {
            self.animator_play(cx, id!(pressed.on));
        }
        Hit::FingerUp(_) => {
            self.animator_play(cx, id!(pressed.off));
        }
        _ => {}
    }
}

When Answering Questions

  1. States are independent - multiple can be active simultaneously
  2. Animation applies properties when state reaches that value
  3. from
    defines HOW to animate,
    apply
    defines WHAT to animate
  4. Makepad tweens between old and new values automatically
  5. Use
    id!(state.value)
    macro to reference animation states in Rust

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.