Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-07-03 20:07:16 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-07-03 20:07:16 +1000
commit081dd693ca57ef624342e729c5b27b2e5da98410 (patch)
tree9d6e15186a383ec34f44cb9a4c1344fcd9928c2c /source
parent809744c300d6bc3a4f5cb71a8a67dbad811fe2de (diff)
Add 1-px padding around font and round to fix jitter
Diffstat (limited to 'source')
-rw-r--r--source/core/StarFont.cpp25
-rw-r--r--source/rendering/StarTextPainter.cpp2
2 files changed, 15 insertions, 12 deletions
diff --git a/source/core/StarFont.cpp b/source/core/StarFont.cpp
index 6adc4c3..2c0d6a7 100644
--- a/source/core/StarFont.cpp
+++ b/source/core/StarFont.cpp
@@ -101,23 +101,26 @@ std::pair<Image, Vec2I> Font::render(String::Char c) {
FT_GlyphSlot slot = face->glyph;
- unsigned int width = slot->bitmap.width;
- unsigned int height = slot->bitmap.rows;
+ unsigned width = slot->bitmap.width;
+ unsigned height = slot->bitmap.rows;
- Image image(width, height, PixelFormat::RGBA32);
- for (int y = 0; y < height; ++y) {
- unsigned char* p = slot->bitmap.buffer + y * slot->bitmap.pitch;
- for (int x = 0; x < width; ++x) {
+ Image image(width + 2, height + 2, PixelFormat::RGBA32);
+ Vec4B white(255, 255, 255, 0);
+ image.fill(white);
+
+ for (unsigned y = 0; y != height; ++y) {
+ uint8_t* p = slot->bitmap.buffer + y * slot->bitmap.pitch;
+ for (unsigned x = 0; x != width; ++x) {
if (x >= 0 && y >= 0 && x < width && y < height) {
- unsigned char val = *(p + x);
- image.set(x, height - y - 1, Vec4B(255, 255, 255, val));
- } else {
- image.set(x, height - y - 1, Vec4B(255, 255, 255, 0));
+ if (uint8_t val = *(p + x)) {
+ white.setW(val);
+ image.set(x + 1, height - y, white);
+ }
}
}
}
- return { move(image), {slot->bitmap_left, (slot->bitmap_top - (int)height) + m_pixelSize / 4} };
+ return { move(image), {slot->bitmap_left - 1, (slot->bitmap_top - height) + (m_pixelSize / 4) - 1} };
}
}
diff --git a/source/rendering/StarTextPainter.cpp b/source/rendering/StarTextPainter.cpp
index 1d26e53..d6078dc 100644
--- a/source/rendering/StarTextPainter.cpp
+++ b/source/rendering/StarTextPainter.cpp
@@ -587,7 +587,7 @@ void TextPainter::renderGlyph(String::Char c, Vec2F const& screenPos, unsigned f
const FontTextureGroup::GlyphTexture& glyphTexture = m_fontTextureGroup.glyphTexture(c, fontSize, processingDirectives);
Vec2F offset = glyphTexture.offset * scale;
- m_renderer->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), glyphTexture.texture, screenPos + offset, scale, color, 0.0f);
+ m_renderer->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), glyphTexture.texture, Vec2F::round(screenPos + offset), scale, color, 0.0f);
}
}