infinipaint/src/ResourceDisplay/ImageResourceDisplay.hpp

41 lines
1.3 KiB
C++
Raw Normal View History

2025-07-06 20:43:53 +03:00
#pragma once
#include "ResourceDisplay.hpp"
#include <include/core/SkImage.h>
#include <vector>
2025-10-10 18:41:08 +03:00
#include <thread>
#include <include/codec/SkCodec.h>
2025-07-06 20:43:53 +03:00
class ImageResourceDisplay : public ResourceDisplay {
public:
virtual void update(World& w) override;
virtual bool load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) override;
2025-07-06 20:43:53 +03:00
virtual bool update_draw() const override;
virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override;
virtual Vector2f get_dimensions() const override;
virtual float get_dimension_scale() const override;
virtual Type get_type() const override;
2025-10-10 18:41:08 +03:00
virtual ~ImageResourceDisplay() override;
2025-07-06 20:43:53 +03:00
private:
struct FrameData {
sk_sp<SkImage> data;
float duration;
};
std::vector<FrameData> frames;
2025-10-10 18:41:08 +03:00
SkImageInfo imageInfo;
void load_thread();
int totalFramesToLoad;
std::atomic<int> loadedFrames = 0;
sk_sp<SkData> imageRawData;
std::unique_ptr<SkCodec> codec;
std::atomic<bool> shutdownLoadThread = false;
std::unique_ptr<std::thread> loadThread;
2025-07-06 20:43:53 +03:00
float currentTime = 0.0f;
2025-10-10 18:41:08 +03:00
int frameIndex = 0;
2025-07-06 20:43:53 +03:00
bool mustUpdateDraw = false;
2025-10-10 18:41:08 +03:00
bool loadedFirstFrame = false;
2025-07-06 20:43:53 +03:00
};