Skip to content

Commit 8e458d1

Browse files
committed
Merge pull request #109152 from bruvzg/font_fb_no_msdf
Use non-MSDF fallback for MSDF fonts if fallback is a color or non-scalable font.
2 parents 1d204f1 + 738dd2f commit 8e458d1

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
@@ -5716,10 +5716,25 @@ RID TextServerAdvanced::_find_sys_font_for_text(const RID &p_fdef, const String
57165716
}
57175717
}
57185718

5719+
bool fb_use_msdf = key.msdf;
5720+
if (fb_use_msdf) {
5721+
FontAdvanced *fd = _get_font_data(sysf.rid);
5722+
if (fd) {
5723+
MutexLock lock(fd->mutex);
5724+
Vector2i size = _get_size(fd, 16);
5725+
FontForSizeAdvanced *ffsd = nullptr;
5726+
if (_ensure_cache_for_size(fd, size, ffsd)) {
5727+
if (ffsd && (FT_HAS_COLOR(ffsd->face) || !FT_IS_SCALABLE(ffsd->face))) {
5728+
fb_use_msdf = false;
5729+
}
5730+
}
5731+
}
5732+
}
5733+
57195734
_font_set_antialiasing(sysf.rid, key.antialiasing);
57205735
_font_set_disable_embedded_bitmaps(sysf.rid, key.disable_embedded_bitmaps);
57215736
_font_set_generate_mipmaps(sysf.rid, key.mipmaps);
5722-
_font_set_multichannel_signed_distance_field(sysf.rid, key.msdf);
5737+
_font_set_multichannel_signed_distance_field(sysf.rid, fb_use_msdf);
57235738
_font_set_msdf_pixel_range(sysf.rid, key.msdf_range);
57245739
_font_set_msdf_size(sysf.rid, key.msdf_source_size);
57255740
_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
@@ -4467,10 +4467,25 @@ RID TextServerFallback::_find_sys_font_for_text(const RID &p_fdef, const String
44674467
}
44684468
}
44694469

4470+
bool fb_use_msdf = key.msdf;
4471+
if (fb_use_msdf) {
4472+
FontFallback *fd = _get_font_data(sysf.rid);
4473+
if (fd) {
4474+
MutexLock lock(fd->mutex);
4475+
Vector2i size = _get_size(fd, 16);
4476+
FontForSizeFallback *ffsd = nullptr;
4477+
if (_ensure_cache_for_size(fd, size, ffsd)) {
4478+
if (ffsd && (FT_HAS_COLOR(ffsd->face) || !FT_IS_SCALABLE(ffsd->face))) {
4479+
fb_use_msdf = false;
4480+
}
4481+
}
4482+
}
4483+
}
4484+
44704485
_font_set_antialiasing(sysf.rid, key.antialiasing);
44714486
_font_set_disable_embedded_bitmaps(sysf.rid, key.disable_embedded_bitmaps);
44724487
_font_set_generate_mipmaps(sysf.rid, key.mipmaps);
4473-
_font_set_multichannel_signed_distance_field(sysf.rid, key.msdf);
4488+
_font_set_multichannel_signed_distance_field(sysf.rid, fb_use_msdf);
44744489
_font_set_msdf_pixel_range(sysf.rid, key.msdf_range);
44754490
_font_set_msdf_size(sysf.rid, key.msdf_source_size);
44764491
_font_set_fixed_size(sysf.rid, key.fixed_size);

0 commit comments

Comments
 (0)