TachyonUI 0.1.0
High-performance UI for building tools.
Loading...
Searching...
No Matches
gui_layout_grid.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4#include <span>
5#include <vector>
6
7namespace tachyon
8{
11
12 struct int2;
13 struct IntRect;
14 struct ElementRect;
15 struct GridProperties;
16 struct GridPlacement;
17 struct GridTrack;
18 struct GridLayout;
19
21 {
23 static int32_t HorizontalSizing(const ElementRect& parentRect,
24 std::span<const ElementRect> children);
25
27 static int32_t VerticalSizing(const ElementRect& parentRect,
28 std::span<const ElementRect> children);
29
30 static void HorizontalPositioning(const ElementRect& parentRect,
31 std::span<ElementRect> childRects);
32
34 static IntRect VerticalPositioning(const ElementRect& parentRect,
35 const IntRect& clipRect,
36 std::span<ElementRect> childRects);
37
38 private:
39 struct GridLayout
40 {
41 std::vector<int32_t> columnSizes;
42 std::vector<int32_t> rowSizes;
43 std::vector<int32_t> columnOffsets;
44 std::vector<int32_t> rowOffsets;
45 size_t effectiveColumnCount = 0;
46 size_t effectiveRowCount = 0;
47 };
48
50 struct GridPlacement
51 {
52 std::vector<int2> cellPositions;
53 size_t effectiveColumnCount = 0;
54 size_t effectiveRowCount = 0;
55 };
56
57 static void BuildTrackDefinitions(std::span<const ElementRect> childRects,
58 const GridPlacement& placement,
59 std::vector<GridTrack>& outColumnTracks,
60 std::vector<GridTrack>& outRowTracks);
61
63 static void DeterminePlacement(std::span<const ElementRect> childRects,
64 GridPlacement& outPlacement);
65
67 static void ComputeIntrinsicTrackSizes(std::span<const ElementRect> childRects,
68 const GridPlacement& placement,
69 std::vector<int32_t>& outColumnIntrinsics,
70 std::vector<int32_t>& outRowIntrinsics);
71
73 static void ResolveFinalLayout(const GridProperties& grid,
74 std::span<const ElementRect> childRects,
75 const GridPlacement& placement,
76 const std::span<int32_t> intrinsicColumnSizes,
77 const std::span<int32_t> intrinsicRowSizes,
78 int32_t availableWidth,
79 int32_t availableHeight,
80 GridLayout& outLayout);
81
82 static void ResolveTrackSizes(std::span<const GridTrack> tracks,
83 std::span<const int32_t> intrinsicSizes,
84 int32_t availableSpace,
85 std::span<int32_t> outSizes);
86
87 static void ComputeOffsets(std::span<const int32_t> sizes, int16_t gap,
88 std::span<int32_t> outOffsets);
89
91 static void ComputeGridLayout(const GridProperties& grid,
92 std::span<const ElementRect> childRects,
93 int32_t availableWidth,
94 int32_t availableHeight,
95 GridLayout& outLayout,
96 GridPlacement* outPlacement = nullptr);
97 };
98
100} // namespace tachyon
Definition gui_logging.h:24
Definition gui_element.h:57
Grid container and item properties.
Definition gui_style.h:423
Size of one grid column or row (CSS: -tachyon-grid-column-track / -row-track).
Definition gui_style.h:373
Definition gui_base_types.h:407
Definition gui_layout_grid.h:21
static int32_t VerticalSizing(const ElementRect &parentRect, std::span< const ElementRect > children)
Returns the content height required by the grid.
static void HorizontalPositioning(const ElementRect &parentRect, std::span< ElementRect > childRects)
static int32_t HorizontalSizing(const ElementRect &parentRect, std::span< const ElementRect > children)
Returns the content width required by the grid.
static IntRect VerticalPositioning(const ElementRect &parentRect, const IntRect &clipRect, std::span< ElementRect > childRects)
Returns the content bounds.
Integer 2D vector.
Definition gui_base_types.h:19