From 7e8d34645a67c6e4def5d281f7adec1c2501dc49 Mon Sep 17 00:00:00 2001 From: Chlumsky Date: Sat, 23 Nov 2024 16:01:03 +0100 Subject: [PATCH] FontGeometry constructor fix --- artery-font-format | 2 +- msdf-atlas-gen/FontGeometry.cpp | 29 +++++++++++++++++++++++++++-- msdf-atlas-gen/FontGeometry.h | 5 +++++ msdfgen | 2 +- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/artery-font-format b/artery-font-format index 8886742..af79386 160000 --- a/artery-font-format +++ b/artery-font-format @@ -1 +1 @@ -Subproject commit 888674220216d1d326c6f29cf89165b545279c1f +Subproject commit af79386abe0857fe1c30be97eec760dbd84022c5 diff --git a/msdf-atlas-gen/FontGeometry.cpp b/msdf-atlas-gen/FontGeometry.cpp index b80a9da..7d350c2 100644 --- a/msdf-atlas-gen/FontGeometry.cpp +++ b/msdf-atlas-gen/FontGeometry.cpp @@ -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 *glyphStorage) : geometryScale(1), metrics(), preferredIdentifierType(GlyphIdentifierType::UNICODE_CODEPOINT), glyphs(glyphStorage), rangeStart(glyphs->size()), rangeEnd(glyphs->size()) { } +FontGeometry::FontGeometry(std::vector *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 &&) orig.glyphsByIndex), glyphsByCodepoint((std::map &&) orig.glyphsByCodepoint), kerning((std::map, double> &&) orig.kerning), ownGlyphs((std::vector &&) 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 &&) orig.glyphsByIndex; + glyphsByCodepoint = (std::map &&) orig.glyphsByCodepoint; + kerning = (std::map, double> &&) orig.kerning; + ownGlyphs = (std::vector &&) 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))) diff --git a/msdf-atlas-gen/FontGeometry.h b/msdf-atlas-gen/FontGeometry.h index 88e8f33..8dc758f 100644 --- a/msdf-atlas-gen/FontGeometry.h +++ b/msdf-atlas-gen/FontGeometry.h @@ -32,6 +32,8 @@ public: FontGeometry(); explicit FontGeometry(std::vector *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 ownGlyphs; std::string name; + FontGeometry(const FontGeometry &); + FontGeometry &operator=(const FontGeometry &); + }; } diff --git a/msdfgen b/msdfgen index 85e8b3d..5a88b0c 160000 --- a/msdfgen +++ b/msdfgen @@ -1 +1 @@ -Subproject commit 85e8b3d47b3d1a42e4a5ebda0a24fb1cc2e669e0 +Subproject commit 5a88b0c2b95033f7eee826b27c48d399d544d814