#pragma once #include "../lvgl_image.h" #include "gifdec.h" #include #include #include /** * 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 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 frame_callback_; /** * Update to next frame */ void NextFrame(); /** * Cleanup resources */ void Cleanup(); };