1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 20:17:42 +00:00

LibWeb: Move paint properties invalidation flag into Document

Move paint-only properties invalidation flag to Document for
consistency, as style and layout invalidation flags are already
managed there.
This commit is contained in:
Aliaksandr Kalenik 2024-02-08 17:23:14 +01:00 committed by Andreas Kling
parent 9bccb8c8d7
commit fc40d35012
5 changed files with 19 additions and 14 deletions

View file

@ -1060,10 +1060,8 @@ void Document::update_layout()
// Broadcast the current viewport rect to any new paintables, so they know whether they're visible or not.
inform_all_viewport_clients_about_the_current_viewport_rect();
if (navigable()) {
navigable()->set_needs_to_resolve_paint_only_properties();
navigable()->set_needs_display();
}
set_needs_to_resolve_paint_only_properties();
if (navigable()->is_traversable()) {
page().client().page_did_layout();
@ -1145,6 +1143,15 @@ void Document::update_style()
m_style_update_timer->stop();
}
void Document::update_paint_and_hit_testing_properties_if_needed()
{
if (!m_needs_to_resolve_paint_only_properties)
return;
m_needs_to_resolve_paint_only_properties = false;
if (auto* paintable = this->paintable())
paintable->resolve_paint_only_properties();
}
void Document::set_link_color(Color color)
{
m_link_color = color;

View file

@ -202,6 +202,7 @@ public:
void update_style();
void update_layout();
void update_paint_and_hit_testing_properties_if_needed();
void set_needs_layout();
@ -562,6 +563,8 @@ public:
Element const* element_from_point(double x, double y);
void set_needs_to_resolve_paint_only_properties() { m_needs_to_resolve_paint_only_properties = true; }
protected:
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
@ -785,6 +788,8 @@ private:
bool m_ready_to_run_scripts { false };
Vector<HTML::FormAssociatedElement*> m_form_associated_elements_with_form_attribute;
bool m_needs_to_resolve_paint_only_properties { true };
};
template<>

View file

@ -593,8 +593,8 @@ Element::RequiredInvalidationAfterStyleChange Element::recompute_style()
m_computed_css_values = move(new_computed_css_values);
computed_css_values_changed();
if (invalidation.repaint && document().navigable())
document().navigable()->set_needs_to_resolve_paint_only_properties();
if (invalidation.repaint)
document().set_needs_to_resolve_paint_only_properties();
if (!invalidation.rebuild_layout_tree && layout_node()) {
// If we're keeping the layout tree, we can just apply the new style to the existing layout tree.

View file

@ -2106,10 +2106,7 @@ void Navigable::paint(Painting::RecordingPainter& recording_painter, PaintConfig
context.set_should_paint_overlay(config.paint_overlay);
context.set_has_focus(config.has_focus);
if (m_needs_to_resolve_paint_only_properties) {
document->paintable()->resolve_paint_only_properties();
m_needs_to_resolve_paint_only_properties = false;
}
document->update_paint_and_hit_testing_properties_if_needed();
HashMap<Painting::PaintableBox const*, Painting::ViewportPaintable::ScrollFrame> scroll_frames;
if (is_traversable()) {

View file

@ -180,8 +180,6 @@ public:
};
void paint(Painting::RecordingPainter&, PaintConfig);
void set_needs_to_resolve_paint_only_properties() { m_needs_to_resolve_paint_only_properties = true; }
protected:
Navigable();
@ -223,8 +221,6 @@ private:
CSSPixelSize m_size;
CSSPixelPoint m_viewport_scroll_offset;
bool m_needs_to_resolve_paint_only_properties { true };
};
HashTable<Navigable*>& all_navigables();