#![allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum KeyframeDotState {
Normal,
Selected,
Hovered,
Locked,
}
#[derive(Debug, Clone)]
pub struct KeyframeDot {
pub frame: f32,
pub position: [f32; 3],
pub state: KeyframeDotState,
pub radius: f32,
}
#[derive(Debug, Clone)]
pub struct KeyframeDotView {
pub dots: Vec<KeyframeDot>,
pub dot_color: [f32; 4],
pub selected_color: [f32; 4],
pub show_frame_numbers: bool,
pub enabled: bool,
}
impl KeyframeDotView {
pub fn new() -> Self {
KeyframeDotView {
dots: Vec::new(),
dot_color: [1.0, 0.8, 0.0, 1.0],
selected_color: [1.0, 0.3, 0.0, 1.0],
show_frame_numbers: false,
enabled: true,
}
}
}
impl Default for KeyframeDotView {
fn default() -> Self {
Self::new()
}
}
pub fn new_keyframe_dot_view() -> KeyframeDotView {
KeyframeDotView::new()
}
pub fn kdv_add_dot(view: &mut KeyframeDotView, dot: KeyframeDot) {
view.dots.push(dot);
}
pub fn kdv_clear(view: &mut KeyframeDotView) {
view.dots.clear();
}
pub fn kdv_set_dot_color(view: &mut KeyframeDotView, color: [f32; 4]) {
view.dot_color = color;
}
pub fn kdv_show_frame_numbers(view: &mut KeyframeDotView, show: bool) {
view.show_frame_numbers = show;
}
pub fn kdv_set_enabled(view: &mut KeyframeDotView, enabled: bool) {
view.enabled = enabled;
}
pub fn kdv_dot_count(view: &KeyframeDotView) -> usize {
view.dots.len()
}
pub fn kdv_to_json(view: &KeyframeDotView) -> String {
format!(
r#"{{"dot_count":{},"show_frame_numbers":{},"enabled":{}}}"#,
view.dots.len(),
view.show_frame_numbers,
view.enabled
)
}
#[cfg(test)]
mod tests {
use super::*;
fn make_dot(frame: f32) -> KeyframeDot {
KeyframeDot {
frame,
position: [0.0, 1.0, 0.0],
state: KeyframeDotState::Normal,
radius: 4.0,
}
}
#[test]
fn test_initial_empty() {
let v = new_keyframe_dot_view();
assert_eq!(kdv_dot_count(&v), 0 );
}
#[test]
fn test_add_dot() {
let mut v = new_keyframe_dot_view();
kdv_add_dot(&mut v, make_dot(0.0));
assert_eq!(kdv_dot_count(&v), 1 );
}
#[test]
fn test_clear() {
let mut v = new_keyframe_dot_view();
kdv_add_dot(&mut v, make_dot(1.0));
kdv_clear(&mut v);
assert_eq!(kdv_dot_count(&v), 0 );
}
#[test]
fn test_set_dot_color() {
let mut v = new_keyframe_dot_view();
kdv_set_dot_color(&mut v, [0.0, 1.0, 0.0, 1.0]);
assert!((v.dot_color[1] - 1.0).abs() < 1e-6 );
}
#[test]
fn test_show_frame_numbers() {
let mut v = new_keyframe_dot_view();
kdv_show_frame_numbers(&mut v, true);
assert!(v.show_frame_numbers );
}
#[test]
fn test_set_enabled() {
let mut v = new_keyframe_dot_view();
kdv_set_enabled(&mut v, false);
assert!(!v.enabled );
}
#[test]
fn test_to_json_has_dot_count() {
let v = new_keyframe_dot_view();
let j = kdv_to_json(&v);
assert!(j.contains("\"dot_count\"") );
}
#[test]
fn test_enabled_default() {
let v = new_keyframe_dot_view();
assert!(v.enabled );
}
#[test]
fn test_frame_numbers_default_false() {
let v = new_keyframe_dot_view();
assert!(!v.show_frame_numbers );
}
}