IntersectionObserverEntry.h 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright (c) 2023, Luke Wilde <lukew@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWeb/Bindings/PlatformObject.h>
  8. #include <LibWeb/Geometry/DOMRect.h>
  9. #include <LibWeb/HighResolutionTime/DOMHighResTimeStamp.h>
  10. namespace Web::IntersectionObserver {
  11. struct IntersectionObserverEntryInit {
  12. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-time
  13. HighResolutionTime::DOMHighResTimeStamp time { 0.0 };
  14. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-rootbounds
  15. Optional<Geometry::DOMRectInit> root_bounds;
  16. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-boundingclientrect
  17. Geometry::DOMRectInit bounding_client_rect;
  18. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-intersectionrect
  19. Geometry::DOMRectInit intersection_rect;
  20. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-isintersecting
  21. bool is_intersecting { false };
  22. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-intersectionratio
  23. double intersection_ratio { 0.0 };
  24. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-target
  25. JS::Handle<DOM::Element> target;
  26. };
  27. class IntersectionObserverEntry final : public Bindings::PlatformObject {
  28. WEB_PLATFORM_OBJECT(IntersectionObserverEntry, Bindings::PlatformObject);
  29. public:
  30. static WebIDL::ExceptionOr<JS::NonnullGCPtr<IntersectionObserverEntry>> construct_impl(JS::Realm&, IntersectionObserverEntryInit const& options);
  31. virtual ~IntersectionObserverEntry() override;
  32. HighResolutionTime::DOMHighResTimeStamp time() const { return m_time; }
  33. JS::GCPtr<Geometry::DOMRectReadOnly> root_bounds() const { return m_root_bounds; }
  34. JS::NonnullGCPtr<Geometry::DOMRectReadOnly> bounding_client_rect() const { return m_bounding_client_rect; }
  35. JS::NonnullGCPtr<Geometry::DOMRectReadOnly> intersection_rect() const { return m_intersection_rect; }
  36. bool is_intersecting() const { return m_is_intersecting; }
  37. double intersection_ratio() const { return m_intersection_ratio; }
  38. JS::NonnullGCPtr<DOM::Element> target() const { return m_target; }
  39. private:
  40. IntersectionObserverEntry(JS::Realm&, HighResolutionTime::DOMHighResTimeStamp time, JS::GCPtr<Geometry::DOMRectReadOnly> root_bounds, JS::NonnullGCPtr<Geometry::DOMRectReadOnly> bounding_client_rect, JS::NonnullGCPtr<Geometry::DOMRectReadOnly> intersection_rect, bool is_intersecting, double intersection_ratio, JS::NonnullGCPtr<DOM::Element> target);
  41. virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
  42. virtual void visit_edges(JS::Cell::Visitor&) override;
  43. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-time
  44. HighResolutionTime::DOMHighResTimeStamp m_time { 0.0 };
  45. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-rootbounds
  46. JS::GCPtr<Geometry::DOMRectReadOnly> m_root_bounds;
  47. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-boundingclientrect
  48. JS::NonnullGCPtr<Geometry::DOMRectReadOnly> m_bounding_client_rect;
  49. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-intersectionrect
  50. JS::NonnullGCPtr<Geometry::DOMRectReadOnly> m_intersection_rect;
  51. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-isintersecting
  52. bool m_is_intersecting { false };
  53. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-intersectionratio
  54. double m_intersection_ratio { 0.0 };
  55. // https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverentry-target
  56. JS::NonnullGCPtr<DOM::Element> m_target;
  57. };
  58. }