/* * Copyright (c) 2026, Callum Law * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::HTML { class AnimatedDecodedImageData : public DecodedImageData { GC_CELL(AnimatedDecodedImageData, DecodedImageData); GC_DECLARE_ALLOCATOR(AnimatedDecodedImageData); public: virtual void visit_edges(Cell::Visitor&) override; virtual void restart_animation() override; protected: AnimatedDecodedImageData(GC::Ref); virtual void start_animation() = 0; virtual void reset_animation() = 0; virtual void stop_animation() = 0; virtual void on_client_registered() override; private: void start_animation_if_needed(); GC::Ref m_document_observer; bool m_should_start_animation_on_client_registration { true }; }; }