|
@@ -1318,11 +1318,12 @@ _FORCE_INLINE_ bool TextServerAdvanced::_ensure_glyph(FontAdvanced *p_font_data,
|
|
} break;
|
|
} break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ FT_GlyphSlot slot = fd->face->glyph;
|
|
|
|
+ bool from_svg = (slot->format == FT_GLYPH_FORMAT_SVG); // Need to check before FT_Render_Glyph as it will change format to bitmap.
|
|
if (!outline) {
|
|
if (!outline) {
|
|
if (!p_font_data->msdf) {
|
|
if (!p_font_data->msdf) {
|
|
- error = FT_Render_Glyph(fd->face->glyph, aa_mode);
|
|
|
|
|
|
+ error = FT_Render_Glyph(slot, aa_mode);
|
|
}
|
|
}
|
|
- FT_GlyphSlot slot = fd->face->glyph;
|
|
|
|
if (!error) {
|
|
if (!error) {
|
|
if (p_font_data->msdf) {
|
|
if (p_font_data->msdf) {
|
|
#ifdef MODULE_MSDFGEN_ENABLED
|
|
#ifdef MODULE_MSDFGEN_ENABLED
|
|
@@ -1363,6 +1364,7 @@ _FORCE_INLINE_ bool TextServerAdvanced::_ensure_glyph(FontAdvanced *p_font_data,
|
|
cleanup_stroker:
|
|
cleanup_stroker:
|
|
FT_Stroker_Done(stroker);
|
|
FT_Stroker_Done(stroker);
|
|
}
|
|
}
|
|
|
|
+ gl.from_svg = from_svg;
|
|
E = fd->glyph_map.insert(p_glyph, gl);
|
|
E = fd->glyph_map.insert(p_glyph, gl);
|
|
r_glyph = E->value;
|
|
r_glyph = E->value;
|
|
return gl.found;
|
|
return gl.found;
|
|
@@ -3312,6 +3314,10 @@ RID TextServerAdvanced::_font_get_glyph_texture_rid(const RID &p_font_rid, const
|
|
if (ffsd->textures[fgl.texture_idx].dirty) {
|
|
if (ffsd->textures[fgl.texture_idx].dirty) {
|
|
ShelfPackTexture &tex = ffsd->textures.write[fgl.texture_idx];
|
|
ShelfPackTexture &tex = ffsd->textures.write[fgl.texture_idx];
|
|
Ref<Image> img = tex.image;
|
|
Ref<Image> img = tex.image;
|
|
|
|
+ if (fgl.from_svg) {
|
|
|
|
+ // Same as the "fix alpha border" process option when importing SVGs
|
|
|
|
+ img->fix_alpha_edges();
|
|
|
|
+ }
|
|
if (fd->mipmaps && !img->has_mipmaps()) {
|
|
if (fd->mipmaps && !img->has_mipmaps()) {
|
|
img = tex.image->duplicate();
|
|
img = tex.image->duplicate();
|
|
img->generate_mipmaps();
|
|
img->generate_mipmaps();
|
|
@@ -3360,6 +3366,10 @@ Size2 TextServerAdvanced::_font_get_glyph_texture_size(const RID &p_font_rid, co
|
|
if (ffsd->textures[fgl.texture_idx].dirty) {
|
|
if (ffsd->textures[fgl.texture_idx].dirty) {
|
|
ShelfPackTexture &tex = ffsd->textures.write[fgl.texture_idx];
|
|
ShelfPackTexture &tex = ffsd->textures.write[fgl.texture_idx];
|
|
Ref<Image> img = tex.image;
|
|
Ref<Image> img = tex.image;
|
|
|
|
+ if (fgl.from_svg) {
|
|
|
|
+ // Same as the "fix alpha border" process option when importing SVGs
|
|
|
|
+ img->fix_alpha_edges();
|
|
|
|
+ }
|
|
if (fd->mipmaps && !img->has_mipmaps()) {
|
|
if (fd->mipmaps && !img->has_mipmaps()) {
|
|
img = tex.image->duplicate();
|
|
img = tex.image->duplicate();
|
|
img->generate_mipmaps();
|
|
img->generate_mipmaps();
|
|
@@ -3798,7 +3808,7 @@ void TextServerAdvanced::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca
|
|
if (fgl.texture_idx != -1) {
|
|
if (fgl.texture_idx != -1) {
|
|
Color modulate = p_color;
|
|
Color modulate = p_color;
|
|
#ifdef MODULE_FREETYPE_ENABLED
|
|
#ifdef MODULE_FREETYPE_ENABLED
|
|
- if (ffsd->face && ffsd->textures[fgl.texture_idx].image.is_valid() && (ffsd->textures[fgl.texture_idx].image->get_format() == Image::FORMAT_RGBA8) && !lcd_aa && !fd->msdf) {
|
|
|
|
|
|
+ if (!fgl.from_svg && ffsd->face && ffsd->textures[fgl.texture_idx].image.is_valid() && (ffsd->textures[fgl.texture_idx].image->get_format() == Image::FORMAT_RGBA8) && !lcd_aa && !fd->msdf) {
|
|
modulate.r = modulate.g = modulate.b = 1.0;
|
|
modulate.r = modulate.g = modulate.b = 1.0;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
@@ -3806,6 +3816,10 @@ void TextServerAdvanced::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca
|
|
if (ffsd->textures[fgl.texture_idx].dirty) {
|
|
if (ffsd->textures[fgl.texture_idx].dirty) {
|
|
ShelfPackTexture &tex = ffsd->textures.write[fgl.texture_idx];
|
|
ShelfPackTexture &tex = ffsd->textures.write[fgl.texture_idx];
|
|
Ref<Image> img = tex.image;
|
|
Ref<Image> img = tex.image;
|
|
|
|
+ if (fgl.from_svg) {
|
|
|
|
+ // Same as the "fix alpha border" process option when importing SVGs
|
|
|
|
+ img->fix_alpha_edges();
|
|
|
|
+ }
|
|
if (fd->mipmaps && !img->has_mipmaps()) {
|
|
if (fd->mipmaps && !img->has_mipmaps()) {
|
|
img = tex.image->duplicate();
|
|
img = tex.image->duplicate();
|
|
img->generate_mipmaps();
|
|
img->generate_mipmaps();
|