/* * Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2024, Andreas Kling * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::HTML { class AnimationFrameCallbackDriver final : public JS::Cell { JS_CELL(AnimationFrameCallbackDriver, JS::Cell); JS_DECLARE_ALLOCATOR(AnimationFrameCallbackDriver); using Callback = JS::NonnullGCPtr>; public: [[nodiscard]] WebIDL::UnsignedLong add(Callback handler); bool remove(WebIDL::UnsignedLong); bool has_callbacks() const; void run(double now); private: virtual void visit_edges(Cell::Visitor&) override; // https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frame-callback-identifier WebIDL::UnsignedLong m_animation_frame_callback_identifier { 0 }; OrderedHashMap m_callbacks; OrderedHashMap m_executing_callbacks; }; }