forked from xiaozhi/xiaozhi-esp32
102 lines
1.7 KiB
C++
102 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "../lvgl_image.h"
|
|
#include "gifdec.h"
|
|
#include <lvgl.h>
|
|
#include <memory>
|
|
#include <functional>
|
|
|
|
/**
|
|
* C++ implementation of LVGL GIF widget
|
|
* Provides GIF animation functionality using gifdec library
|
|
*/
|
|
class LvglGif {
|
|
public:
|
|
explicit LvglGif(const lv_img_dsc_t* img_dsc);
|
|
virtual ~LvglGif();
|
|
|
|
// LvglImage interface implementation
|
|
virtual const lv_img_dsc_t* image_dsc() const;
|
|
|
|
/**
|
|
* Start/restart GIF animation
|
|
*/
|
|
void Start();
|
|
|
|
/**
|
|
* Pause GIF animation
|
|
*/
|
|
void Pause();
|
|
|
|
/**
|
|
* Resume GIF animation
|
|
*/
|
|
void Resume();
|
|
|
|
/**
|
|
* Stop GIF animation and rewind to first frame
|
|
*/
|
|
void Stop();
|
|
|
|
/**
|
|
* Check if GIF is currently playing
|
|
*/
|
|
bool IsPlaying() const;
|
|
|
|
/**
|
|
* Check if GIF was loaded successfully
|
|
*/
|
|
bool IsLoaded() const;
|
|
|
|
/**
|
|
* Get loop count
|
|
*/
|
|
int32_t GetLoopCount() const;
|
|
|
|
/**
|
|
* Set loop count
|
|
*/
|
|
void SetLoopCount(int32_t count);
|
|
|
|
/**
|
|
* Get GIF dimensions
|
|
*/
|
|
uint16_t width() const;
|
|
uint16_t height() const;
|
|
|
|
/**
|
|
* Set frame update callback
|
|
*/
|
|
void SetFrameCallback(std::function<void()> callback);
|
|
|
|
private:
|
|
// GIF decoder instance
|
|
gd_GIF* gif_;
|
|
|
|
// LVGL image descriptor
|
|
lv_img_dsc_t img_dsc_;
|
|
|
|
// Animation timer
|
|
lv_timer_t* timer_;
|
|
|
|
// Last frame update time
|
|
uint32_t last_call_;
|
|
|
|
// Animation state
|
|
bool playing_;
|
|
bool loaded_;
|
|
|
|
// Frame update callback
|
|
std::function<void()> frame_callback_;
|
|
|
|
/**
|
|
* Update to next frame
|
|
*/
|
|
void NextFrame();
|
|
|
|
/**
|
|
* Cleanup resources
|
|
*/
|
|
void Cleanup();
|
|
};
|