rendertarget multi frame rewrite
This commit is contained in:
parent
7f46ac13fa
commit
2b22c16ce7
13 changed files with 225 additions and 276 deletions
|
|
@ -20,19 +20,52 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
export module Crafter.Graphics:GridElement;
|
||||
import std;
|
||||
import :Transform2D;
|
||||
import :Types;
|
||||
import :ForwardDeclarations;
|
||||
|
||||
export namespace Crafter {
|
||||
class GridElement : public Transform2D {
|
||||
public:
|
||||
struct GridElement : Transform2D {
|
||||
std::uint32_t columns;
|
||||
std::uint32_t rows;
|
||||
std::int32_t spacingX;
|
||||
std::int32_t spacingY;
|
||||
std::int32_t paddingX;
|
||||
std::int32_t paddingY;
|
||||
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);
|
||||
void UpdatePositionScaled(RendertargetBase& window);
|
||||
void UpdatePosition(RendertargetBase& window, Transform2D& parent) override;
|
||||
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) {
|
||||
|
||||
}
|
||||
template<std::uint8_t Frames>
|
||||
void UpdatePositionImpl(RendertargetBase<Frames>& window, Transform2D& parent) {
|
||||
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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
void UpdatePosition(RendertargetBase<1>& window, Transform2D& parent) override {
|
||||
UpdatePositionImpl<1>(window, parent);
|
||||
}
|
||||
void UpdatePosition(RendertargetBase<3>& window, Transform2D& parent) override {
|
||||
UpdatePositionImpl<3>(window, parent);
|
||||
}
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue