TUPLE: line font line metrics image loc dim disposed ;
-: compute-line-metrics ( open-font line -- line-metrics )
- [
- [ metrics new ] dip
- [ CTFontGetCapHeight >>cap-height ]
- [ CTFontGetXHeight >>x-height ]
- bi
- ] dip
+: typographic-bounds ( line -- width ascent descent leading )
0 <CGFloat> 0 <CGFloat> 0 <CGFloat>
- [ CTLineGetTypographicBounds ] 3keep
+ [ CTLineGetTypographicBounds ] 3keep [ *CGFloat ] tri@ ; inline
+
+: store-typographic-bounds ( metrics width ascent descent leading -- metrics )
{
[ >>width ]
- [ *CGFloat >>ascent ]
- [ *CGFloat >>descent ]
- [ *CGFloat >>leading ]
- } spread
- dup compute-height ;
+ [ >>ascent ]
+ [ >>descent ]
+ [ >>leading ]
+ } spread ; inline
+
+: compute-font-metrics ( metrics font -- metrics )
+ [ CTFontGetCapHeight >>cap-height ]
+ [ CTFontGetXHeight >>x-height ]
+ bi ; inline
+
+: compute-line-metrics ( open-font line -- line-metrics )
+ [ metrics new ] 2dip
+ [ compute-font-metrics ]
+ [ typographic-bounds store-typographic-bounds ] bi*
+ compute-height ;
: metrics>dim ( bounds -- dim )
[ width>> ] [ [ ascent>> ] [ descent>> ] bi + ] bi
[ CTFontGetCapHeight >>cap-height ]
[ CTFontGetXHeight >>x-height ]
} cleave
- dup compute-height ;
+ compute-height ;
: cache-font-metrics ( font -- metrics )
strip-font-colors (cache-font-metrics) ;
TUPLE: metrics width ascent descent height leading cap-height x-height ;
-: compute-height ( metrics -- )
- dup [ ascent>> ] [ descent>> ] bi + >>height drop ;
+: compute-height ( metrics -- metrics )
+ dup [ ascent>> ] [ descent>> ] bi + >>height ; inline
TUPLE: selection string start end color ;