/* * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::SVG { class SVGDecodedImageData final : public HTML::DecodedImageData { public: static ErrorOr> create(Page&, AK::URL const&, ByteBuffer encoded_svg); virtual ~SVGDecodedImageData() override; virtual RefPtr bitmap(size_t frame_index, Gfx::IntSize) const override; virtual Optional intrinsic_width() const override; virtual Optional intrinsic_height() const override; virtual Optional intrinsic_aspect_ratio() const override; // FIXME: Support SVG animations. :^) virtual int frame_duration(size_t) const override { return 0; } virtual size_t frame_count() const override { return 1; } virtual size_t loop_count() const override { return 0; } virtual bool is_animated() const override { return false; } DOM::Document const& svg_document() const { return *m_document; } private: class SVGPageClient; SVGDecodedImageData(NonnullOwnPtr, NonnullOwnPtr, JS::Handle, JS::Handle); void render(Gfx::IntSize) const; mutable RefPtr m_bitmap; NonnullOwnPtr m_page; NonnullOwnPtr m_page_client; JS::Handle m_document; JS::Handle m_root_element; }; }