2025-11-27 00:27:13 +01:00
|
|
|
/*
|
|
|
|
|
Crafter®.Graphics
|
2026-03-09 20:10:19 +01:00
|
|
|
Copyright (C) 2026 Catcrafts®
|
2025-11-27 00:27:13 +01:00
|
|
|
catcrafts.net
|
|
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
License version 3.0 as published by the Free Software Foundation;
|
|
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
License along with this library; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
export module Crafter.Graphics:GridElement;
|
|
|
|
|
import std;
|
2026-03-09 20:10:19 +01:00
|
|
|
import :Transform2D;
|
2026-03-12 21:13:53 +01:00
|
|
|
import :ForwardDeclarations;
|
2025-11-27 00:27:13 +01:00
|
|
|
|
|
|
|
|
export namespace Crafter {
|
2026-03-12 21:13:53 +01:00
|
|
|
struct GridElement : Transform2D {
|
2025-12-30 23:28:38 +01:00
|
|
|
std::uint32_t columns;
|
|
|
|
|
std::uint32_t rows;
|
|
|
|
|
std::int32_t spacingX;
|
|
|
|
|
std::int32_t spacingY;
|
|
|
|
|
std::int32_t paddingX;
|
|
|
|
|
std::int32_t paddingY;
|
2026-03-12 21:13:53 +01:00
|
|
|
GridElement(std::uint32_t columns, std::uint32_t rows, std::int32_t spacingX, std::int32_t spacingY, std::int32_t paddingX, std::int32_t paddingY, Anchor2D anchor) : Transform2D(anchor), columns(columns), rows(rows), spacingX(spacingX), spacingY(spacingY), paddingX(paddingX), paddingY(paddingY) {
|
|
|
|
|
|
|
|
|
|
}
|
2026-04-11 18:48:00 +02:00
|
|
|
void UpdatePosition(RendertargetBase& window, Transform2D& parent) override {
|
2026-03-12 21:13:53 +01:00
|
|
|
ScaleElement(parent);
|
|
|
|
|
std::int32_t cellWidth = (paddingX * 2) - (spacingX * (columns - 1)) / columns;
|
|
|
|
|
std::int32_t cellHeight = (paddingY * 2) - (spacingY * (rows - 1)) / rows;
|
|
|
|
|
|
|
|
|
|
std::size_t childIndex = 0;
|
|
|
|
|
for (std::uint32_t row = 0; row < rows && childIndex < this->children.size(); ++row) {
|
|
|
|
|
for (std::uint32_t col = 0; col < columns && childIndex < this->children.size(); ++col) {
|
|
|
|
|
Transform2D* child = this->children[childIndex];
|
|
|
|
|
|
|
|
|
|
// Calculate position for this child
|
|
|
|
|
std::int32_t childX = (cellWidth * col) + (spacingX * col) + paddingX;
|
|
|
|
|
|
|
|
|
|
std::int32_t childY = (cellHeight * row) + (spacingY * row) + paddingY;
|
|
|
|
|
|
|
|
|
|
// Apply relative positioning
|
|
|
|
|
child->anchor.x = childX;
|
|
|
|
|
child->anchor.y = childY;
|
|
|
|
|
child->anchor.width = cellWidth;
|
|
|
|
|
child->anchor.height = cellHeight;
|
|
|
|
|
|
|
|
|
|
// Update child position
|
|
|
|
|
child->UpdatePosition(window, *this);
|
|
|
|
|
childIndex++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-11-27 00:27:13 +01:00
|
|
|
};
|
|
|
|
|
}
|