Skip to content

Commit 29af672

Browse files
authored
Auto merge of #500 - ssssota:master, r=jdm
Add get name function to CTFont ## Overview Now we can get family name, full name, postscript name and some names. But I want to use other names. (e.g. Copyright notice, License etc...) So, I made `get_string_by_name_key` methods from helper function.
2 parents 9941118 + b0e0dd8 commit 29af672

File tree

1 file changed

+91
-57
lines changed

1 file changed

+91
-57
lines changed

core-text/src/font.rs

Lines changed: 91 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,54 @@ pub const kCTFontOptionsDefault: CTFontOptions = 0;
7878
pub const kCTFontOptionsPreventAutoActivation: CTFontOptions = 1 << 0;
7979
pub const kCTFontOptionsPreferSystemFont: CTFontOptions = 1 << 2;
8080

81+
pub enum CTFontNameSpecifier {
82+
Copyright,
83+
Family,
84+
SubFamily,
85+
Style,
86+
Unique,
87+
Full,
88+
Version,
89+
PostScript,
90+
Trademark,
91+
Manufacturer,
92+
Designer,
93+
Description,
94+
VendorURL,
95+
DesignerURL,
96+
License,
97+
LicenseURL,
98+
SampleText,
99+
PostScriptCID,
100+
}
101+
102+
impl Into<CFStringRef> for CTFontNameSpecifier {
103+
fn into(self) -> CFStringRef {
104+
unsafe {
105+
match self {
106+
CTFontNameSpecifier::Copyright => kCTFontCopyrightNameKey,
107+
CTFontNameSpecifier::Family => kCTFontFamilyNameKey,
108+
CTFontNameSpecifier::SubFamily => kCTFontSubFamilyNameKey,
109+
CTFontNameSpecifier::Style => kCTFontStyleNameKey,
110+
CTFontNameSpecifier::Unique => kCTFontUniqueNameKey,
111+
CTFontNameSpecifier::Full => kCTFontFullNameKey,
112+
CTFontNameSpecifier::Version => kCTFontVersionNameKey,
113+
CTFontNameSpecifier::PostScript => kCTFontPostScriptNameKey,
114+
CTFontNameSpecifier::Trademark => kCTFontTrademarkNameKey,
115+
CTFontNameSpecifier::Manufacturer => kCTFontManufacturerNameKey,
116+
CTFontNameSpecifier::Designer => kCTFontDesignerNameKey,
117+
CTFontNameSpecifier::Description => kCTFontDescriptionNameKey,
118+
CTFontNameSpecifier::VendorURL => kCTFontVendorURLNameKey,
119+
CTFontNameSpecifier::DesignerURL => kCTFontDesignerURLNameKey,
120+
CTFontNameSpecifier::License => kCTFontLicenseNameKey,
121+
CTFontNameSpecifier::LicenseURL => kCTFontLicenseURLNameKey,
122+
CTFontNameSpecifier::SampleText => kCTFontSampleTextNameKey,
123+
CTFontNameSpecifier::PostScriptCID => kCTFontPostScriptCIDNameKey,
124+
}
125+
}
126+
}
127+
}
128+
81129
#[repr(C)]
82130
pub struct __CTFont(c_void);
83131

@@ -221,46 +269,45 @@ impl CTFont {
221269
}
222270

