diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index ebb17965f8e..e3ae9861c00 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -1830,6 +1830,18 @@ bool TextServerAdvanced::_ensure_cache_for_size(FontAdvanced *p_font_data, const p_font_data->face_init = true; } +#if defined(MACOS_ENABLED) || defined(IOS_ENABLED) + if (p_font_data->font_name == ".Apple Color Emoji UI" || p_font_data->font_name == "Apple Color Emoji") { + // The baseline offset is missing from the Apple Color Emoji UI font data, so add it manually. + // This issue doesn't occur with other system emoji fonts. + if (!FT_Load_Glyph(fd->face, FT_Get_Char_Index(fd->face, 0x1F92E), FT_LOAD_DEFAULT | FT_LOAD_COLOR)) { + if (fd->face->glyph->metrics.horiBearingY == fd->face->glyph->metrics.height) { + p_font_data->baseline_offset = 0.15; + } + } + } +#endif + // Write variations. if (fd->face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS) { FT_MM_Var *amaster; diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index 2310bf24b0f..6e6ca199c8c 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -968,6 +968,18 @@ bool TextServerFallback::_ensure_cache_for_size(FontFallback *p_font_data, const p_font_data->face_init = true; } +#if defined(MACOS_ENABLED) || defined(IOS_ENABLED) + if (p_font_data->font_name == ".Apple Color Emoji UI" || p_font_data->font_name == "Apple Color Emoji") { + // The baseline offset is missing from the Apple Color Emoji UI font data, so add it manually. + // This issue doesn't occur with other system emoji fonts. + if (!FT_Load_Glyph(fd->face, FT_Get_Char_Index(fd->face, 0x1F92E), FT_LOAD_DEFAULT | FT_LOAD_COLOR)) { + if (fd->face->glyph->metrics.horiBearingY == fd->face->glyph->metrics.height) { + p_font_data->baseline_offset = 0.15; + } + } + } +#endif + // Write variations. if (fd->face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS) { FT_MM_Var *amaster;