oh yeah its rewrite time
This commit is contained in:
parent
02a6a64c56
commit
1c4f476f18
7 changed files with 183 additions and 154 deletions
|
|
@ -31,37 +31,41 @@ import std;
|
|||
|
||||
using namespace Crafter;
|
||||
|
||||
Transform::Transform(std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : anchorX(anchorX), anchorY(anchorY), relativeWidth(relativeWidth), relativeHeight(relativeHeight), anchorOffsetX(anchorOffsetX), anchorOffsetY(anchorOffsetY), z(z), ignoreScaling(ignoreScaling) {
|
||||
Transform::Transform(void* element, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : element(element), anchorX(anchorX), anchorY(anchorY), relativeWidth(relativeWidth), relativeHeight(relativeHeight), anchorOffsetX(anchorOffsetX), anchorOffsetY(anchorOffsetY), z(z), ignoreScaling(ignoreScaling) {
|
||||
|
||||
}
|
||||
|
||||
UiElement::UiElement(std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouseTransform(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
RenderingElement::RenderingElement(std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(this, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||
|
||||
}
|
||||
|
||||
UiElement::UiElement(std::uint_fast32_t bufferWidth, std::uint_fast32_t bufferHeight, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), bufferWidth(bufferWidth), bufferHeight(bufferHeight), buffer(bufferWidth*bufferHeight), mouseTransform(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
RenderingElement::RenderingElement(std::uint_fast32_t bufferWidth, std::uint_fast32_t bufferHeight, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : bufferWidth(bufferWidth), bufferHeight(bufferHeight), buffer(bufferWidth*bufferHeight), transform(this, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||
|
||||
}
|
||||
|
||||
UiElement::UiElement(const std::string_view imagePath, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouseTransform(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
RenderingElement::RenderingElement(const std::string_view imagePath, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(this, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||
RenderImage(imagePath);
|
||||
}
|
||||
|
||||
UiElement::UiElement(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouseTransform(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
RenderingElement::RenderingElement(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(this, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||
RenderText(text, size, pixel, font);
|
||||
}
|
||||
|
||||
UiElement::UiElement(Transform transform) : transform(transform), mouseTransform(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
RenderingElement::RenderingElement(Transform transform) : transform(transform) {
|
||||
|
||||
}
|
||||
|
||||
void UiElement::ResizeBuffer(std::uint_fast32_t width, std::uint_fast32_t height) {
|
||||
RenderingElement::RenderingElement(Transform transform, std::uint_fast32_t bufferWidth, std::uint_fast32_t bufferHeight) : transform(transform), bufferWidth(bufferWidth), bufferHeight(bufferHeight), buffer(bufferWidth*bufferHeight) {
|
||||
|
||||
}
|
||||
|
||||
void RenderingElement::ResizeBuffer(std::uint_fast32_t width, std::uint_fast32_t height) {
|
||||
this->bufferWidth = width;
|
||||
this->bufferHeight = height;
|
||||
buffer.resize(width * height);
|
||||
}
|
||||
|
||||
void UiElement::RenderImage(const std::string_view path) {
|
||||
void RenderingElement::RenderImage(const std::string_view path) {
|
||||
std::filesystem::path abs = std::filesystem::absolute(path);
|
||||
int xSize;
|
||||
int ySize;
|
||||
|
|
@ -80,7 +84,7 @@ void UiElement::RenderImage(const std::string_view path) {
|
|||
}
|
||||
}
|
||||
|
||||
void UiElement::RenderText(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 color, Font& font) {
|
||||
void RenderingElement::RenderText(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 color, Font& font) {
|
||||
buffer.clear();
|
||||
|
||||
float scale = stbtt_ScaleForPixelHeight(&font.font, size);
|
||||
|
|
@ -127,25 +131,7 @@ void UiElement::RenderText(const std::string_view text, float size, Pixel_BU8_GU
|
|||
}
|
||||
}
|
||||
|
||||
void UiElement::UpdatePosition(Window& window) {
|
||||
window.ScaleElement(transform);
|
||||
scaled.resize(transform.scaled.width * transform.scaled.height);
|
||||
CopyNearestNeighbour(scaled.data(), transform.scaled.width, transform.scaled.height);
|
||||
for(UiElement* child : children) {
|
||||
child->UpdatePosition(window, *this);
|
||||
}
|
||||
}
|
||||
|
||||
void UiElement::UpdatePosition(Window& window, UiElement& parent) {
|
||||
window.ScaleElement(transform, parent.transform);
|
||||
scaled.resize(transform.scaled.width * transform.scaled.height);
|
||||
CopyNearestNeighbour(scaled.data(),transform.scaled.width, transform.scaled.height);
|
||||
for(UiElement* child : children) {
|
||||
UpdatePosition(window, *child);
|
||||
}
|
||||
}
|
||||
|
||||
void UiElement::CopyNearestNeighbour(Pixel_BU8_GU8_RU8_AU8* dst, std::uint_fast32_t dstWidth, std::uint_fast32_t dstHeight) const {
|
||||
void RenderingElement::CopyNearestNeighbour(Pixel_BU8_GU8_RU8_AU8* dst, std::uint_fast32_t dstWidth, std::uint_fast32_t dstHeight) const {
|
||||
for (std::uint_fast32_t y = 0; y < dstHeight; y++) {
|
||||
std::uint_fast32_t srcY = y * bufferHeight / dstHeight;
|
||||
for (std::uint_fast32_t x = 0; x < dstWidth; x++) {
|
||||
|
|
@ -153,4 +139,73 @@ void UiElement::CopyNearestNeighbour(Pixel_BU8_GU8_RU8_AU8* dst, std::uint_fast3
|
|||
dst[y * dstWidth + x] = buffer[srcY * bufferWidth + srcX];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RenderingElement::UpdatePosition(Window& window) {
|
||||
window.ScaleElement(transform);
|
||||
scaled.resize(transform.scaled.width * transform.scaled.height);
|
||||
CopyNearestNeighbour(scaled.data(), transform.scaled.width, transform.scaled.height);
|
||||
for(Transform* child : transform.children) {
|
||||
reinterpret_cast<RenderingElement*>(child->element)->UpdatePosition(window, transform);
|
||||
}
|
||||
}
|
||||
|
||||
void RenderingElement::UpdatePosition(Window& window, Transform& parent) {
|
||||
window.ScaleElement(transform, parent);
|
||||
scaled.resize(transform.scaled.width * transform.scaled.height);
|
||||
CopyNearestNeighbour(scaled.data(), transform.scaled.width, transform.scaled.height);
|
||||
for(Transform* child : transform.children) {
|
||||
reinterpret_cast<RenderingElement*>(child->element)->UpdatePosition(window, transform);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MouseElement implementation
|
||||
MouseElement::MouseElement(std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : transform(this, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||
|
||||
}
|
||||
|
||||
MouseElement::MouseElement(Transform transform) : transform(transform) {
|
||||
|
||||
}
|
||||
|
||||
void MouseElement::UpdatePosition(Window& window) {
|
||||
window.ScaleMouse(transform);
|
||||
for(Transform* child : transform.children) {
|
||||
reinterpret_cast<MouseElement*>(child->element)->UpdatePosition(window, transform);
|
||||
}
|
||||
}
|
||||
|
||||
void MouseElement::UpdatePosition(Window& window, Transform& parent) {
|
||||
window.ScaleMouse(transform, parent);
|
||||
for(Transform* child : transform.children) {
|
||||
reinterpret_cast<MouseElement*>(child->element)->UpdatePosition(window, transform);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
RenderingMouseElement::RenderingMouseElement(std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : rendering(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouse(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
|
||||
}
|
||||
|
||||
RenderingMouseElement::RenderingMouseElement(std::uint_fast32_t bufferWidth, std::uint_fast32_t bufferHeight, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : rendering(bufferWidth, bufferHeight, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouse(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
|
||||
}
|
||||
|
||||
RenderingMouseElement::RenderingMouseElement(const std::string_view imagePath, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : rendering(imagePath, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouse(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
|
||||
}
|
||||
|
||||
RenderingMouseElement::RenderingMouseElement(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font, std::int_fast32_t anchorX, std::int_fast32_t anchorY, std::uint_fast32_t relativeWidth, std::uint_fast32_t relativeHeight, std::int_fast32_t anchorOffsetX, std::int_fast32_t anchorOffsetY, std::int_fast32_t z, bool ignoreScaling) : rendering(text, size, pixel, font, anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), mouse(FractionalToMapped(0), FractionalToMapped(0), FractionalToMapped(1), FractionalToMapped(1), FractionalToMapped(0), FractionalToMapped(0), 0, false) {
|
||||
|
||||
}
|
||||
|
||||
RenderingMouseElement::RenderingMouseElement(Transform transform, Transform mouseTransform) : rendering(transform), mouse(mouseTransform) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void RenderingMouseElement::UpdatePosition(Window& window) {
|
||||
rendering.UpdatePosition(window);
|
||||
mouse.UpdatePosition(window, rendering.transform);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue