65 std::swap(b.min_size_x, b.min_size_y);
66 std::swap(b.flex_grow_x, b.flex_grow_y);
67 std::swap(b.flex_shrink_x, b.flex_shrink_y);
69 std::swap(b.dim_x, b.dim_y);
71 for (
auto& l : g.
lines) {
73 std::swap(l.dim_x, l.dim_y);
80 b.x = g.
size_x - b.x - b.dim_x;
82 for (
auto& l : g.
lines) {
83 l.x = g.
size_x - l.x - l.dim_x;
90 b.y = g.
size_y - b.y - b.dim_y;
92 for (
auto& l : g.
lines) {
93 l.y = g.
size_y - l.y - l.dim_y;
98 for (
auto& line :
global.lines) {
99 std::vector<box_helper::Element>
elements;
100 elements.reserve(line.blocks.size());
101 for (
auto*
block : line.blocks) {
105 block->flex_grow_x != 0 ||
global.config.justify_content ==
115 global.size_x -
global.config.gap_x * (
int(line.blocks.size()) - 1));
118 for (
size_t i = 0; i < line.blocks.size(); ++i) {
119 line.blocks[i]->x = x;
120 line.blocks[i]->dim_x =
elements[i].size;
126 for (
auto& line :
global.lines) {
128 line.dim_x =
global.size_x;
134 std::vector<box_helper::Element>
elements;
136 for (
auto& line : g.
lines) {
138 element.
flex_shrink = line.blocks.front()->flex_shrink_y;
139 element.
flex_grow = line.blocks.front()->flex_grow_y;
140 for (
auto*
block : line.blocks) {
154 for (
size_t i = 0; i <
elements.size(); ++i) {
166 for (
size_t i = 0; i <
ys.size(); ++i) {
173 for (
size_t i = 0; i <
ys.size(); ++i) {
180 for (
int i =
static_cast<int>(
ys.size()) - 1; i >= 0; --i) {
191 for (
int i =
static_cast<int>(
ys.size()) - 1; i >= 1; --i) {
199 for (
int i =
static_cast<int>(
ys.size()) - 1; i >= 0; --i) {
207 for (
int i =
static_cast<int>(
ys.size()) - 1; i >= 0; --i) {
216 for (
size_t i = 0; i < g.
lines.size(); ++i) {
220 block->flex_grow_y != 0 ||
223 stretch ? element.size : std::min(element.size,
block->min_size_y);
245 block->dim_y = element.size;
253 for (
size_t i = 0; i < g.
lines.size(); ++i) {
259void JustifyContent(
Global& g) {
260 for (
auto& line : g.
lines) {
261 Block* last = line.blocks.back();
269 for (
auto*
block : line.blocks) {
276 for (
auto*
block : line.blocks) {
283 for (
int i = (
int)line.blocks.size() - 1; i >= 1; --i) {
291 for (
int i = (
int)line.blocks.size() - 1; i >= 0; --i) {
299 for (
int i = (
int)line.blocks.size() - 1; i >= 0; --i) {
343 if (!line.
blocks.empty()) {
344 global.lines.push_back(std::move(line));
349 block.line =
static_cast<int>(
global.lines.size());
350 block.line_position =
static_cast<int>(line.
blocks.size());
354 if (!line.
blocks.empty()) {
355 global.lines.push_back(std::move(line));