introduce gif animation

Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
kernelkind
2025-02-25 16:02:37 -05:00
parent 0461a98d5d
commit 3e79f92291

View File

@@ -7,6 +7,7 @@ use egui::ColorImage;
use std::collections::HashMap;
use std::fs::{create_dir_all, File};
use std::sync::mpsc::Receiver;
use std::time::{Duration, Instant, SystemTime};
use hex::ToHex;
@@ -20,6 +21,37 @@ pub type MediaCacheMap = HashMap<String, MediaCacheValue>;
pub enum TexturedImage {
Static(TextureHandle),
Animated(Animation),
}
pub struct Animation {
pub first_frame: TextureFrame,
pub other_frames: Vec<TextureFrame>,
pub receiver: Option<Receiver<TextureFrame>>,
}
impl Animation {
pub fn get_frame(&self, index: usize) -> Option<&TextureFrame> {
if index == 0 {
Some(&self.first_frame)
} else {
self.other_frames.get(index - 1)
}
}
pub fn num_frames(&self) -> usize {
self.other_frames.len() + 1
}
}
pub struct TextureFrame {
pub delay: Duration,
pub texture: TextureHandle,
}
pub struct ImageFrame {
pub delay: Duration,
pub image: ColorImage,
}
pub struct MediaCache {
@@ -146,6 +178,7 @@ impl MediaCache {
pub fn get_texture(textured_image: &TexturedImage) -> &TextureHandle {
match textured_image {
TexturedImage::Static(texture_handle) => texture_handle,
TexturedImage::Animated(_animation) => todo!(), // Temporary...
}
}