From c7d9229a0f1cc880ea8f9b0da772ca72b48094ef Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 14 Jun 2020 18:48:10 +0200 Subject: LibWeb: Reorganize layout algorithm Previously, layout recursively performed these steps (roughly): 1. Compute own width 2. Compute own position 3. Layout in-flow children 4. Compute own height 5. Layout absolutely positioned descendants However, step (2) was pretty inconsistent. Some things computed their own position, others had their parent do it for them, etc. To get closer to CSS spec language, and make things easier in general, this patch reorganizes the algorithm into: 1. Compute own width & height 2. Compute width & height of in-flow managed descendants 3. Move in-flow managed descendants to their final position 4. Layout absolutely positioned descendants Block layout is now driven by the containing block, which will iterate the descendants it's responsible for. There are a lot of inefficient patterns in this logic right now, but they can easily be replaced with better iteration functions once we settle on a long-term architecture. Since the ICB (LayoutDocument) is at (0, 0), it doesn't rely on a containing block to move it into place. This code is still evolving along with my understanding of CSS layout, so it's likely that we'll reorganize this again sooner or later. :^) --- Libraries/LibWeb/Layout/LayoutReplaced.h | 1 - 1 file changed, 1 deletion(-) (limited to 'Libraries/LibWeb/Layout/LayoutReplaced.h') diff --git a/Libraries/LibWeb/Layout/LayoutReplaced.h b/Libraries/LibWeb/Layout/LayoutReplaced.h index f3e9669f3b..c48102917b 100644 --- a/Libraries/LibWeb/Layout/LayoutReplaced.h +++ b/Libraries/LibWeb/Layout/LayoutReplaced.h @@ -62,7 +62,6 @@ protected: virtual void split_into_lines(LayoutBlock& container, LayoutMode) override; private: - Gfx::FloatPoint calculate_position(); float calculate_width() const; float calculate_height() const; -- cgit v1.2.3