]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix pango font-metrics implementation
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Mon, 2 Mar 2009 04:10:20 +0000 (22:10 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Mon, 2 Mar 2009 04:10:20 +0000 (22:10 -0600)
basis/pango/layouts/layouts.factor
basis/ui/text/pango/pango.factor

index e8f96be48c0d2d4ece3327c34cfbf4d00ef20712..3d2a2da0a034da3507ef539103167bfe735eb7f7 100644 (file)
@@ -80,15 +80,6 @@ MEMO: (cache-font) ( font -- open-font )
 : cache-font ( font -- open-font )
     strip-font-colors (cache-font) ;
 
-: get-font-metrics ( font -- metrics )
-    f pango_font_get_metrics &pango_font_metrics_unref ;
-
-: parse-font-metrics ( metrics -- metrics' )
-    [ metrics new ] dip
-    [ pango_font_metrics_get_ascent pango>float >>ascent ]
-    [ pango_font_metrics_get_descent pango>float >>descent ] bi
-    compute-height ;
-
 : set-layout-font ( str layout -- )
     swap pango_layout_set_font_description ;
 
@@ -114,26 +105,16 @@ MEMO: (cache-font) ( font -- open-font )
 : glyph-height ( font string -- y )
     swap <PangoLayout> &g_object_unref layout-extents drop dim>> second ;
 
-: missing-font-metrics ( metrics font -- metrics )
-    #! Pango doesn't provide these, but Core Text does, so we
+MEMO: missing-font-metrics ( font -- metrics )
+    #! Pango doesn't provide x-height and cap-height but Core Text does, so we
     #! simulate them on Pango.
-    [ "x" glyph-height >>x-height ]
-    [ "Y" glyph-height >>cap-height ]
-    bi ;
-
-MEMO: (cache-font-metrics) ( font -- metrics )
     [
+        [ metrics new ] dip
         (cache-font)
-        [
-            get-font-metrics
-            parse-font-metrics
-        ] keep
-        missing-font-metrics
+        [ "x" glyph-height >>x-height ]
+        [ "Y" glyph-height >>cap-height ] bi
     ] with-destructors ;
 
-: cache-font-metrics ( font -- metrics )
-    strip-font-colors (cache-font-metrics) ;
-
 : layout-baseline ( layout -- baseline )
     pango_layout_get_iter &pango_layout_iter_free
     pango_layout_iter_get_baseline
@@ -180,7 +161,7 @@ MEMO: (cache-font-metrics) ( font -- metrics )
     first2 cairo_move_to ;
 
 : layout-metrics ( layout -- metrics )
-    dup font>> cache-font-metrics clone
+    dup font>> missing-font-metrics clone
         swap
         [ layout>> layout-baseline >>ascent ]
         [ logical-rect>> dim>> [ first >>width ] [ second >>height ] bi ] bi
index cbeb75d5f80c55933270cd627662f9bd93a4e9a7..e7f850fd95d90401ee80941bed5040311951344a 100644 (file)
@@ -31,7 +31,7 @@ M: pango-renderer offset>x ( n font string -- x )
     cached-line swap line-offset>x ;
 
 M: pango-renderer font-metrics ( font -- metrics )
-    cache-font-metrics ;
+    "" cached-layout metrics>> clone f >>width ;
 
 M: pango-renderer line-metrics ( font string -- metrics )
     cached-layout metrics>> ;