/* * Copyright (c) 2023, Matthew Olsson . * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::Animations { // https://www.w3.org/TR/web-animations-1/#dictdef-documenttimelineoptions struct DocumentTimelineOptions { HighResolutionTime::DOMHighResTimeStamp origin_time { 0.0 }; }; // https://www.w3.org/TR/web-animations-1/#the-documenttimeline-interface class DocumentTimeline : public AnimationTimeline { WEB_PLATFORM_OBJECT(DocumentTimeline, AnimationTimeline); JS_DECLARE_ALLOCATOR(DocumentTimeline); public: static JS::NonnullGCPtr create(JS::Realm&, DOM::Document&, HighResolutionTime::DOMHighResTimeStamp origin_time); static WebIDL::ExceptionOr> construct_impl(JS::Realm&, DocumentTimelineOptions options = {}); virtual void set_current_time(Optional current_time) override; virtual bool is_inactive() const override; virtual Optional convert_a_timeline_time_to_an_origin_relative_time(Optional) override; virtual bool can_convert_a_timeline_time_to_an_origin_relative_time() const override { return true; } private: DocumentTimeline(JS::Realm&, DOM::Document&, HighResolutionTime::DOMHighResTimeStamp origin_time); virtual ~DocumentTimeline() override = default; virtual void initialize(JS::Realm&) override; HighResolutionTime::DOMHighResTimeStamp m_origin_time; }; }