From 6b629dfa5cecd0b866292de137145bd4edc6974f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 12 Apr 2022 19:37:26 +0200 Subject: [PATCH] Use `CTFont::draw_glyphs` to rasterize glyphs This API supports rendering emojis in addition to normal glyphs. --- crates/gpui/src/platform/mac/fonts.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/crates/gpui/src/platform/mac/fonts.rs b/crates/gpui/src/platform/mac/fonts.rs index 1706134f6709af5b1915f19674b1d41d3ac69e7a..23639fa077d4b4f5d01afd6956494dd319c047de 100644 --- a/crates/gpui/src/platform/mac/fonts.rs +++ b/crates/gpui/src/platform/mac/fonts.rs @@ -198,15 +198,18 @@ impl FontSystemState { ty: -transform.vector.y() as CGFloat, }); - cx.set_font(&font.native_font().copy_to_CGFont()); - cx.set_font_size(font_size as CGFloat); - cx.show_glyphs_at_positions( - &[glyph_id as CGGlyph], - &[CGPoint::new( - (subpixel_shift.x() / scale_factor) as CGFloat, - (subpixel_shift.y() / scale_factor) as CGFloat, - )], - ); + cx.set_should_subpixel_position_fonts(true); + cx.set_should_subpixel_quantize_fonts(false); + font.native_font() + .clone_with_font_size(font_size as CGFloat) + .draw_glyphs( + &[glyph_id as CGGlyph], + &[CGPoint::new( + (subpixel_shift.x() / scale_factor) as CGFloat, + (subpixel_shift.y() / scale_factor) as CGFloat, + )], + cx, + ); Some((bounds, pixels)) }