CSSMediaRule.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWeb/CSS/CSSConditionRule.h>
  8. #include <LibWeb/CSS/MediaList.h>
  9. #include <LibWeb/Forward.h>
  10. namespace Web::CSS {
  11. // https://www.w3.org/TR/css-conditional-3/#the-cssmediarule-interface
  12. class CSSMediaRule final : public CSSConditionRule {
  13. AK_MAKE_NONCOPYABLE(CSSMediaRule);
  14. AK_MAKE_NONMOVABLE(CSSMediaRule);
  15. public:
  16. static NonnullRefPtr<CSSMediaRule> create(NonnullRefPtr<MediaList>&& media_queries, NonnullRefPtrVector<CSSRule>&& rules)
  17. {
  18. return adopt_ref(*new CSSMediaRule(move(media_queries), move(rules)));
  19. }
  20. ~CSSMediaRule() = default;
  21. virtual StringView class_name() const override { return "CSSMediaRule"; };
  22. virtual Type type() const override { return Type::Media; };
  23. virtual String condition_text() const override;
  24. virtual void set_condition_text(String) override;
  25. virtual bool condition_matches() const override { return m_media->matches(); }
  26. NonnullRefPtr<MediaList> const& media() const { return m_media; }
  27. bool evaluate(HTML::Window const& window) { return m_media->evaluate(window); }
  28. private:
  29. explicit CSSMediaRule(NonnullRefPtr<MediaList>&&, NonnullRefPtrVector<CSSRule>&&);
  30. virtual String serialized() const override;
  31. NonnullRefPtr<MediaList> m_media;
  32. };
  33. template<>
  34. inline bool CSSRule::fast_is<CSSMediaRule>() const { return type() == CSSRule::Type::Media; }
  35. }