let freetype handle notdef glyph

add comment
This commit is contained in:
jrkb 2023-09-21 11:04:29 +02:00
parent 1d84d62c12
commit 02c5364f23

View file

@ -702,6 +702,7 @@ class Font {
int i = 0;
stringstream text;
bool useNotdef = false;
for(const auto & glyphIdentity : variationText){
const uint32_t & charcode = glyphIdentity.charcode;
@ -720,9 +721,31 @@ class Font {
const_cast <FontVariationCoords &>(glyphIdentity.coords)); // danger?
FT_UInt glyphIndex = FT_Get_Char_Index(face, charcode);
if(!glyphIndex){
continue;
}
// NOTE: 0 means no glyph as in '.notdef'
// we actually WANT the notdef glyph to render
// and let FreeType handle this.
//
// we leave the unwanted logic below for reference
// and delete it some time when we're absolutely sure
// we do not need it (probably yes).
//
//if(!glyphIndex){
//std::cout << "[font] no glyph index for character " << charcode << ": " << "" << std::endl;
//if(!useNotdef){
//glyphIndex = FT_Get_Char_Index(face, 0x110000);
//std::cout << "[font] no glyph index for character " << charcode << ": " << "attempt replace with notdef" << std::endl;
//if(!glyphIndex){
//glyphIndex = FT_Get_Char_Index(face, 0x25A1);
//std::cout << "[font] no glyph index for character " << charcode << ": " << "attempt replace with white square" << std::endl;
//if(!glyphIndex){
//std::cerr << "[font] absolutely no glyph index for character " << charcode << ": " << "" << std::endl;
//continue;
//}
//}
//useNotdef = true;
//}
//continue;
//}
FT_Error error = FT_Load_Glyph(face, glyphIndex, loadFlags);
if(error){
@ -1318,7 +1341,16 @@ class Font {
}
auto glyphIt = glyphs.find(glyphIdentity);
Glyph & glyph = (glyphIt == glyphs.end()) ? glyphs.begin()->second : glyphIt->second; // in case we have no glyph, draw first one?
if(glyphIt == glyphs.end()){
glyphIt = glyphs.find({0x110000, glyphIdentity.coords});
if(glyphIt == glyphs.end()){
glyphIt = glyphs.find({0x25A1, glyphIdentity.coords});
if(glyphIt == glyphs.end()){
glyphIt = glyphs.begin();
}
}
}
Glyph & glyph = glyphIt->second; // in case we have no glyph, draw first one?
// NOTE: should we do this?
if(previous != 0 && glyph.index != 0){