split
This commit is contained in:
parent
c3b8761102
commit
a43fd6ac2e
9 changed files with 215 additions and 137 deletions
58
implementations/Crafter.Graphics-ImageElement.cpp
Normal file
58
implementations/Crafter.Graphics-ImageElement.cpp
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
Crafter®.Graphics
|
||||||
|
Copyright (C) 2025 Catcrafts®
|
||||||
|
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 as published by the Free Software Foundation; either
|
||||||
|
version 3.0 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
|
||||||
|
module;
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#include "../lib/stb_image.h"
|
||||||
|
module Crafter.Graphics:ImageElement_impl;
|
||||||
|
import :ImageElement;
|
||||||
|
import :RenderingElement;
|
||||||
|
import :Window;
|
||||||
|
import :Types;
|
||||||
|
import std;
|
||||||
|
|
||||||
|
using namespace Crafter;
|
||||||
|
|
||||||
|
ImageElement::ImageElement() : RenderingElement() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageElement::ImageElement(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) : RenderingElement(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||||
|
RenderImage(imagePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImageElement::RenderImage(const std::string_view path) {
|
||||||
|
std::filesystem::path abs = std::filesystem::absolute(path);
|
||||||
|
int xSize;
|
||||||
|
int ySize;
|
||||||
|
unsigned char* bgData = stbi_load(abs.string().c_str(), &xSize, &ySize, nullptr, 4);
|
||||||
|
|
||||||
|
ResizeBuffer(xSize, ySize);
|
||||||
|
|
||||||
|
for(std::uint_fast32_t x = 0; x < xSize; x++) {
|
||||||
|
for(std::uint_fast32_t y = 0; y < ySize; y++) {
|
||||||
|
std::uint_fast32_t idx = (x*ySize+y)*4;
|
||||||
|
buffer[x*ySize+y].r = bgData[idx];
|
||||||
|
buffer[x*ySize+y].g = bgData[idx+1];
|
||||||
|
buffer[x*ySize+y].b = bgData[idx+2];
|
||||||
|
buffer[x*ySize+y].a = bgData[idx+3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -44,86 +44,12 @@ RenderingElement::RenderingElement(std::uint_fast32_t bufferWidth, std::uint_fas
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
|
||||||
RenderImage(imagePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
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(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
|
||||||
RenderText(text, size, pixel, font);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RenderingElement::ResizeBuffer(std::uint_fast32_t width, std::uint_fast32_t height) {
|
void RenderingElement::ResizeBuffer(std::uint_fast32_t width, std::uint_fast32_t height) {
|
||||||
this->bufferWidth = width;
|
this->bufferWidth = width;
|
||||||
this->bufferHeight = height;
|
this->bufferHeight = height;
|
||||||
buffer.resize(width * height);
|
buffer.resize(width * height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingElement::RenderImage(const std::string_view path) {
|
|
||||||
std::filesystem::path abs = std::filesystem::absolute(path);
|
|
||||||
int xSize;
|
|
||||||
int ySize;
|
|
||||||
unsigned char* bgData = stbi_load(abs.string().c_str(), &xSize, &ySize, nullptr, 4);
|
|
||||||
|
|
||||||
ResizeBuffer(xSize, ySize);
|
|
||||||
|
|
||||||
for(std::uint_fast32_t x = 0; x < xSize; x++) {
|
|
||||||
for(std::uint_fast32_t y = 0; y < ySize; y++) {
|
|
||||||
std::uint_fast32_t idx = (x*ySize+y)*4;
|
|
||||||
buffer[x*ySize+y].r = bgData[idx];
|
|
||||||
buffer[x*ySize+y].g = bgData[idx+1];
|
|
||||||
buffer[x*ySize+y].b = bgData[idx+2];
|
|
||||||
buffer[x*ySize+y].a = bgData[idx+3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
int baseline = (int)(font.ascent * scale);
|
|
||||||
|
|
||||||
std::uint_fast32_t bufferWidth = 0;
|
|
||||||
for (const char c : text) {
|
|
||||||
int advance, lsb;
|
|
||||||
stbtt_GetCodepointHMetrics(&font.font, c, &advance, &lsb);
|
|
||||||
bufferWidth += (int)(advance * scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
ResizeBuffer(bufferWidth, (font.ascent - font.descent) * scale);
|
|
||||||
|
|
||||||
int x = 0;
|
|
||||||
for (std::uint_fast32_t i = 0; i < text.size(); i++) {
|
|
||||||
int codepoint = text[i];
|
|
||||||
|
|
||||||
int ax;
|
|
||||||
int lsb;
|
|
||||||
stbtt_GetCodepointHMetrics(&font.font, codepoint, &ax, &lsb);
|
|
||||||
|
|
||||||
int c_x1, c_y1, c_x2, c_y2;
|
|
||||||
stbtt_GetCodepointBitmapBox(&font.font, codepoint, scale, scale, &c_x1, &c_y1, &c_x2, &c_y2);
|
|
||||||
|
|
||||||
int w = c_x2 - c_x1;
|
|
||||||
int h = c_y2 - c_y1;
|
|
||||||
|
|
||||||
std::vector<unsigned char> bitmap(w * h);
|
|
||||||
stbtt_MakeCodepointBitmap(&font.font, bitmap.data(), w, h, w, scale, scale, codepoint);
|
|
||||||
|
|
||||||
for (int j = 0; j < h; j++) {
|
|
||||||
for (int i = 0; i < w; i++) {
|
|
||||||
buffer[(baseline + j + c_y1) * bufferWidth + (x + i + c_x1)] = {color.r, color.g, color.b, bitmap[j * w + i]};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
x += (int)(ax * scale);
|
|
||||||
|
|
||||||
if (i + 1 < text.size()) {
|
|
||||||
x += (int)stbtt_GetCodepointKernAdvance(&font.font, codepoint, text[i+1] * scale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RenderingElement::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++) {
|
for (std::uint_fast32_t y = 0; y < dstHeight; y++) {
|
||||||
std::uint_fast32_t srcY = y * bufferHeight / dstHeight;
|
std::uint_fast32_t srcY = y * bufferHeight / dstHeight;
|
||||||
|
|
|
||||||
86
implementations/Crafter.Graphics-TextElement.cpp
Normal file
86
implementations/Crafter.Graphics-TextElement.cpp
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
Crafter®.Graphics
|
||||||
|
Copyright (C) 2025 Catcrafts®
|
||||||
|
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 as published by the Free Software Foundation; either
|
||||||
|
version 3.0 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
|
||||||
|
module;
|
||||||
|
#include "../lib/stb_truetype.h"
|
||||||
|
module Crafter.Graphics:TextElement_impl;
|
||||||
|
import :TextElement;
|
||||||
|
import :RenderingElement;
|
||||||
|
import :Window;
|
||||||
|
import :Types;
|
||||||
|
import :Font;
|
||||||
|
import std;
|
||||||
|
|
||||||
|
using namespace Crafter;
|
||||||
|
|
||||||
|
TextElement::TextElement() : RenderingElement() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TextElement::TextElement(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) : RenderingElement(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling) {
|
||||||
|
RenderText(text, size, pixel, font);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextElement::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);
|
||||||
|
|
||||||
|
int baseline = (int)(font.ascent * scale);
|
||||||
|
|
||||||
|
std::uint_fast32_t bufferWidth = 0;
|
||||||
|
for (const char c : text) {
|
||||||
|
int advance, lsb;
|
||||||
|
stbtt_GetCodepointHMetrics(&font.font, c, &advance, &lsb);
|
||||||
|
bufferWidth += (int)(advance * scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResizeBuffer(bufferWidth, (font.ascent - font.descent) * scale);
|
||||||
|
|
||||||
|
int x = 0;
|
||||||
|
for (std::uint_fast32_t i = 0; i < text.size(); i++) {
|
||||||
|
int codepoint = text[i];
|
||||||
|
|
||||||
|
int ax;
|
||||||
|
int lsb;
|
||||||
|
stbtt_GetCodepointHMetrics(&font.font, codepoint, &ax, &lsb);
|
||||||
|
|
||||||
|
int c_x1, c_y1, c_x2, c_y2;
|
||||||
|
stbtt_GetCodepointBitmapBox(&font.font, codepoint, scale, scale, &c_x1, &c_y1, &c_x2, &c_y2);
|
||||||
|
|
||||||
|
int w = c_x2 - c_x1;
|
||||||
|
int h = c_y2 - c_y1;
|
||||||
|
|
||||||
|
std::vector<unsigned char> bitmap(w * h);
|
||||||
|
stbtt_MakeCodepointBitmap(&font.font, bitmap.data(), w, h, w, scale, scale, codepoint);
|
||||||
|
|
||||||
|
for (int j = 0; j < h; j++) {
|
||||||
|
for (int i = 0; i < w; i++) {
|
||||||
|
buffer[(baseline + j + c_y1) * bufferWidth + (x + i + c_x1)] = {color.r, color.g, color.b, bitmap[j * w + i]};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x += (int)(ax * scale);
|
||||||
|
|
||||||
|
if (i + 1 < text.size()) {
|
||||||
|
x += (int)stbtt_GetCodepointKernAdvance(&font.font, codepoint, text[i+1] * scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
/*
|
|
||||||
Crafter®.Graphics
|
|
||||||
Copyright (C) 2025 Catcrafts®
|
|
||||||
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 as published by the Free Software Foundation; either
|
|
||||||
version 3.0 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
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
|
|
||||||
*/
|
|
||||||
|
|
||||||
module Crafter.Graphics:UiElement_impl;
|
|
||||||
import :UiElement;
|
|
||||||
import :Window;
|
|
||||||
import :Types;
|
|
||||||
import :Font;
|
|
||||||
import std;
|
|
||||||
|
|
||||||
using namespace Crafter;
|
|
||||||
|
|
||||||
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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
33
interfaces/Crafter.Graphics-ImageElement.cppm
Normal file
33
interfaces/Crafter.Graphics-ImageElement.cppm
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
Crafter®.Graphics
|
||||||
|
Copyright (C) 2025 Catcrafts®
|
||||||
|
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:ImageElement;
|
||||||
|
import std;
|
||||||
|
import :RenderingElement;
|
||||||
|
import :Types;
|
||||||
|
|
||||||
|
export namespace Crafter {
|
||||||
|
class ImageElement : public RenderingElement {
|
||||||
|
public:
|
||||||
|
ImageElement();
|
||||||
|
ImageElement(const std::string_view imagePath, std::int_fast32_t anchorX = FractionalToMapped(0.5), std::int_fast32_t anchorY = FractionalToMapped(0.5), std::uint_fast32_t relativeWidth = FractionalToMapped(1), std::uint_fast32_t relativeHeight = FractionalToMapped(1), std::int_fast32_t anchorOffsetX = FractionalToMapped(0.5), std::int_fast32_t anchorOffsetY = FractionalToMapped(0.5), std::int_fast32_t z = 0, bool ignoreScaling = false);
|
||||||
|
|
||||||
|
void RenderImage(const std::string_view path);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -35,15 +35,11 @@ export namespace Crafter {
|
||||||
RenderingElement();
|
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);
|
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);
|
||||||
RenderingElement(std::uint_fast32_t bufferWidth, std::uint_fast32_t bufferHeight, std::int_fast32_t anchorX = FractionalToMapped(0.5), std::int_fast32_t anchorY = FractionalToMapped(0.5), std::uint_fast32_t relativeWidth = FractionalToMapped(1), std::uint_fast32_t relativeHeight = FractionalToMapped(1), std::int_fast32_t anchorOffsetX = FractionalToMapped(0.5), std::int_fast32_t anchorOffsetY = FractionalToMapped(0.5), std::int_fast32_t z = 0, bool ignoreScaling = false);
|
RenderingElement(std::uint_fast32_t bufferWidth, std::uint_fast32_t bufferHeight, std::int_fast32_t anchorX = FractionalToMapped(0.5), std::int_fast32_t anchorY = FractionalToMapped(0.5), std::uint_fast32_t relativeWidth = FractionalToMapped(1), std::uint_fast32_t relativeHeight = FractionalToMapped(1), std::int_fast32_t anchorOffsetX = FractionalToMapped(0.5), std::int_fast32_t anchorOffsetY = FractionalToMapped(0.5), std::int_fast32_t z = 0, bool ignoreScaling = false);
|
||||||
RenderingElement(const std::string_view imagePath, std::int_fast32_t anchorX = FractionalToMapped(0.5), std::int_fast32_t anchorY = FractionalToMapped(0.5), std::uint_fast32_t relativeWidth = FractionalToMapped(1), std::uint_fast32_t relativeHeight = FractionalToMapped(1), std::int_fast32_t anchorOffsetX = FractionalToMapped(0.5), std::int_fast32_t anchorOffsetY = FractionalToMapped(0.5), std::int_fast32_t z = 0, bool ignoreScaling = false);
|
|
||||||
RenderingElement(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font, std::int_fast32_t anchorX = FractionalToMapped(0.5), std::int_fast32_t anchorY = FractionalToMapped(0.5), std::uint_fast32_t relativeWidth = FractionalToMapped(1), std::uint_fast32_t relativeHeight = FractionalToMapped(1), std::int_fast32_t anchorOffsetX = FractionalToMapped(0.5), std::int_fast32_t anchorOffsetY = FractionalToMapped(0.5), std::int_fast32_t z = 0, bool ignoreScaling = false);
|
|
||||||
RenderingElement(RenderingElement&) = delete;
|
RenderingElement(RenderingElement&) = delete;
|
||||||
RenderingElement& operator=(RenderingElement&) = delete;
|
RenderingElement& operator=(RenderingElement&) = delete;
|
||||||
|
|
||||||
void ResizeBuffer(std::uint_fast32_t width, std::uint_fast32_t height);
|
void ResizeBuffer(std::uint_fast32_t width, std::uint_fast32_t height);
|
||||||
void CopyNearestNeighbour(Pixel_BU8_GU8_RU8_AU8* dst, std::uint_fast32_t dstWidth, std::uint_fast32_t dstHeight) const;
|
void CopyNearestNeighbour(Pixel_BU8_GU8_RU8_AU8* dst, std::uint_fast32_t dstWidth, std::uint_fast32_t dstHeight) const;
|
||||||
void RenderText(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font);
|
|
||||||
void RenderImage(const std::string_view path);
|
|
||||||
void UpdatePosition(Window& window) override;
|
void UpdatePosition(Window& window) override;
|
||||||
void UpdatePosition(Window& window, Transform& parent) override;
|
void UpdatePosition(Window& window, Transform& parent) override;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
34
interfaces/Crafter.Graphics-TextElement.cppm
Normal file
34
interfaces/Crafter.Graphics-TextElement.cppm
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
Crafter®.Graphics
|
||||||
|
Copyright (C) 2025 Catcrafts®
|
||||||
|
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:TextElement;
|
||||||
|
import std;
|
||||||
|
import :RenderingElement;
|
||||||
|
import :Types;
|
||||||
|
import :Font;
|
||||||
|
|
||||||
|
export namespace Crafter {
|
||||||
|
class TextElement : public RenderingElement {
|
||||||
|
public:
|
||||||
|
TextElement();
|
||||||
|
TextElement(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font, std::int_fast32_t anchorX = FractionalToMapped(0.5), std::int_fast32_t anchorY = FractionalToMapped(0.5), std::uint_fast32_t relativeWidth = FractionalToMapped(1), std::uint_fast32_t relativeHeight = FractionalToMapped(1), std::int_fast32_t anchorOffsetX = FractionalToMapped(0.5), std::int_fast32_t anchorOffsetY = FractionalToMapped(0.5), std::int_fast32_t z = 0, bool ignoreScaling = false);
|
||||||
|
|
||||||
|
void RenderText(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 pixel, Font& font);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -24,6 +24,8 @@ export import :Window;
|
||||||
export import :Transform;
|
export import :Transform;
|
||||||
export import :RenderingElement;
|
export import :RenderingElement;
|
||||||
export import :MouseElement;
|
export import :MouseElement;
|
||||||
|
export import :ImageElement;
|
||||||
|
export import :TextElement;
|
||||||
export import :Types;
|
export import :Types;
|
||||||
export import :Font;
|
export import :Font;
|
||||||
export import :Shm;
|
export import :Shm;
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "base",
|
"name": "base",
|
||||||
"implementations": ["implementations/Crafter.Graphics-Font", "implementations/Crafter.Graphics-Shm", "implementations/Crafter.Graphics-Window", "implementations/Crafter.Graphics-RenderingElement", "implementations/Crafter.Graphics-MouseElement", "implementations/Crafter.Graphics-Transform"],
|
"implementations": ["implementations/Crafter.Graphics-Font", "implementations/Crafter.Graphics-Shm", "implementations/Crafter.Graphics-Window", "implementations/Crafter.Graphics-RenderingElement", "implementations/Crafter.Graphics-TextElement", "implementations/Crafter.Graphics-ImageElement", "implementations/Crafter.Graphics-MouseElement", "implementations/Crafter.Graphics-Transform"],
|
||||||
"interfaces": ["interfaces/Crafter.Graphics-Window", "interfaces/Crafter.Graphics", "interfaces/Crafter.Graphics-Types", "interfaces/Crafter.Graphics-Font", "interfaces/Crafter.Graphics-Shm", "interfaces/Crafter.Graphics-Animation", "interfaces/Crafter.Graphics-RenderingElement", "interfaces/Crafter.Graphics-MouseElement", "interfaces/Crafter.Graphics-Transform"],
|
"interfaces": ["interfaces/Crafter.Graphics-Window", "interfaces/Crafter.Graphics", "interfaces/Crafter.Graphics-Types", "interfaces/Crafter.Graphics-Font", "interfaces/Crafter.Graphics-Shm", "interfaces/Crafter.Graphics-Animation", "interfaces/Crafter.Graphics-RenderingElement", "interfaces/Crafter.Graphics-TextElement", "interfaces/Crafter.Graphics-ImageElement", "interfaces/Crafter.Graphics-MouseElement", "interfaces/Crafter.Graphics-Transform"],
|
||||||
"type": "library"
|
"type": "library"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue