/* * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::HTML { class AnimatedBitmapDecodedImageData final : public DecodedImageData { public: struct Frame { RefPtr bitmap; int duration { 0 }; }; static ErrorOr> create(Vector&&, size_t loop_count, bool animated); virtual ~AnimatedBitmapDecodedImageData() override; virtual RefPtr bitmap(size_t frame_index, Gfx::IntSize = {}) 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 intrinsic_width() const override; virtual Optional intrinsic_height() const override; virtual Optional intrinsic_aspect_ratio() const override; private: AnimatedBitmapDecodedImageData(Vector&&, size_t loop_count, bool animated); Vector m_frames; size_t m_loop_count { 0 }; bool m_animated { false }; }; }