@@ -78,6 +78,54 @@ pub const kCTFontOptionsDefault: CTFontOptions = 0;
7878pub const kCTFontOptionsPreventAutoActivation: CTFontOptions = 1 << 0 ;
7979pub 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 ) ]
82130pub 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-
474510pub 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
489523pub 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() {
930964fn ui_font ( ) {
931965 // pass some garbagey inputs
932966 new_ui_font_for_language ( kCTFontSystemDetailFontType, 10000009. , Some ( CFString :: from ( "Gofld" ) ) ) ;
933- }
967+ }
0 commit comments