CSSTransition.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Copyright (c) 2024, Matthew Olsson <mattco@serenityos.org>
  3. * Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibWeb/Animations/Animation.h>
  9. #include <LibWeb/CSS/CSSStyleValue.h>
  10. #include <LibWeb/CSS/PropertyID.h>
  11. #include <LibWeb/CSS/StyleValues/EasingStyleValue.h>
  12. #include <LibWeb/CSS/Time.h>
  13. namespace Web::CSS {
  14. class CSSTransition : public Animations::Animation {
  15. WEB_PLATFORM_OBJECT(CSSTransition, Animations::Animation);
  16. JS_DECLARE_ALLOCATOR(CSSTransition);
  17. public:
  18. static JS::NonnullGCPtr<CSSTransition> start_a_transition(DOM::Element&, PropertyID, size_t transition_generation,
  19. double start_time, double end_time, NonnullRefPtr<CSSStyleValue const> start_value, NonnullRefPtr<CSSStyleValue const> end_value,
  20. NonnullRefPtr<CSSStyleValue const> reversing_adjusted_start_value, double reversing_shortening_factor);
  21. StringView transition_property() const { return string_from_property_id(m_transition_property); }
  22. virtual Animations::AnimationClass animation_class() const override;
  23. virtual Optional<int> class_specific_composite_order(JS::NonnullGCPtr<Animations::Animation> other) const override;
  24. double transition_start_time() const { return m_start_time; }
  25. double transition_end_time() const { return m_end_time; }
  26. NonnullRefPtr<CSSStyleValue const> transition_start_value() const { return m_start_value; }
  27. NonnullRefPtr<CSSStyleValue const> transition_end_value() const { return m_end_value; }
  28. NonnullRefPtr<CSSStyleValue const> reversing_adjusted_start_value() const { return m_reversing_adjusted_start_value; }
  29. double reversing_shortening_factor() const { return m_reversing_shortening_factor; }
  30. double timing_function_output_at_time(double t) const;
  31. NonnullRefPtr<CSSStyleValue const> value_at_time(double t) const;
  32. private:
  33. CSSTransition(JS::Realm&, DOM::Element&, PropertyID, size_t transition_generation,
  34. double start_time, double end_time, NonnullRefPtr<CSSStyleValue const> start_value, NonnullRefPtr<CSSStyleValue const> end_value,
  35. NonnullRefPtr<CSSStyleValue const> reversing_adjusted_start_value, double reversing_shortening_factor);
  36. virtual void initialize(JS::Realm&) override;
  37. virtual void visit_edges(Cell::Visitor&) override;
  38. virtual bool is_css_transition() const override { return true; }
  39. PropertyID m_transition_property;
  40. // https://drafts.csswg.org/css-transitions-2/#transition-generation
  41. size_t m_transition_generation;
  42. // https://drafts.csswg.org/css-transitions/#transition-start-time
  43. double m_start_time;
  44. // https://drafts.csswg.org/css-transitions/#transition-end-time
  45. double m_end_time;
  46. // https://drafts.csswg.org/css-transitions/#transition-start-value
  47. NonnullRefPtr<CSS::CSSStyleValue const> m_start_value;
  48. // https://drafts.csswg.org/css-transitions/#transition-end-value
  49. NonnullRefPtr<CSS::CSSStyleValue const> m_end_value;
  50. // https://drafts.csswg.org/css-transitions/#transition-reversing-adjusted-start-value
  51. NonnullRefPtr<CSS::CSSStyleValue const> m_reversing_adjusted_start_value;
  52. // https://drafts.csswg.org/css-transitions/#transition-reversing-shortening-factor
  53. double m_reversing_shortening_factor;
  54. JS::NonnullGCPtr<Animations::KeyframeEffect> m_keyframe_effect;
  55. JS::GCPtr<CSS::CSSStyleDeclaration const> m_cached_declaration;
  56. };
  57. }