DocumentTimeline.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2023, Matthew Olsson <mattco@serenityos.org>.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWeb/Animations/AnimationTimeline.h>
  8. #include <LibWeb/HighResolutionTime/DOMHighResTimeStamp.h>
  9. #include <LibWeb/WebIDL/ExceptionOr.h>
  10. namespace Web::Animations {
  11. // https://www.w3.org/TR/web-animations-1/#dictdef-documenttimelineoptions
  12. struct DocumentTimelineOptions {
  13. HighResolutionTime::DOMHighResTimeStamp origin_time { 0.0 };
  14. };
  15. // https://www.w3.org/TR/web-animations-1/#the-documenttimeline-interface
  16. class DocumentTimeline : public AnimationTimeline {
  17. WEB_PLATFORM_OBJECT(DocumentTimeline, AnimationTimeline);
  18. JS_DECLARE_ALLOCATOR(DocumentTimeline);
  19. public:
  20. static JS::NonnullGCPtr<DocumentTimeline> create(JS::Realm&, DOM::Document&, HighResolutionTime::DOMHighResTimeStamp origin_time);
  21. static WebIDL::ExceptionOr<JS::NonnullGCPtr<DocumentTimeline>> construct_impl(JS::Realm&, DocumentTimelineOptions options = {});
  22. virtual void set_current_time(Optional<double> current_time) override;
  23. virtual bool is_inactive() const override;
  24. virtual Optional<double> convert_a_timeline_time_to_an_origin_relative_time(Optional<double>) override;
  25. virtual bool can_convert_a_timeline_time_to_an_origin_relative_time() const override { return true; }
  26. private:
  27. DocumentTimeline(JS::Realm&, DOM::Document&, HighResolutionTime::DOMHighResTimeStamp origin_time);
  28. virtual ~DocumentTimeline() override = default;
  29. virtual void initialize(JS::Realm&) override;
  30. HighResolutionTime::DOMHighResTimeStamp m_origin_time;
  31. };
  32. }