Skip to content

Commit 738dd2f

Browse files
committed
Use non-MSDF fallback for MSDF fonts if fallback is a color or non-scalable font.
1 parent 2a9ff39 commit 738dd2f

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

modules/text_server_adv/text_server_adv.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5710,10 +5710,25 @@ RID TextServerAdvanced::_find_sys_font_for_text(const RID &p_fdef, const String
57105710
}
57115711
}
57125712

5713+
bool fb_use_msdf = key.msdf;
5714+
if (fb_use_msdf) {
5715+
FontAdvanced *fd = _get_font_data(sysf.rid);
5716+
if (fd) {
5717+
MutexLock lock(fd->mutex);
5718+
Vector2i size = _get_size(fd, 16);
5719+
FontForSizeAdvanced *ffsd = nullptr;
5720+
if (_ensure_cache_for_size(fd, size, ffsd)) {
5721+
if (ffsd && (FT_HAS_COLOR(ffsd->face) || !FT_IS_SCALABLE(ffsd->face))) {
5722+
fb_use_msdf = false;
5723+
}
5724+
}
5725+
}
5726+
}
5727+
57135728
_font_set_antialiasing(sysf.rid, key.antialiasing);
57145729
_font_set_disable_embedded_bitmaps(sysf.rid, key.disable_embedded_bitmaps);
57155730
_font_set_generate_mipmaps(sysf.rid, key.mipmaps);
5716-
_font_set_multichannel_signed_distance_field(sysf.rid, key.msdf);
5731+
_font_set_multichannel_signed_distance_field(sysf.rid, fb_use_msdf);
57175732
_font_set_msdf_pixel_range(sysf.rid, key.msdf_range);
57185733
_font_set_msdf_size(sysf.rid, key.msdf_source_size);
57195734
_font_set_fixed_size(sysf.rid, key.fixed_size);

modules/text_server_fb/text_server_fb.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4461,10 +4461,25 @@ RID TextServerFallback::_find_sys_font_for_text(const RID &p_fdef, const String
44614461
}
44624462
}
44634463

4464+
bool fb_use_msdf = key.msdf;
4465+
if (fb_use_msdf) {
4466+
FontFallback *fd = _get_font_data(sysf.rid);
4467+
if (fd) {
4468+
MutexLock lock(fd->mutex);
4469+
Vector2i size = _get_size(fd, 16);
4470+
FontForSizeFallback *ffsd = nullptr;
4471+
if (_ensure_cache_for_size(fd, size, ffsd)) {
4472+
if (ffsd && (FT_HAS_COLOR(ffsd->face) || !FT_IS_SCALABLE(ffsd->face))) {
4473+
fb_use_msdf = false;
4474+
}
4475+
}
4476+
}
4477+
}
4478+
44644479
_font_set_antialiasing(sysf.rid, key.antialiasing);
44654480
_font_set_disable_embedded_bitmaps(sysf.rid, key.disable_embedded_bitmaps);
44664481
_font_set_generate_mipmaps(sysf.rid, key.mipmaps);
4467-
_font_set_multichannel_signed_distance_field(sysf.rid, key.msdf);
4482+
_font_set_multichannel_signed_distance_field(sysf.rid, fb_use_msdf);
44684483
_font_set_msdf_pixel_range(sysf.rid, key.msdf_range);
44694484
_font_set_msdf_size(sysf.rid, key.msdf_source_size);
44704485
_font_set_fixed_size(sysf.rid, key.fixed_size);

0 commit comments

Comments
 (0)