diff options
author | Martin Robinson <mrobinson@igalia.com> | 2024-09-25 12:00:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-25 10:00:36 +0000 |
commit | 64f32f7ab36846d2536a74b6184ba1adfbdb3495 (patch) | |
tree | 8dec616582f822cbf7ef220d04647e7a7db10082 /components/fonts/platform | |
parent | 6f797709cfcd7ff4e824d95e8373b81ad2c88473 (diff) | |
download | servo-64f32f7ab36846d2536a74b6184ba1adfbdb3495.tar.gz servo-64f32f7ab36846d2536a74b6184ba1adfbdb3495.zip |
fonts: Make fast shaping determination platform-independent (#33540)
This makes the determination of whether or not to use fast shaping
platform independent. Previously it was less stringent for Windows,
leading to using it in cases where a font had a GSUB or GPOS table --
which broke proper shaping.
In addition, the test is made platform independent and expanded to be
more complete.
Finally, comments are added indicating that "fast shaping" will be
removed.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/fonts/platform')
-rw-r--r-- | components/fonts/platform/freetype/font.rs | 8 | ||||
-rw-r--r-- | components/fonts/platform/macos/font.rs | 11 | ||||
-rw-r--r-- | components/fonts/platform/windows/font.rs | 5 |
3 files changed, 1 insertions, 23 deletions
diff --git a/components/fonts/platform/freetype/font.rs b/components/fonts/platform/freetype/font.rs index 43885556942..827d02cca8f 100644 --- a/components/fonts/platform/freetype/font.rs +++ b/components/fonts/platform/freetype/font.rs @@ -75,7 +75,6 @@ pub struct PlatformFont { face: ReentrantMutex<FT_Face>, requested_face_size: Au, actual_face_size: Au, - can_do_fast_shaping: bool, } // FT_Face can be used in multiple threads, but from only one thread at a time. @@ -135,15 +134,12 @@ impl PlatformFontMethods for PlatformFont { Some(requested_size) => (requested_size, face.set_size(requested_size)?), None => (Au::zero(), Au::zero()), }; - let can_do_fast_shaping = - face.has_table(KERN) && !face.has_table(GPOS) && !face.has_table(GSUB); Ok(PlatformFont { face: ReentrantMutex::new(face), font_data: data, requested_face_size, actual_face_size, - can_do_fast_shaping, }) } @@ -215,10 +211,6 @@ impl PlatformFontMethods for PlatformFont { fixed_26_dot_6_to_float(delta.x) * self.unscalable_font_metrics_scale() } - fn can_do_fast_shaping(&self) -> bool { - self.can_do_fast_shaping - } - fn glyph_h_advance(&self, glyph: GlyphId) -> Option<FractionalPixel> { let face = self.face.lock(); assert!(!face.is_null()); diff --git a/components/fonts/platform/macos/font.rs b/components/fonts/platform/macos/font.rs index 13af8ae034e..e2a68d340ce 100644 --- a/components/fonts/platform/macos/font.rs +++ b/components/fonts/platform/macos/font.rs @@ -26,7 +26,7 @@ use super::core_text_font_cache::CoreTextFontCache; use crate::{ map_platform_values_to_style_values, FontIdentifier, FontMetrics, FontTableMethods, FontTableTag, FontTemplateDescriptor, FractionalPixel, GlyphId, PlatformFontMethods, CBDT, - COLR, GPOS, GSUB, KERN, SBIX, + COLR, KERN, SBIX, }; const KERN_PAIR_LEN: usize = 6; @@ -59,7 +59,6 @@ pub struct PlatformFont { /// data stays alive of the lifetime of this struct. _data: Arc<Vec<u8>>, h_kern_subtable: Option<CachedKernTable>, - can_do_fast_shaping: bool, } // From https://developer.apple.com/documentation/coretext: @@ -189,12 +188,8 @@ impl PlatformFontMethods for PlatformFont { _data: data, ctfont: core_text_font.clone_with_font_size(size), h_kern_subtable: None, - can_do_fast_shaping: false, }; handle.h_kern_subtable = handle.find_h_kern_subtable(); - handle.can_do_fast_shaping = handle.h_kern_subtable.is_some() && - handle.table_for_tag(GPOS).is_none() && - handle.table_for_tag(GSUB).is_none(); Ok(handle) } @@ -239,10 +234,6 @@ impl PlatformFontMethods for PlatformFont { 0.0 } - fn can_do_fast_shaping(&self) -> bool { - self.can_do_fast_shaping - } - fn glyph_h_advance(&self, glyph: GlyphId) -> Option<FractionalPixel> { let glyphs = [glyph as CGGlyph]; let advance = unsafe { diff --git a/components/fonts/platform/windows/font.rs b/components/fonts/platform/windows/font.rs index 4974a225054..db7c94cd85a 100644 --- a/components/fonts/platform/windows/font.rs +++ b/components/fonts/platform/windows/font.rs @@ -211,11 +211,6 @@ impl PlatformFontMethods for PlatformFont { Some(f) } - /// Can this font do basic horizontal LTR shaping without Harfbuzz? - fn can_do_fast_shaping(&self) -> bool { - self.face.has_kerning_pairs() - } - fn glyph_h_kerning(&self, first_glyph: GlyphId, second_glyph: GlyphId) -> FractionalPixel { let adjustment = self .face |