1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.c-types assocs cache kernel math
4 namespaces opengl.textures pango.cairo pango.layouts
5 ui.gadgets.worlds ui.text ui.text.private ;
8 SINGLETON: pango-renderer
10 M: pango-renderer init-text-rendering
11 <cache-assoc> >>text-handle drop ;
13 M: pango-renderer string-dim cached-layout dim>> ;
15 M: pango-renderer finish-text-rendering
16 text-handle>> purge-cache
17 cached-layouts get purge-cache ;
19 : rendered-layout ( font string -- texture )
20 world get text-handle>>
21 [ cached-layout [ image>> ] [ loc>> ] bi <texture> ]
24 M: pango-renderer draw-string ( font string -- )
25 rendered-layout draw-texture ;
27 M: pango-renderer x>offset ( x font string -- n )
28 cached-line swap 0 <int> 0 <int>
29 [ pango_layout_line_x_to_index drop ] 2keep
32 M: pango-renderer offset>x ( n font string -- x )
34 0 <int> [ pango_layout_line_index_to_x ] keep *int ;
36 : missing-metrics ( metrics -- metrics ) 5 >>cap-height 5 >>x-height ;
38 M: pango-renderer font-metrics ( font -- metrics )
39 cache-font-metrics missing-metrics ;
41 M: pango-renderer line-metrics ( font string -- metrics )
42 cached-layout metrics>> missing-metrics ;
44 pango-renderer font-renderer set-global