mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
LibGfx+ImageViewer: Replace ImageDecoder::is_vector() with an enum
That makes it easier to extend to other special frame formats.
This commit is contained in:
parent
a47edb4ed1
commit
c997ee7b9d
Notes:
sideshowbarker
2024-07-16 20:51:53 +09:00
Author: https://github.com/nico Commit: https://github.com/SerenityOS/serenity/commit/c997ee7b9d Pull-request: https://github.com/SerenityOS/serenity/pull/22650 Reviewed-by: https://github.com/LucasChollet ✅
@ -224,7 +224,7 @@ ErrorOr<void> ViewWidget::try_open_file(String const& path, Core::File& file)
|
||||
Vector<Animation::Frame> frames;
|
||||
// Note: Doing this check only requires reading the header of images
|
||||
// (so if the image is not vector graphics it can be still be decoded OOP).
|
||||
if (auto decoder = Gfx::ImageDecoder::try_create_for_raw_bytes(file_data); decoder && decoder->is_vector()) {
|
||||
if (auto decoder = Gfx::ImageDecoder::try_create_for_raw_bytes(file_data); decoder && decoder->natural_frame_format() == Gfx::NaturalFrameFormat::Vector) {
|
||||
// Use in-process decoding for vector graphics.
|
||||
is_animated = decoder->is_animated();
|
||||
loop_count = decoder->loop_count();
|
||||
|
@ -28,6 +28,11 @@ struct VectorImageFrameDescriptor {
|
||||
int duration { 0 };
|
||||
};
|
||||
|
||||
enum class NaturalFrameFormat {
|
||||
RGB,
|
||||
Vector,
|
||||
};
|
||||
|
||||
class ImageDecoderPlugin {
|
||||
public:
|
||||
virtual ~ImageDecoderPlugin() = default;
|
||||
@ -53,7 +58,7 @@ public:
|
||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) = 0;
|
||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() { return OptionalNone {}; }
|
||||
|
||||
virtual bool is_vector() { return false; }
|
||||
virtual NaturalFrameFormat natural_frame_format() const { return NaturalFrameFormat::RGB; }
|
||||
virtual ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t) { VERIFY_NOT_REACHED(); }
|
||||
|
||||
protected:
|
||||
@ -75,7 +80,9 @@ public:
|
||||
ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) const { return m_plugin->frame(index, ideal_size); }
|
||||
ErrorOr<Optional<ReadonlyBytes>> icc_data() const { return m_plugin->icc_data(); }
|
||||
|
||||
bool is_vector() { return m_plugin->is_vector(); }
|
||||
NaturalFrameFormat natural_frame_format() { return m_plugin->natural_frame_format(); }
|
||||
|
||||
// Call only if natural_frame_format() == NaturalFrameFormat::Vector.
|
||||
ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t index) { return m_plugin->vector_frame(index); }
|
||||
|
||||
private:
|
||||
|
@ -83,7 +83,7 @@ public:
|
||||
virtual IntSize size() override;
|
||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||
|
||||
virtual bool is_vector() override { return true; }
|
||||
virtual NaturalFrameFormat natural_frame_format() const override { return NaturalFrameFormat::Vector; }
|
||||
virtual ErrorOr<VectorImageFrameDescriptor> vector_frame(size_t index) override;
|
||||
|
||||
virtual ~TinyVGImageDecoderPlugin() override = default;
|
||||
|
Loading…
Reference in New Issue
Block a user