MSDFgen font coordinate scaling fix
This commit is contained in:
parent
f424021a2b
commit
b67fb967c3
|
|
@ -1,6 +1,8 @@
|
||||||
|
|
||||||
#include "FontGeometry.h"
|
#include "FontGeometry.h"
|
||||||
|
|
||||||
|
#define DEFAULT_FONT_UNITS_PER_EM 2048.0
|
||||||
|
|
||||||
namespace msdf_atlas {
|
namespace msdf_atlas {
|
||||||
|
|
||||||
FontGeometry::GlyphRange::GlyphRange() : glyphs(), rangeStart(), rangeEnd() { }
|
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) {
|
bool FontGeometry::loadMetrics(msdfgen::FontHandle *font, double fontScale) {
|
||||||
if (!msdfgen::getFontMetrics(metrics, font))
|
if (!msdfgen::getFontMetrics(metrics, font, msdfgen::FONT_SCALING_NONE))
|
||||||
return false;
|
return false;
|
||||||
if (metrics.emSize <= 0)
|
if (metrics.emSize <= 0)
|
||||||
metrics.emSize = MSDF_ATLAS_DEFAULT_EM_SIZE;
|
metrics.emSize = DEFAULT_FONT_UNITS_PER_EM;
|
||||||
geometryScale = fontScale/metrics.emSize;
|
geometryScale = fontScale/metrics.emSize;
|
||||||
metrics.emSize *= geometryScale;
|
metrics.emSize *= geometryScale;
|
||||||
metrics.ascenderY *= 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 i = rangeStart; i < rangeEnd; ++i)
|
||||||
for (size_t j = rangeStart; j < rangeEnd; ++j) {
|
for (size_t j = rangeStart; j < rangeEnd; ++j) {
|
||||||
double advance;
|
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;
|
kerning[std::make_pair<int, int>((*glyphs)[i].getIndex(), (*glyphs)[j].getIndex())] = geometryScale*advance;
|
||||||
++loaded;
|
++loaded;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@
|
||||||
#include "GlyphGeometry.h"
|
#include "GlyphGeometry.h"
|
||||||
#include "Charset.h"
|
#include "Charset.h"
|
||||||
|
|
||||||
#define MSDF_ATLAS_DEFAULT_EM_SIZE 32.0
|
|
||||||
|
|
||||||
namespace msdf_atlas {
|
namespace msdf_atlas {
|
||||||
|
|
||||||
/// Represents the geometry of all glyphs of a given font or font variant
|
/// Represents the geometry of all glyphs of a given font or font variant
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ namespace msdf_atlas {
|
||||||
GlyphGeometry::GlyphGeometry() : index(), codepoint(), geometryScale(), bounds(), advance(), box() { }
|
GlyphGeometry::GlyphGeometry() : index(), codepoint(), geometryScale(), bounds(), advance(), box() { }
|
||||||
|
|
||||||
bool GlyphGeometry::load(msdfgen::FontHandle *font, double geometryScale, msdfgen::GlyphIndex index, bool preprocessGeometry) {
|
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->index = index.getIndex();
|
||||||
this->geometryScale = geometryScale;
|
this->geometryScale = geometryScale;
|
||||||
codepoint = 0;
|
codepoint = 0;
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
using namespace msdf_atlas;
|
using namespace msdf_atlas;
|
||||||
|
|
||||||
|
#define DEFAULT_SIZE 32.0
|
||||||
#define DEFAULT_ANGLE_THRESHOLD 3.0
|
#define DEFAULT_ANGLE_THRESHOLD 3.0
|
||||||
#define DEFAULT_MITER_LIMIT 1.0
|
#define DEFAULT_MITER_LIMIT 1.0
|
||||||
#define DEFAULT_PIXEL_RANGE 2.0
|
#define DEFAULT_PIXEL_RANGE 2.0
|
||||||
|
|
@ -837,7 +838,7 @@ int main(int argc, const char *const *argv) {
|
||||||
minEmSize = config.emSize;
|
minEmSize = config.emSize;
|
||||||
if (!(fixedWidth > 0 && fixedHeight > 0) && !(fixedCellWidth > 0 && fixedCellHeight > 0) && !(minEmSize > 0)) {
|
if (!(fixedWidth > 0 && fixedHeight > 0) && !(fixedCellWidth > 0 && fixedCellHeight > 0) && !(minEmSize > 0)) {
|
||||||
fputs("Neither atlas size nor glyph size selected, using default...\n", stderr);
|
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) {
|
if (config.imageType == ImageType::HARD_MASK || config.imageType == ImageType::SOFT_MASK) {
|
||||||
rangeMode = RANGE_PIXEL;
|
rangeMode = RANGE_PIXEL;
|
||||||
|
|
|
||||||
2
msdfgen
2
msdfgen
|
|
@ -1 +1 @@
|
||||||
Subproject commit 937f31ff418e488e4b707a77c294cdb4fadb4235
|
Subproject commit c7a724c17366db009a43514b90329519d792b51b
|
||||||
Loading…
Reference in New Issue