ladybird/Libraries/LibWeb/Layout/GridLayoutData.h
Sam Atkins 540b53ac1a LibWeb: Preserve grid layout geometry for DevTools
Store grid container layout data on the grid container's paintable box
during layout.

The data includes computed track, line, and named-area geometry for
Firefox DevTools protocol serialization. It also carries the resolved
grid-template-columns and grid-template-rows values used by
getComputedStyle(), so PaintableBox does not need separate grid
template storage.
2026-05-27 17:47:50 +01:00

74 lines
1.6 KiB
C++

/*
* Copyright (c) 2026, Ladybird contributors
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/RefPtr.h>
#include <AK/String.h>
#include <AK/Vector.h>
#include <LibWeb/CSS/Enums.h>
#include <LibWeb/Forward.h>
#include <LibWeb/PixelUnits.h>
namespace Web::Layout {
enum class GridTrackType : u8 {
Explicit,
Implicit,
};
enum class GridTrackState : u8 {
Static,
Repeat,
Removed,
};
struct GridLayoutLine {
Vector<String> names;
CSSPixels start { 0 };
CSSPixels breadth { 0 };
GridTrackType type { GridTrackType::Implicit };
u32 number { 0 };
i32 negative_number { 0 };
};
struct GridLayoutTrack {
CSSPixels start { 0 };
CSSPixels breadth { 0 };
GridTrackType type { GridTrackType::Implicit };
GridTrackState state { GridTrackState::Static };
};
struct GridLayoutArea {
String name;
GridTrackType type { GridTrackType::Explicit };
u32 row_start { 0 };
u32 row_end { 0 };
u32 column_start { 0 };
u32 column_end { 0 };
};
struct GridLayoutDimension {
Vector<GridLayoutLine> lines;
Vector<GridLayoutTrack> tracks;
};
struct GridLayoutFragment {
Vector<GridLayoutArea> areas;
GridLayoutDimension columns;
GridLayoutDimension rows;
};
struct GridLayoutData {
CSS::Direction direction { CSS::Direction::Ltr };
CSS::WritingMode writing_mode { CSS::WritingMode::HorizontalTb };
bool is_subgrid { false };
RefPtr<CSS::GridTrackSizeListStyleValue const> resolved_grid_template_columns;
RefPtr<CSS::GridTrackSizeListStyleValue const> resolved_grid_template_rows;
Vector<GridLayoutFragment> fragments;
};
}