/* * Copyright (c) 2025, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::DOM { class StyleInvalidator : public GC::Cell { GC_CELL(StyleInvalidator, GC::Cell); GC_DECLARE_ALLOCATOR(StyleInvalidator); public: void invalidate(Node& node); void add_pending_invalidation(GC::Ref, CSS::InvalidationSet&&, bool invalidate_elements_that_use_css_custom_properties); bool has_pending_invalidations() const { return !m_pending_invalidations.is_empty(); } virtual void visit_edges(Cell::Visitor& visitor) override; private: void perform_pending_style_invalidations(Node& node, bool invalidate_entire_subtree); struct PendingInvalidation { bool invalidate_elements_that_use_css_custom_properties { false }; CSS::InvalidationSet invalidation_set; }; HashMap, PendingInvalidation> m_pending_invalidations; Vector m_subtree_invalidation_sets; bool m_invalidate_elements_that_use_css_custom_properties { false }; }; }