Skip to content

Commit 9be2a05

Browse files
committed
Test the creation of variable CTFonts from CGFonts
1 parent 987123d commit 9be2a05

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

core-text/src/font.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -741,4 +741,40 @@ fn copy_system_font() {
741741
assert!(matching.attributes().find(CFString::from_static_string("NSFontSizeAttribute")).is_none());
742742

743743
assert_eq!(small.postscript_name(), cgfont.postscript_name());
744-
}
744+
}
745+
746+
#[test]
747+
fn variations_dict() {
748+
let mut vals_str: Vec<(CFString, CFNumber)> = Vec::new();
749+
let system_font = unsafe {
750+
CTFont::wrap_under_create_rule(
751+
CTFontCreateUIFontForLanguage(kCTFontEmphasizedSystemDetailFontType, 19., std::ptr::null())
752+
)
753+
};
754+
let font = system_font.copy_to_CGFont();
755+
vals_str.push((CFString::new("Weight"), (700.).into()) );
756+
let vars = CFDictionary::from_CFType_pairs(&vals_str);
757+
let var_font = CGFont::create_copy_from_variations(&font, &vars).unwrap();
758+
match macos_version() {
759+
(10, 11, _) => {
760+
assert!(font.copy_variation_axis().is_none());
761+
return;
762+
}
763+
_ => {}
764+
}
765+
766+
// create a ct_font
767+
let vars = var_font.copy_variations().unwrap();
768+
let ct_font = new_from_CGFont_with_variations(&var_font.clone(), 19., &vars);
769+
770+
// check if our variations worked
771+
let var = ct_font.copy_descriptor().attributes().find(CFString::from_static_string("NSCTFontVariationAttribute"))
772+
.unwrap()
773+
.downcast::<CFDictionary>()
774+
.unwrap();
775+
let var: CFDictionary<CFNumber, CFNumber> = unsafe { std::mem::transmute(var) };
776+
match macos_version() {
777+
// (10, 12, _) => assert!(var.find(CFNumber::from(0x77676874)).is_none()), // XXX: I'm not sure why this is
778+
_ => assert!(var.find(CFNumber::from(0x77676874)).is_some()),
779+
}
780+
}

0 commit comments

Comments
 (0)