223271
// Names
224-
pub fn family_name(&self) -> String {
272+
pub fn get_string_by_name_key(&self, name_key: CTFontNameSpecifier) -> Option<String> {
225273
unsafe {
226-
let value = get_string_by_name_key(self, kCTFontFamilyNameKey);
227-
value.expect("Fonts should always have a family name.")
274+
let result = CTFontCopyName(self.as_concrete_TypeRef(), name_key.into());
275+
if result.is_null() {
276+
None
277+
} else {
278+
Some(CFString::wrap_under_create_rule(result).to_string())
279+
}
228280
}
229281
}
230282

283+
pub fn family_name(&self) -> String {
284+
let value = self.get_string_by_name_key(CTFontNameSpecifier::Family);
285+
value.expect("Fonts should always have a family name.")
286+
}
287+
231288
pub fn face_name(&self) -> String {
232-
unsafe {
233-
let value = get_string_by_name_key(self, kCTFontSubFamilyNameKey);
234-
value.expect("Fonts should always have a face name.")
235-
}
289+
let value = self.get_string_by_name_key(CTFontNameSpecifier::SubFamily);
290+
value.expect("Fonts should always have a face name.")
236291
}
237292

238293
pub fn unique_name(&self) -> String {
239-
unsafe {
240-
let value = get_string_by_name_key(self, kCTFontUniqueNameKey);
241-
value.expect("Fonts should always have a unique name.")
242-
}
294+
let value = self.get_string_by_name_key(CTFontNameSpecifier::Unique);
295+
value.expect("Fonts should always have a unique name.")
243296
}
244297

245298
pub fn postscript_name(&self) -> String {
246-
unsafe {
247-
let value = get_string_by_name_key(self, kCTFontPostScriptNameKey);
248-
value.expect("Fonts should always have a PostScript name.")
249-
}
299+
let value = self.get_string_by_name_key(CTFontNameSpecifier::PostScript);
300+
value.expect("Fonts should always have a PostScript name.")
250301
}
251302

252303
pub fn display_name(&self) -> String {
253-
unsafe {
254-
let value = get_string_by_name_key(self, kCTFontFullNameKey);
255-
value.expect("Fonts should always have a PostScript name.")
256-
}
304+
let value = self.get_string_by_name_key(CTFontNameSpecifier::Full);
305+
value.expect("Fonts should always have a PostScript name.")
257306
}
258307

259308
pub fn style_name(&self) -> String {
260-
unsafe {
261-
let value = get_string_by_name_key(self, kCTFontStyleNameKey);
262-
value.expect("Fonts should always have a style name.")
263-
}
309+
let value = self.get_string_by_name_key(CTFontNameSpecifier::Style);
310+
value.expect("Fonts should always have a style name.")
264311
}
265312

266313
pub fn all_traits(&self) -> CTFontTraits {
@@ -460,30 +507,17 @@ impl CTFont {
460507
}
461508

462509
// Helper methods
463-
fn get_string_by_name_key(font: &CTFont, name_key: CFStringRef) -> Option<String> {
464-
unsafe {
465-
let result = CTFontCopyName(font.as_concrete_TypeRef(), name_key);
466-
if result.is_null() {
467-
None
468-
} else {
469-
Some(CFString::wrap_under_create_rule(result).to_string())
470-
}
471-
}
472-
}
473-
474510
pub fn debug_font_names(font: &CTFont) {
475-
fn get_key(font: &CTFont, key: CFStringRef) -> String {
476-
get_string_by_name_key(font, key).unwrap()
511+
fn get_key(font: &CTFont, key: CTFontNameSpecifier) -> String {
512+
font.get_string_by_name_key(key).unwrap()
477513
}
478514

479-
unsafe {
480-
println!("kCTFontFamilyNameKey: {}", get_key(font, kCTFontFamilyNameKey));
481-
println!("kCTFontSubFamilyNameKey: {}", get_key(font, kCTFontSubFamilyNameKey));
482-
println!("kCTFontStyleNameKey: {}", get_key(font, kCTFontStyleNameKey));
483-
println!("kCTFontUniqueNameKey: {}", get_key(font, kCTFontUniqueNameKey));
484-
println!("kCTFontFullNameKey: {}", get_key(font, kCTFontFullNameKey));
485-
println!("kCTFontPostScriptNameKey: {}", get_key(font, kCTFontPostScriptNameKey));
486-
}
515+
println!("kCTFontFamilyNameKey: {}", get_key(font, CTFontNameSpecifier::Family));
516+
println!("kCTFontSubFamilyNameKey: {}", get_key(font, CTFontNameSpecifier::SubFamily));
517+
println!("kCTFontStyleNameKey: {}", get_key(font, CTFontNameSpecifier::Style));
518+
println!("kCTFontUniqueNameKey: {}", get_key(font, CTFontNameSpecifier::Unique));
519+
println!("kCTFontFullNameKey: {}", get_key(font, CTFontNameSpecifier::Full));
520+
println!("kCTFontPostScriptNameKey: {}", get_key(font, CTFontNameSpecifier::PostScript));
487521
}
488522

489523
pub fn debug_font_traits(font: &CTFont) {
@@ -517,24 +551,24 @@ extern {
517551
*/
518552

519553
/* Name Specifier Constants */
520-
//static kCTFontCopyrightNameKey: CFStringRef;
554+
static kCTFontCopyrightNameKey: CFStringRef;
521555
static kCTFontFamilyNameKey: CFStringRef;
522556
static kCTFontSubFamilyNameKey: CFStringRef;
523557
static kCTFontStyleNameKey: CFStringRef;
524558
static kCTFontUniqueNameKey: CFStringRef;
525559
static kCTFontFullNameKey: CFStringRef;
526-
//static kCTFontVersionNameKey: CFStringRef;
560+
static kCTFontVersionNameKey: CFStringRef;
527561
static kCTFontPostScriptNameKey: CFStringRef;
528-
//static kCTFontTrademarkNameKey: CFStringRef;
529-
//static kCTFontManufacturerNameKey: CFStringRef;
530-
//static kCTFontDesignerNameKey: CFStringRef;
531-
//static kCTFontDescriptionNameKey: CFStringRef;
532-
//static kCTFontVendorURLNameKey: CFStringRef;
533-
//static kCTFontDesignerURLNameKey: CFStringRef;
534-
//static kCTFontLicenseNameKey: CFStringRef;
535-
//static kCTFontLicenseURLNameKey: CFStringRef;
536-
//static kCTFontSampleTextNameKey: CFStringRef;
537-
//static kCTFontPostScriptCIDNameKey: CFStringRef;
562+
static kCTFontTrademarkNameKey: CFStringRef;
563+
static kCTFontManufacturerNameKey: CFStringRef;
564+
static kCTFontDesignerNameKey: CFStringRef;
565+
static kCTFontDescriptionNameKey: CFStringRef;
566+
static kCTFontVendorURLNameKey: CFStringRef;
567+
static kCTFontDesignerURLNameKey: CFStringRef;
568+
static kCTFontLicenseNameKey: CFStringRef;
569+
static kCTFontLicenseURLNameKey: CFStringRef;
570+
static kCTFontSampleTextNameKey: CFStringRef;
571+
static kCTFontPostScriptCIDNameKey: CFStringRef;
538572

539573
#[cfg(test)]
540574
static kCTFontVariationAxisIdentifierKey: CFStringRef;
@@ -930,4 +964,4 @@ fn system_font_variation() {
930964
fn ui_font() {
931965
// pass some garbagey inputs
932966
new_ui_font_for_language(kCTFontSystemDetailFontType, 10000009., Some(CFString::from("Gofld")));
933-
}
967+
}

0 commit comments

Comments
 (0)