From adbcf69a8dd2734fac2ed448b47626f02407ab93 Mon Sep 17 00:00:00 2001 From: Laurenz Stampfl <47084093+LaurenzV@users.noreply.github.com> Date: Sat, 30 Nov 2024 12:38:24 +0100 Subject: [PATCH] Allow disabling using color tables for fonts --- crates/krilla/src/font/bitmap.rs | 4 +-- crates/krilla/src/font/colr.rs | 6 ++-- crates/krilla/src/font/mod.rs | 24 +++++++++++--- crates/krilla/src/font/svg.rs | 10 ++++-- crates/krilla/src/object/font/cid_font.rs | 16 +++++----- crates/krilla/src/object/font/type3_font.rs | 6 ++-- crates/krilla/src/serialize.rs | 16 ++++++---- crates/krilla/src/surface.rs | 32 +++++++++---------- crates/krilla/src/tagging.rs | 2 +- crates/krilla/src/tests/mod.rs | 3 +- crates/krilla/src/validation/mod.rs | 14 ++++---- refs/visreg/twitter_color_emoji_no_color.png | Bin 0 -> 31160 bytes 12 files changed, 80 insertions(+), 53 deletions(-) create mode 100644 refs/visreg/twitter_color_emoji_no_color.png diff --git a/crates/krilla/src/font/bitmap.rs b/crates/krilla/src/font/bitmap.rs index a295f70d..d411a377 100644 --- a/crates/krilla/src/font/bitmap.rs +++ b/crates/krilla/src/font/bitmap.rs @@ -451,7 +451,7 @@ mod tests { #[visreg(document, pdfium, mupdf, pdfbox, ghostscript, poppler, quartz)] fn noto_color_emoji_cbdt(document: &mut Document) { let font_data = NOTO_COLOR_EMOJI_CBDT.clone(); - all_glyphs_to_pdf(font_data, None, false, document); + all_glyphs_to_pdf(font_data, None, false, true, document); } #[cfg(target_os = "macos")] @@ -461,6 +461,6 @@ mod tests { let font_data = Arc::new(std::fs::read("/System/Library/Fonts/Apple Color Emoji.ttc").unwrap()); - all_glyphs_to_pdf(font_data, None, false, document); + all_glyphs_to_pdf(font_data, None, false, true, document); } } diff --git a/crates/krilla/src/font/colr.rs b/crates/krilla/src/font/colr.rs index 0bda36a6..a5ba3e5f 100644 --- a/crates/krilla/src/font/colr.rs +++ b/crates/krilla/src/font/colr.rs @@ -480,13 +480,13 @@ mod tests { .map(|n| (GlyphId::new(n), "".to_string())) .collect::>(); - all_glyphs_to_pdf(font_data, Some(glyphs), false, document); + all_glyphs_to_pdf(font_data, Some(glyphs), false, true, document); } #[visreg] fn colr_context_color(surface: &mut Surface) { let font_data = COLR_TEST_GLYPHS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); let text = [ 0xf0b00, 0xf0b01, 0xf0b02, 0xf0b03, 0xf0b04, 0xf0b05, 0xf0b06, 0xf0b07, @@ -570,6 +570,6 @@ mod tests { #[visreg(document, pdfium, mupdf, pdfbox, ghostscript, poppler, quartz)] fn noto_color_emoji_colr(document: &mut Document) { let font_data = NOTO_COLOR_EMOJI_COLR.clone(); - all_glyphs_to_pdf(font_data, None, false, document); + all_glyphs_to_pdf(font_data, None, false, true, document); } } diff --git a/crates/krilla/src/font/mod.rs b/crates/krilla/src/font/mod.rs index 549e55a6..8169da61 100644 --- a/crates/krilla/src/font/mod.rs +++ b/crates/krilla/src/font/mod.rs @@ -51,14 +51,24 @@ pub use skrifa::GlyphId; pub struct Font(Arc>); impl Font { - /// Create a new font from some data. The `index` indicates the index that should be + /// Create a new font from some data. + /// + /// The `index` indicates the index that should be /// associated with this font for TrueType collections, otherwise this value should be /// set to 0. The location indicates the variation axes that should be associated with /// the font. /// + /// The `allow_color` property allows you to specify whether krilla should render the font + /// as a color font. When setting this property to false, krilla will always only use the + /// `glyf`/`CFF` tables of the font. If you don't know what this means, just set it to `true`. + /// /// Returns `None` if the index is invalid or the font couldn't be read. - pub fn new(data: Arc + Send + Sync>, index: u32) -> Option { - let font_info = FontInfo::new(data.as_ref().as_ref(), index)?; + pub fn new( + data: Arc + Send + Sync>, + index: u32, + allow_color: bool, + ) -> Option { + let font_info = FontInfo::new(data.as_ref().as_ref(), index, allow_color)?; Font::new_with_info(data, Arc::new(font_info)) } @@ -108,6 +118,10 @@ impl Font { self.0.font_info.ascent.get() } + pub(crate) fn allow_color(&self) -> bool { + self.0.font_info.allow_color + } + pub(crate) fn weight(&self) -> f32 { self.0.font_info.weight.get() } @@ -182,6 +196,7 @@ pub(crate) struct FontInfo { global_bbox: RectWrapper, postscript_name: Option, ascent: FiniteF32, + allow_color: bool, descent: FiniteF32, cap_height: Option, is_monospaced: bool, @@ -208,7 +223,7 @@ impl Hash for Repr { } impl FontInfo { - pub(crate) fn new(data: &[u8], index: u32) -> Option { + pub(crate) fn new(data: &[u8], index: u32, allow_color: bool) -> Option { let font_ref = FontRef::from_index(data, index).ok()?; let checksum = font_ref.head().ok()?.checksum_adjustment(); @@ -252,6 +267,7 @@ impl FontInfo { index, checksum, location, + allow_color, units_per_em, postscript_name, ascent, diff --git a/crates/krilla/src/font/svg.rs b/crates/krilla/src/font/svg.rs index 8b615652..5fa097cd 100644 --- a/crates/krilla/src/font/svg.rs +++ b/crates/krilla/src/font/svg.rs @@ -80,13 +80,19 @@ mod tests { #[visreg(document, all)] fn twitter_color_emoji(document: &mut Document) { let font_data = TWITTER_COLOR_EMOJI.clone(); - all_glyphs_to_pdf(font_data, None, false, document); + all_glyphs_to_pdf(font_data, None, false, true, document); + } + + #[visreg(document)] + fn twitter_color_emoji_no_color(document: &mut Document) { + let font_data = TWITTER_COLOR_EMOJI.clone(); + all_glyphs_to_pdf(font_data, None, false, false, document); } #[visreg] fn svg_extra(surface: &mut Surface) { let font_data = SVG_EXTRA.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); surface.fill_text( Point::from_xy(0., 30.0), diff --git a/crates/krilla/src/object/font/cid_font.rs b/crates/krilla/src/object/font/cid_font.rs index 6b125d10..87c2a122 100644 --- a/crates/krilla/src/object/font/cid_font.rs +++ b/crates/krilla/src/object/font/cid_font.rs @@ -357,7 +357,7 @@ mod tests { #[snapshot] fn cid_font_noto_sans_two_glyphs(sc: &mut SerializerContext) { - let font = Font::new(NOTO_SANS.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS.clone(), 0, true).unwrap(); let container = sc.create_or_get_font_container(font.clone()); let mut font_container = container.borrow_mut(); @@ -374,7 +374,7 @@ mod tests { #[visreg(all)] fn cid_font_noto_sans_simple_text(surface: &mut Surface) { - let font = Font::new(NOTO_SANS.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), @@ -389,7 +389,7 @@ mod tests { #[visreg(all)] fn cid_font_latin_modern_simple_text(surface: &mut Surface) { - let font = Font::new(LATIN_MODERN_ROMAN.clone(), 0).unwrap(); + let font = Font::new(LATIN_MODERN_ROMAN.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), @@ -404,7 +404,7 @@ mod tests { #[visreg(all)] fn cid_font_noto_arabic_simple_text(surface: &mut Surface) { - let font = Font::new(NOTO_SANS_ARABIC.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS_ARABIC.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), @@ -419,7 +419,7 @@ mod tests { #[snapshot] fn cid_font_latin_modern_four_glyphs(sc: &mut SerializerContext) { - let font = Font::new(LATIN_MODERN_ROMAN.clone(), 0).unwrap(); + let font = Font::new(LATIN_MODERN_ROMAN.clone(), 0, true).unwrap(); let container = sc.create_or_get_font_container(font.clone()); let mut font_container = container.borrow_mut(); @@ -445,9 +445,9 @@ mod tests { let font_data = Arc::new(std::fs::read("/System/Library/Fonts/Supplemental/Songti.ttc").unwrap()); - let font_1 = Font::new(font_data.clone(), 0).unwrap(); - let font_2 = Font::new(font_data.clone(), 3).unwrap(); - let font_3 = Font::new(font_data, 6).unwrap(); + let font_1 = Font::new(font_data.clone(), 0, true).unwrap(); + let font_2 = Font::new(font_data.clone(), 3, true).unwrap(); + let font_3 = Font::new(font_data, 6, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 75.0), diff --git a/crates/krilla/src/object/font/type3_font.rs b/crates/krilla/src/object/font/type3_font.rs index e1a6fa76..b4e35b59 100644 --- a/crates/krilla/src/object/font/type3_font.rs +++ b/crates/krilla/src/object/font/type3_font.rs @@ -552,7 +552,7 @@ mod tests { #[test] fn type3_more_than_256_glyphs() { let mut sc = SerializerContext::new(SerializeSettings::settings_1()); - let font = Font::new(TWITTER_COLOR_EMOJI.clone(), 0).unwrap(); + let font = Font::new(TWITTER_COLOR_EMOJI.clone(), 0, true).unwrap(); let container = sc.create_or_get_font_container(font.clone()); let mut font_container = container.borrow_mut(); @@ -586,7 +586,7 @@ mod tests { #[snapshot(single_page, settings_1)] fn type3_color_glyphs(page: &mut Page) { - let font = Font::new(TWITTER_COLOR_EMOJI.clone(), 0).unwrap(); + let font = Font::new(TWITTER_COLOR_EMOJI.clone(), 0, true).unwrap(); let mut surface = page.surface(); surface.fill_text( @@ -603,7 +603,7 @@ mod tests { #[snapshot(single_page, settings_17)] fn type3_pdf_14(page: &mut Page) { - let font = Font::new(TWITTER_COLOR_EMOJI.clone(), 0).unwrap(); + let font = Font::new(TWITTER_COLOR_EMOJI.clone(), 0, true).unwrap(); let mut surface = page.surface(); surface.fill_text( diff --git a/crates/krilla/src/serialize.rs b/crates/krilla/src/serialize.rs index 2b79e4b3..edfe07d8 100644 --- a/crates/krilla/src/serialize.rs +++ b/crates/krilla/src/serialize.rs @@ -425,11 +425,15 @@ impl SerializerContext { // For now, we make the simplifying assumption that a font is either mapped // to a series of Type3 fonts or to a single CID font, but not a mix of both. let font_ref = font.font_ref(); - let use_type3 = font_ref.svg().is_ok() - || font_ref.colr().is_ok() - || font_ref.sbix().is_ok() - || font_ref.cbdt().is_ok() - || font_ref.ebdt().is_ok(); + let use_type3 = if !font.allow_color() { + false + } else { + font_ref.svg().is_ok() + || font_ref.colr().is_ok() + || font_ref.sbix().is_ok() + || font_ref.cbdt().is_ok() + || font_ref.ebdt().is_ok() + }; if use_type3 { Rc::new(RefCell::new(FontContainer::Type3(Type3FontMapper::new( @@ -487,7 +491,7 @@ impl SerializerContext { // cheaper, and then check whether we already have a corresponding font object in the cache. // If not, we still need to construct it. if let Some((font_data, index)) = unsafe { db.make_shared_face_data(id) } { - if let Some(font_info) = FontInfo::new(font_data.as_ref().as_ref(), index) { + if let Some(font_info) = FontInfo::new(font_data.as_ref().as_ref(), index, true) { let font_info = Arc::new(font_info); let font = self .font_cache diff --git a/crates/krilla/src/surface.rs b/crates/krilla/src/surface.rs index d78f85ae..625c0d21 100644 --- a/crates/krilla/src/surface.rs +++ b/crates/krilla/src/surface.rs @@ -658,7 +658,7 @@ mod tests { #[visreg] fn text_direction_ltr(surface: &mut Surface) { - let font = Font::new(NOTO_SANS_CJK.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS_CJK.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), @@ -673,7 +673,7 @@ mod tests { #[visreg] fn text_direction_rtl(surface: &mut Surface) { - let font = Font::new(NOTO_SANS_CJK.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS_CJK.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), @@ -688,7 +688,7 @@ mod tests { #[visreg] fn text_direction_ttb(surface: &mut Surface) { - let font = Font::new(NOTO_SANS_CJK.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS_CJK.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(100.0, 0.0), Fill::default(), @@ -703,7 +703,7 @@ mod tests { #[visreg] fn text_direction_btt(surface: &mut Surface) { - let font = Font::new(NOTO_SANS_CJK.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS_CJK.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(100.0, 0.0), Fill::default(), @@ -783,7 +783,7 @@ mod tests { surface.fill_text( Point::from_xy(0.0, 50.0), Fill::default(), - Font::new(NOTO_SANS.clone(), 0).unwrap(), + Font::new(NOTO_SANS.clone(), 0, true).unwrap(), 16.0, &[], "hi there", @@ -797,7 +797,7 @@ mod tests { surface.stroke_text( Point::from_xy(0.0, 50.0), Stroke::default(), - Font::new(NOTO_SANS.clone(), 0).unwrap(), + Font::new(NOTO_SANS.clone(), 0, true).unwrap(), 16.0, &[], "hi there", @@ -811,7 +811,7 @@ mod tests { surface.fill_text( Point::from_xy(0.0, 50.0), Fill::default(), - Font::new(NOTO_SANS_DEVANAGARI.clone(), 0).unwrap(), + Font::new(NOTO_SANS_DEVANAGARI.clone(), 0, true).unwrap(), 16.0, &[], "यह कुछ जटिल पाठ है.", @@ -825,7 +825,7 @@ mod tests { surface.fill_text( Point::from_xy(0.0, 50.0), Fill::default(), - Font::new(NOTO_SANS_DEVANAGARI.clone(), 0).unwrap(), + Font::new(NOTO_SANS_DEVANAGARI.clone(), 0, true).unwrap(), 16.0, &[], "यु॒धा नर॑ ऋ॒ष्वा ", @@ -839,7 +839,7 @@ mod tests { surface.fill_text( Point::from_xy(0.0, 50.0), Fill::default(), - Font::new(NOTO_SANS_DEVANAGARI.clone(), 0).unwrap(), + Font::new(NOTO_SANS_DEVANAGARI.clone(), 0, true).unwrap(), 16.0, &[], "आ रु॒क्मैरा यु॒धा नर॑ ऋ॒ष्वा ऋ॒ष्टीर॑सृक्षत ।", @@ -853,7 +853,7 @@ mod tests { surface.fill_text( Point::from_xy(0.0, 50.0), Fill::default(), - Font::new(NOTO_SANS_DEVANAGARI.clone(), 0).unwrap(), + Font::new(NOTO_SANS_DEVANAGARI.clone(), 0, true).unwrap(), 16.0, &[], "अन्वे॑नाँ॒ अह॑ वि॒द्युतो॑ म॒रुतो॒ जज्झ॑तीरव भनर॑र्त॒ त्मना॑ दि॒वः ॥", @@ -956,7 +956,7 @@ mod tests { } fn text_with_fill_impl(surface: &mut Surface, outlined: bool) { - let font = Font::new(NOTO_SANS.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 80.0), red_fill(0.5), @@ -995,7 +995,7 @@ mod tests { TextDirection::Auto, ); - let noto_font = Font::new(NOTO_COLOR_EMOJI_COLR.clone(), 0).unwrap(); + let noto_font = Font::new(NOTO_COLOR_EMOJI_COLR.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 140.0), @@ -1031,7 +1031,7 @@ mod tests { } fn text_with_stroke_impl(surface: &mut Surface, outlined: bool) { - let font = Font::new(NOTO_SANS.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS.clone(), 0, true).unwrap(); surface.stroke_text( Point::from_xy(0.0, 80.0), red_stroke(0.5, 1.0), @@ -1070,7 +1070,7 @@ mod tests { TextDirection::Auto, ); - let font = Font::new(NOTO_COLOR_EMOJI_COLR.clone(), 0).unwrap(); + let font = Font::new(NOTO_COLOR_EMOJI_COLR.clone(), 0, true).unwrap(); surface.stroke_text( Point::from_xy(0.0, 140.0), @@ -1091,7 +1091,7 @@ mod tests { #[visreg] fn text_zalgo(surface: &mut Surface) { - let font = Font::new(NOTO_SANS.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), @@ -1106,7 +1106,7 @@ mod tests { #[visreg] fn text_zalgo_outlined(surface: &mut Surface) { - let font = Font::new(NOTO_SANS.clone(), 0).unwrap(); + let font = Font::new(NOTO_SANS.clone(), 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), Fill::default(), diff --git a/crates/krilla/src/tagging.rs b/crates/krilla/src/tagging.rs index 80ea0fe3..f7af4b3f 100644 --- a/crates/krilla/src/tagging.rs +++ b/crates/krilla/src/tagging.rs @@ -949,7 +949,7 @@ mod tests { impl SurfaceExt for Surface<'_> { fn fill_text_(&mut self, y: f32, content: &str) { let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); self.fill_text( tiny_skia_path::Point::from_xy(0.0, y), diff --git a/crates/krilla/src/tests/mod.rs b/crates/krilla/src/tests/mod.rs index 29831144..853e1482 100644 --- a/crates/krilla/src/tests/mod.rs +++ b/crates/krilla/src/tests/mod.rs @@ -439,12 +439,13 @@ pub fn all_glyphs_to_pdf( font_data: Arc>, glyphs: Option>, color_cycling: bool, + allow_color: bool, d: &mut Document, ) { use crate::font::KrillaGlyph; use crate::geom::Transform; - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, allow_color).unwrap(); let font_ref = font.font_ref(); let glyphs = glyphs.unwrap_or_else(|| { diff --git a/crates/krilla/src/validation/mod.rs b/crates/krilla/src/validation/mod.rs index 47ce0af4..d2a39d62 100644 --- a/crates/krilla/src/validation/mod.rs +++ b/crates/krilla/src/validation/mod.rs @@ -677,7 +677,7 @@ mod tests { let mut surface = page.surface(); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), @@ -705,7 +705,7 @@ mod tests { let mut surface = page.surface(); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); surface.fill_text( Point::from_xy(0.0, 100.0), @@ -729,7 +729,7 @@ mod tests { let mut surface = page.surface(); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); let id1 = surface.start_tagged(ContentTag::Span( "", @@ -792,7 +792,7 @@ mod tests { fn validation_pdfu_invalid_codepoint() { let mut document = Document::new_with(SerializeSettings::settings_9()); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); invalid_codepoint_impl(&mut document, font.clone(), "A\u{FEFF}B"); assert_eq!( @@ -809,7 +809,7 @@ mod tests { let metadata = Metadata::new().language("en".to_string()); document.set_metadata(metadata); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); invalid_codepoint_impl(&mut document, font.clone(), "A\u{E022}B"); assert_eq!( @@ -866,7 +866,7 @@ mod tests { let mut surface = page.surface(); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); let id1 = surface.start_tagged(ContentTag::Span("", None, None, None)); surface.fill_text( @@ -914,7 +914,7 @@ mod tests { let mut surface = page.surface(); let font_data = NOTO_SANS.clone(); - let font = Font::new(font_data, 0).unwrap(); + let font = Font::new(font_data, 0, true).unwrap(); let id1 = surface.start_tagged(ContentTag::Span("", None, None, None)); surface.fill_text( diff --git a/refs/visreg/twitter_color_emoji_no_color.png b/refs/visreg/twitter_color_emoji_no_color.png new file mode 100644 index 0000000000000000000000000000000000000000..3e461f27b3b5d801022a176b1a28932241fe9f48 GIT binary patch literal 31160 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 b)4l&6N3cb0B}o0s00000NkvXXu0mjf