FontGeometry constructor fix

This commit is contained in:
Chlumsky 2024-11-23 16:01:03 +01:00
parent c27de5988d
commit 7e8d34645a
4 changed files with 34 additions and 4 deletions

@ -1 +1 @@
Subproject commit 888674220216d1d326c6f29cf89165b545279c1f
Subproject commit af79386abe0857fe1c30be97eec760dbd84022c5

View File

@ -25,9 +25,34 @@ const GlyphGeometry *FontGeometry::GlyphRange::end() const {
return glyphs->data()+rangeEnd;
}
FontGeometry::FontGeometry() : geometryScale(1), metrics(), preferredIdentifierType(GlyphIdentifierType::UNICODE_CODEPOINT), glyphs(&ownGlyphs), rangeStart(glyphs->size()), rangeEnd(glyphs->size()) { }
FontGeometry::FontGeometry() : geometryScale(1), metrics(), preferredIdentifierType(GlyphIdentifierType::UNICODE_CODEPOINT), glyphs(&ownGlyphs), rangeStart(0), rangeEnd(0) { }
FontGeometry::FontGeometry(std::vector<GlyphGeometry> *glyphStorage) : geometryScale(1), metrics(), preferredIdentifierType(GlyphIdentifierType::UNICODE_CODEPOINT), glyphs(glyphStorage), rangeStart(glyphs->size()), rangeEnd(glyphs->size()) { }
FontGeometry::FontGeometry(std::vector<GlyphGeometry> *glyphStorage) : geometryScale(1), metrics(), preferredIdentifierType(GlyphIdentifierType::UNICODE_CODEPOINT) {
glyphs = glyphStorage ? glyphStorage : &ownGlyphs;
rangeStart = glyphs->size();
rangeEnd = glyphs->size();
}
FontGeometry::FontGeometry(FontGeometry &&orig) : geometryScale(orig.geometryScale), metrics(orig.metrics), preferredIdentifierType(orig.preferredIdentifierType), glyphs(orig.glyphs), rangeStart(orig.rangeStart), rangeEnd(orig.rangeEnd), glyphsByIndex((std::map<int, size_t> &&) orig.glyphsByIndex), glyphsByCodepoint((std::map<unicode_t, size_t> &&) orig.glyphsByCodepoint), kerning((std::map<std::pair<int, int>, double> &&) orig.kerning), ownGlyphs((std::vector<GlyphGeometry> &&) orig.ownGlyphs), name((std::string &&) orig.name) {
if (glyphs == &orig.ownGlyphs)
glyphs = &ownGlyphs;
}
FontGeometry &FontGeometry::operator=(FontGeometry &&orig) {
if (this != &orig) {
geometryScale = orig.geometryScale;
metrics = orig.metrics;
glyphs = orig.glyphs == &orig.ownGlyphs ? &ownGlyphs : orig.glyphs;
rangeStart = orig.rangeStart;
rangeEnd = orig.rangeEnd;
glyphsByIndex = (std::map<int, size_t> &&) orig.glyphsByIndex;
glyphsByCodepoint = (std::map<unicode_t, size_t> &&) orig.glyphsByCodepoint;
kerning = (std::map<std::pair<int, int>, double> &&) orig.kerning;
ownGlyphs = (std::vector<GlyphGeometry> &&) orig.ownGlyphs;
name = (std::string &&) orig.name;
}
return *this;
}
int FontGeometry::loadGlyphRange(msdfgen::FontHandle *font, double fontScale, unsigned rangeStart, unsigned rangeEnd, bool preprocessGeometry, bool enableKerning) {
if (!(glyphs->size() == this->rangeEnd && loadMetrics(font, fontScale)))

View File

@ -32,6 +32,8 @@ public:
FontGeometry();
explicit FontGeometry(std::vector<GlyphGeometry> *glyphStorage);
FontGeometry(FontGeometry &&orig);
FontGeometry &operator=(FontGeometry &&orig);
/// Loads the consecutive range of glyphs between rangeStart (inclusive) and rangeEnd (exclusive), returns the number of successfully loaded glyphs
int loadGlyphRange(msdfgen::FontHandle *font, double fontScale, unsigned rangeStart, unsigned rangeEnd, bool preprocessGeometry = true, bool enableKerning = true);
@ -81,6 +83,9 @@ private:
std::vector<GlyphGeometry> ownGlyphs;
std::string name;
FontGeometry(const FontGeometry &);
FontGeometry &operator=(const FontGeometry &);
};
}

@ -1 +1 @@
Subproject commit 85e8b3d47b3d1a42e4a5ebda0a24fb1cc2e669e0
Subproject commit 5a88b0c2b95033f7eee826b27c48d399d544d814