mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-01 20:17:13 +02:00
LibWeb: Make DecodedImageData an abstract class
The existing implementation moves down into a new subclass called AnimatedBitmapDecodedImageData. The purpose of this change is to create an extension point where we can plug in an SVG renderer. :^)
This commit is contained in:
Notes:
sideshowbarker
2024-07-17 02:05:41 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/4ee1e5b224 Pull-request: https://github.com/SerenityOS/serenity/pull/18943 Reviewed-by: https://github.com/winfr34k
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibWeb/HTML/DecodedImageData.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
class AnimatedBitmapDecodedImageData final : public DecodedImageData {
|
||||
public:
|
||||
struct Frame {
|
||||
RefPtr<Gfx::Bitmap const> bitmap;
|
||||
int duration { 0 };
|
||||
};
|
||||
|
||||
static ErrorOr<NonnullRefPtr<AnimatedBitmapDecodedImageData>> create(Vector<Frame>&&, size_t loop_count, bool animated);
|
||||
virtual ~AnimatedBitmapDecodedImageData() override;
|
||||
|
||||
virtual RefPtr<Gfx::Bitmap const> bitmap(size_t frame_index) const override;
|
||||
virtual int frame_duration(size_t frame_index) const override;
|
||||
|
||||
virtual size_t frame_count() const override { return m_frames.size(); }
|
||||
virtual size_t loop_count() const override { return m_loop_count; }
|
||||
virtual bool is_animated() const override { return m_animated; }
|
||||
|
||||
virtual Optional<int> natural_width() const override;
|
||||
virtual Optional<int> natural_height() const override;
|
||||
|
||||
private:
|
||||
AnimatedBitmapDecodedImageData(Vector<Frame>&&, size_t loop_count, bool animated);
|
||||
|
||||
Vector<Frame> m_frames;
|
||||
size_t m_loop_count { 0 };
|
||||
bool m_animated { false };
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user