2009-01-30 04:36:39 -05:00
|
|
|
! Copyright (C) 2009 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: accessors alien.syntax assocs core-foundation
|
|
|
|
core-foundation.strings core-text.utilities destructors init
|
2009-02-13 21:19:57 -05:00
|
|
|
kernel math memoize fonts combinators ;
|
2009-01-30 04:36:39 -05:00
|
|
|
IN: core-text.fonts
|
|
|
|
|
|
|
|
TYPEDEF: void* CTFontRef
|
|
|
|
TYPEDEF: void* CTFontDescriptorRef
|
|
|
|
|
|
|
|
! CTFontSymbolicTraits
|
|
|
|
: kCTFontItalicTrait ( -- n ) 0 2^ ; inline
|
|
|
|
: kCTFontBoldTrait ( -- n ) 1 2^ ; inline
|
|
|
|
: kCTFontExpandedTrait ( -- n ) 5 2^ ; inline
|
|
|
|
: kCTFontCondensedTrait ( -- n ) 6 2^ ; inline
|
|
|
|
: kCTFontMonoSpaceTrait ( -- n ) 10 2^ ; inline
|
|
|
|
: kCTFontVerticalTrait ( -- n ) 11 2^ ; inline
|
|
|
|
: kCTFontUIOptimizedTrait ( -- n ) 12 2^ ; inline
|
|
|
|
|
|
|
|
C-GLOBAL: kCTFontSymbolicTrait
|
|
|
|
C-GLOBAL: kCTFontWeightTrait
|
|
|
|
C-GLOBAL: kCTFontWidthTrait
|
|
|
|
C-GLOBAL: kCTFontSlantTrait
|
|
|
|
|
|
|
|
C-GLOBAL: kCTFontNameAttribute
|
|
|
|
C-GLOBAL: kCTFontDisplayNameAttribute
|
|
|
|
C-GLOBAL: kCTFontFamilyNameAttribute
|
|
|
|
C-GLOBAL: kCTFontStyleNameAttribute
|
|
|
|
C-GLOBAL: kCTFontTraitsAttribute
|
|
|
|
C-GLOBAL: kCTFontVariationAttribute
|
|
|
|
C-GLOBAL: kCTFontSizeAttribute
|
|
|
|
C-GLOBAL: kCTFontMatrixAttribute
|
|
|
|
C-GLOBAL: kCTFontCascadeListAttribute
|
|
|
|
C-GLOBAL: kCTFontCharacterSetAttribute
|
|
|
|
C-GLOBAL: kCTFontLanguagesAttribute
|
|
|
|
C-GLOBAL: kCTFontBaselineAdjustAttribute
|
|
|
|
C-GLOBAL: kCTFontMacintoshEncodingsAttribute
|
|
|
|
C-GLOBAL: kCTFontFeaturesAttribute
|
|
|
|
C-GLOBAL: kCTFontFeatureSettingsAttribute
|
|
|
|
C-GLOBAL: kCTFontFixedAdvanceAttribute
|
|
|
|
C-GLOBAL: kCTFontOrientationAttribute
|
|
|
|
|
|
|
|
FUNCTION: CTFontDescriptorRef CTFontDescriptorCreateWithAttributes (
|
|
|
|
CFDictionaryRef attributes
|
|
|
|
) ;
|
|
|
|
|
|
|
|
FUNCTION: CTFontRef CTFontCreateWithName (
|
|
|
|
CFStringRef name,
|
|
|
|
CGFloat size,
|
|
|
|
CGAffineTransform* matrix
|
|
|
|
) ;
|
|
|
|
|
|
|
|
FUNCTION: CTFontRef CTFontCreateWithFontDescriptor (
|
|
|
|
CTFontDescriptorRef descriptor,
|
|
|
|
CGFloat size,
|
|
|
|
CGAffineTransform* matrix
|
|
|
|
) ;
|
|
|
|
|
|
|
|
FUNCTION: CTFontRef CTFontCreateCopyWithSymbolicTraits (
|
|
|
|
CTFontRef font,
|
|
|
|
CGFloat size,
|
|
|
|
CGAffineTransform* matrix,
|
|
|
|
uint32_t symTraitValue,
|
|
|
|
uint32_t symTraitMask
|
|
|
|
) ;
|
|
|
|
|
2009-02-13 21:19:57 -05:00
|
|
|
FUNCTION: CGFloat CTFontGetAscent ( CTFontRef font ) ;
|
|
|
|
|
|
|
|
FUNCTION: CGFloat CTFontGetDescent ( CTFontRef font ) ;
|
|
|
|
|
|
|
|
FUNCTION: CGFloat CTFontGetLeading ( CTFontRef font ) ;
|
|
|
|
|
2009-02-15 03:13:16 -05:00
|
|
|
FUNCTION: CGFloat CTFontGetCapHeight ( CTFontRef font ) ;
|
|
|
|
|
|
|
|
FUNCTION: CGFloat CTFontGetXHeight ( CTFontRef font ) ;
|
|
|
|
|
2009-01-30 04:36:39 -05:00
|
|
|
CONSTANT: font-names
|
|
|
|
H{
|
|
|
|
{ "monospace" "Monaco" }
|
|
|
|
{ "sans-serif" "Lucida Grande" }
|
|
|
|
{ "serif" "Times" }
|
|
|
|
}
|
|
|
|
|
|
|
|
: font-name ( string -- string' )
|
|
|
|
font-names at-default ;
|
|
|
|
|
|
|
|
: (bold) ( x -- y ) kCTFontBoldTrait bitor ; inline
|
|
|
|
|
|
|
|
: (italic) ( x -- y ) kCTFontItalicTrait bitor ; inline
|
|
|
|
|
|
|
|
: font-traits ( font -- n )
|
|
|
|
[ 0 ] dip
|
|
|
|
[ bold?>> [ (bold) ] when ]
|
|
|
|
[ italic?>> [ (italic) ] when ] bi ;
|
|
|
|
|
|
|
|
: apply-font-traits ( font style -- font' )
|
|
|
|
[ drop ] [ [ 0.0 f ] dip font-traits dup ] 2bi
|
|
|
|
CTFontCreateCopyWithSymbolicTraits
|
|
|
|
dup [ [ CFRelease ] dip ] [ drop ] if ;
|
|
|
|
|
|
|
|
MEMO: (cache-font) ( font -- open-font )
|
|
|
|
[
|
|
|
|
[
|
|
|
|
[ name>> font-name <CFString> &CFRelease ] [ size>> ] bi
|
|
|
|
f CTFontCreateWithName
|
|
|
|
] keep apply-font-traits
|
|
|
|
] with-destructors ;
|
|
|
|
|
|
|
|
: cache-font ( font -- open-font )
|
2009-02-13 21:19:57 -05:00
|
|
|
strip-font-colors (cache-font) ;
|
|
|
|
|
|
|
|
MEMO: (cache-font-metrics) ( font -- metrics )
|
2009-02-15 03:13:16 -05:00
|
|
|
[ metrics new ] dip
|
2009-02-13 21:19:57 -05:00
|
|
|
(cache-font) {
|
2009-02-15 03:13:16 -05:00
|
|
|
[ CTFontGetAscent >>ascent ]
|
|
|
|
[ CTFontGetDescent >>descent ]
|
|
|
|
[ CTFontGetLeading >>leading ]
|
|
|
|
[ CTFontGetCapHeight >>cap-height ]
|
|
|
|
[ CTFontGetXHeight >>x-height ]
|
|
|
|
} cleave
|
2009-02-21 02:26:50 -05:00
|
|
|
compute-height ;
|
2009-02-13 21:19:57 -05:00
|
|
|
|
|
|
|
: cache-font-metrics ( font -- metrics )
|
|
|
|
strip-font-colors (cache-font-metrics) ;
|
|
|
|
|
|
|
|
[
|
|
|
|
\ (cache-font) reset-memoized
|
|
|
|
\ (cache-font-metrics) reset-memoized
|
|
|
|
] "core-text.fonts" add-init-hook
|