MSDFgen font coordinate scaling fix

This commit is contained in:
Chlumsky 2024-03-21 23:51:59 +01:00
parent f424021a2b
commit b67fb967c3
5 changed files with 9 additions and 8 deletions

View File

@ -1,6 +1,8 @@
#include "FontGeometry.h"
#define DEFAULT_FONT_UNITS_PER_EM 2048.0
namespace msdf_atlas {
FontGeometry::GlyphRange::GlyphRange() : glyphs(), rangeStart(), rangeEnd() { }
@ -82,10 +84,10 @@ int FontGeometry::loadCharset(msdfgen::FontHandle *font, double fontScale, const
}
bool FontGeometry::loadMetrics(msdfgen::FontHandle *font, double fontScale) {
if (!msdfgen::getFontMetrics(metrics, font))
if (!msdfgen::getFontMetrics(metrics, font, msdfgen::FONT_SCALING_NONE))
return false;
if (metrics.emSize <= 0)
metrics.emSize = MSDF_ATLAS_DEFAULT_EM_SIZE;
metrics.emSize = DEFAULT_FONT_UNITS_PER_EM;
geometryScale = fontScale/metrics.emSize;
metrics.emSize *= geometryScale;
metrics.ascenderY *= geometryScale;
@ -123,7 +125,7 @@ int FontGeometry::loadKerning(msdfgen::FontHandle *font) {
for (size_t i = rangeStart; i < rangeEnd; ++i)
for (size_t j = rangeStart; j < rangeEnd; ++j) {
double advance;
if (msdfgen::getKerning(advance, font, (*glyphs)[i].getGlyphIndex(), (*glyphs)[j].getGlyphIndex()) && advance) {
if (msdfgen::getKerning(advance, font, (*glyphs)[i].getGlyphIndex(), (*glyphs)[j].getGlyphIndex(), msdfgen::FONT_SCALING_NONE) && advance) {
kerning[std::make_pair<int, int>((*glyphs)[i].getIndex(), (*glyphs)[j].getIndex())] = geometryScale*advance;
++loaded;
}

View File

@ -11,8 +11,6 @@
#include "GlyphGeometry.h"
#include "Charset.h"
#define MSDF_ATLAS_DEFAULT_EM_SIZE 32.0
namespace msdf_atlas {
/// Represents the geometry of all glyphs of a given font or font variant

View File

@ -9,7 +9,7 @@ namespace msdf_atlas {
GlyphGeometry::GlyphGeometry() : index(), codepoint(), geometryScale(), bounds(), advance(), box() { }
bool GlyphGeometry::load(msdfgen::FontHandle *font, double geometryScale, msdfgen::GlyphIndex index, bool preprocessGeometry) {
if (font && msdfgen::loadGlyph(shape, font, index, &advance) && shape.validate()) {
if (font && msdfgen::loadGlyph(shape, font, index, msdfgen::FONT_SCALING_NONE, &advance) && shape.validate()) {
this->index = index.getIndex();
this->geometryScale = geometryScale;
codepoint = 0;

View File

@ -20,6 +20,7 @@
using namespace msdf_atlas;
#define DEFAULT_SIZE 32.0
#define DEFAULT_ANGLE_THRESHOLD 3.0
#define DEFAULT_MITER_LIMIT 1.0
#define DEFAULT_PIXEL_RANGE 2.0
@ -837,7 +838,7 @@ int main(int argc, const char *const *argv) {
minEmSize = config.emSize;
if (!(fixedWidth > 0 && fixedHeight > 0) && !(fixedCellWidth > 0 && fixedCellHeight > 0) && !(minEmSize > 0)) {
fputs("Neither atlas size nor glyph size selected, using default...\n", stderr);
minEmSize = MSDF_ATLAS_DEFAULT_EM_SIZE;
minEmSize = DEFAULT_SIZE;
}
if (config.imageType == ImageType::HARD_MASK || config.imageType == ImageType::SOFT_MASK) {
rangeMode = RANGE_PIXEL;

@ -1 +1 @@
Subproject commit 937f31ff418e488e4b707a77c294cdb4fadb4235
Subproject commit c7a724c17366db009a43514b90329519d792b51b