@@ -78,6 +78,54 @@ pub const kCTFontOptionsDefault: CTFontOptions = 0;
78
78
pub const kCTFontOptionsPreventAutoActivation: CTFontOptions = 1 << 0 ;
79
79
pub const kCTFontOptionsPreferSystemFont: CTFontOptions = 1 << 2 ;
80
80
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
+
81
129
#[ repr( C ) ]
82
130
pub struct __CTFont ( c_void ) ;
83
131
@@ -221,46 +269,45 @@ impl CTFont {
221
269
}
222
270
223
271
// Names
224
- pub fn family_name ( & self ) -> String {
272
+ pub fn get_string_by_name_key ( & self , name_key : CTFontNameSpecifier ) -> Option < String > {
225
273
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
+ }
228
280
}
229
281
}
230
282
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
+
231
288
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." )
236
291
}
237
292
238
293
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." )
243
296
}
244
297
245
298
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." )
250
301
}
251
302
252
303
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." )
257
306
}
258
307
259
308
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." )
264
311
}
265
312
266
313
pub fn all_traits ( & self ) -> CTFontTraits {
@@ -460,30 +507,17 @@ impl CTFont {
460
507
}
461
508
462
509
// 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
-
474
510
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 ( )
477
513
}
478
514
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 ) ) ;
487
521
}
488
522
489
523
pub fn debug_font_traits ( font : & CTFont ) {
@@ -517,24 +551,24 @@ extern {
517
551
*/
518
552
519
553
/* Name Specifier Constants */
520
- // static kCTFontCopyrightNameKey: CFStringRef;
554
+ static kCTFontCopyrightNameKey: CFStringRef ;
521
555
static kCTFontFamilyNameKey: CFStringRef ;
522
556
static kCTFontSubFamilyNameKey: CFStringRef ;
523
557
static kCTFontStyleNameKey: CFStringRef ;
524
558
static kCTFontUniqueNameKey: CFStringRef ;
525
559
static kCTFontFullNameKey: CFStringRef ;
526
- // static kCTFontVersionNameKey: CFStringRef;
560
+ static kCTFontVersionNameKey: CFStringRef ;
527
561
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 ;
538
572
539
573
#[ cfg( test) ]
540
574
static kCTFontVariationAxisIdentifierKey: CFStringRef ;
@@ -930,4 +964,4 @@ fn system_font_variation() {
930
964
fn ui_font ( ) {
931
965
// pass some garbagey inputs
932
966
new_ui_font_for_language ( kCTFontSystemDetailFontType, 10000009. , Some ( CFString :: from ( "Gofld" ) ) ) ;
933
- }
967
+ }
0 commit comments