mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-02-01 09:52:25 -05:00
76 lines
2.7 KiB
C++
76 lines
2.7 KiB
C++
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md
|
|
|
|
#include "FontGlyph.hpp"
|
|
#include <cstring>
|
|
#include <new>
|
|
|
|
namespace gui
|
|
{
|
|
FontGlyph::~FontGlyph()
|
|
{
|
|
delete[] data;
|
|
}
|
|
|
|
FontGlyph::FontGlyph(const FontGlyph *from)
|
|
{
|
|
this->id = from->id;
|
|
this->glyph_offset = from->glyph_offset;
|
|
this->width = from->width;
|
|
this->height = from->height;
|
|
this->xoffset = from->xoffset;
|
|
this->yoffset = from->yoffset;
|
|
this->xadvance = from->xadvance;
|
|
}
|
|
|
|
gui::Status FontGlyph::load(std::uint8_t *glyphData, std::uint32_t &offset)
|
|
{
|
|
// Character id
|
|
std::memcpy(&id, &glyphData[offset], sizeof(ucode32));
|
|
offset += sizeof(ucode32);
|
|
|
|
// Offset in glyph data field
|
|
std::memcpy(&glyph_offset, &glyphData[offset], sizeof(std::uint32_t));
|
|
offset += sizeof(std::uint32_t);
|
|
|
|
// Width of the character image in the texture
|
|
std::memcpy(&width, &glyphData[offset], sizeof(std::uint16_t));
|
|
offset += sizeof(std::uint16_t);
|
|
|
|
// Height of the character image in the texture
|
|
std::memcpy(&height, &glyphData[offset], sizeof(std::uint16_t));
|
|
offset += sizeof(std::uint16_t);
|
|
|
|
// How much the current position should be offset when copying the image from the texture to the screen
|
|
std::memcpy(&xoffset, &glyphData[offset], sizeof(std::uint16_t));
|
|
offset += sizeof(std::uint16_t);
|
|
|
|
// How much the current position should be offset when copying the image from the texture to the screen
|
|
std::memcpy(&yoffset, &glyphData[offset], sizeof(std::uint16_t));
|
|
offset += sizeof(std::uint16_t);
|
|
|
|
// How much the current position should be advanced after drawing the character
|
|
std::memcpy(&xadvance, &glyphData[offset], sizeof(std::uint16_t));
|
|
offset += sizeof(std::uint16_t);
|
|
|
|
return gui::Status::GUI_SUCCESS;
|
|
}
|
|
|
|
gui::Status FontGlyph::loadImage(std::uint8_t *glyphData, std::uint32_t offset)
|
|
{
|
|
// Image data of the glyph
|
|
data = new (std::nothrow) std::uint8_t[width * height];
|
|
if (data == nullptr) {
|
|
return Status::GUI_FAILURE;
|
|
}
|
|
|
|
std::memcpy(data, &glyphData[offset], width * height);
|
|
|
|
// TODO convert image to the vector of vectors where every last vector contains pairs of
|
|
// TODO offset - from column 0, length - number of pixels that should be drawn.
|
|
// TODO First vector contains row and pointer to the vector with pairs
|
|
|
|
return gui::Status::GUI_SUCCESS;
|
|
}
|
|
} // namespace gui
|