LibWeb: Remove cache for Paintable::is_visible()

...because it depends on computed values that could be changed without
rebuilding paintable tree.
This commit is contained in:
Aliaksandr Kalenik 2024-03-25 12:23:42 +01:00 committed by Andreas Kling
parent 61148e9bc2
commit 1036e104ef
Notes: sideshowbarker 2024-07-17 04:10:16 +09:00
4 changed files with 30 additions and 4 deletions

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="match" href="reference/change-opacity-ref.html" />
<style>
#box {
width: 100px;
height: 100px;
background-color: greenyellow;
opacity: 0;
}
</style>
<div id="box"></div>
<script>
document.getElementById("box").style.opacity = "1";
</script>

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<style>
#box {
width: 100px;
height: 100px;
background-color: greenyellow;
}
</style>
<div id="box"></div>

View file

@ -17,8 +17,6 @@ Paintable::Paintable(Layout::Node const& layout_node)
, m_browsing_context(const_cast<HTML::BrowsingContext&>(layout_node.browsing_context())) , m_browsing_context(const_cast<HTML::BrowsingContext&>(layout_node.browsing_context()))
{ {
auto& computed_values = layout_node.computed_values(); auto& computed_values = layout_node.computed_values();
m_visible = computed_values.visibility() == CSS::Visibility::Visible && computed_values.opacity() != 0;
if (layout_node.is_grid_item() && computed_values.z_index().has_value()) { if (layout_node.is_grid_item() && computed_values.z_index().has_value()) {
// https://www.w3.org/TR/css-grid-2/#z-order // https://www.w3.org/TR/css-grid-2/#z-order
// grid items with z_index should behave as if position were "relative" // grid items with z_index should behave as if position were "relative"
@ -48,6 +46,12 @@ void Paintable::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_containing_block.value()); visitor.visit(m_containing_block.value());
} }
bool Paintable::is_visible() const
{
auto const& computed_values = this->computed_values();
return computed_values.visibility() == CSS::Visibility::Visible && computed_values.opacity() != 0;
}
void Paintable::set_dom_node(JS::GCPtr<DOM::Node> dom_node) void Paintable::set_dom_node(JS::GCPtr<DOM::Node> dom_node)
{ {
m_dom_node = dom_node; m_dom_node = dom_node;

View file

@ -56,7 +56,7 @@ class Paintable
public: public:
virtual ~Paintable(); virtual ~Paintable();
[[nodiscard]] bool is_visible() const { return m_visible; } [[nodiscard]] bool is_visible() const;
[[nodiscard]] bool is_positioned() const { return m_positioned; } [[nodiscard]] bool is_positioned() const { return m_positioned; }
[[nodiscard]] bool is_fixed_position() const { return m_fixed_position; } [[nodiscard]] bool is_fixed_position() const { return m_fixed_position; }
[[nodiscard]] bool is_absolutely_positioned() const { return m_absolutely_positioned; } [[nodiscard]] bool is_absolutely_positioned() const { return m_absolutely_positioned; }
@ -233,7 +233,6 @@ private:
SelectionState m_selection_state { SelectionState::None }; SelectionState m_selection_state { SelectionState::None };
bool m_visible : 1 { false };
bool m_positioned : 1 { false }; bool m_positioned : 1 { false };
bool m_fixed_position : 1 { false }; bool m_fixed_position : 1 { false };
bool m_absolutely_positioned : 1 { false }; bool m_absolutely_positioned : 1 { false };