blob: f07188c6256ca563802dd78bf5d92dd51b46918b [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use crate::{
animation::KeyFrame,
core::{Core, Object, ObjectRef, OnAdded, Property},
};
use super::Animator;
#[derive(Debug, Default)]
pub struct KeyFrameId {
key_frame: KeyFrame,
value: Property<u64>,
}
impl ObjectRef<'_, KeyFrameId> {
pub fn value(&self) -> u64 {
self.value.get()
}
pub fn set_value(&self, value: u64) {
self.value.set(value);
}
}
impl ObjectRef<'_, KeyFrameId> {
pub fn apply(&self, core: Object, property_key: u64, _mix: f32) {
core.as_ref().animate(&core.as_ref(), property_key, &Animator::new(self.value()));
}
pub fn apply_interpolation(
&self,
core: Object,
property_key: u64,
_current_time: f32,
_next_frame: ObjectRef<'_, KeyFrame>,
_mix: f32,
) {
core.as_ref().animate(&core.as_ref(), property_key, &Animator::new(self.value()));
}
}
impl Core for KeyFrameId {
parent_types![(key_frame, KeyFrame)];
properties![(122, value, set_value), key_frame];
}
impl OnAdded for ObjectRef<'_, KeyFrameId> {
on_added!(KeyFrame);
}