! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.c-types alien.data alien.strings arrays assocs
cache cairo cairo.ffi classes.struct combinators destructors fonts fry
-gobject.ffi init io.encodings.utf8 kernel locals math math.rectangles
+gobject.ffi init io.encodings.utf8 kernel math math.rectangles
math.vectors memoize namespaces pango.cairo.ffi pango.ffi sequences
ui.text ui.text.private ;
IN: ui.text.pango
<rect> ;
: layout-extents ( layout -- ink-rect logical-rect )
- PangoRectangle <struct>
- PangoRectangle <struct>
+ PangoRectangle new
+ PangoRectangle new
[ pango_layout_get_extents ] 2keep
[ PangoRectangle>rect ] bi@ ;
layout>> 0 pango_layout_get_line_readonly ;
: line-offset>x ( layout n -- x )
- #! n is an index into the UTF8 encoding of the text
+ ! n is an index into the UTF8 encoding of the text
[ drop first-line ] [ swap string>> >utf8-index ] 2bi
f { int } [ pango_layout_line_index_to_x ] with-out-parameters
pango>float ;
: x>line-offset ( layout x -- n )
- #! n is an index into the UTF8 encoding of the text
+ ! n is an index into the UTF8 encoding of the text
[
[ first-line ] dip
float>pango
] make-bitmap-image ;
: escape-nulls ( str -- str' )
- #! Replace nulls with something else since Pango uses null-terminated
- #! strings
+ ! Replace nulls with something else since Pango uses null-terminated
+ ! strings
H{ { 0 CHAR: zero-width-no-break-space } } substitute ;
: unpack-selection ( layout string/selection -- layout )
swap <PangoLayout> &g_object_unref layout-extents drop dim>> second ;
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.
+ ! Pango doesn't provide x-height and cap-height but Core Text does, so we
+ ! simulate them on Pango.
[
[ metrics new ] dip
[ "x" glyph-height >>x-height ]
M: pango-renderer flush-layout-cache
cached-layouts get-global purge-cache ;
-M: pango-renderer string>image ( font string -- image loc )
+M: pango-renderer string>image
cached-layout [ layout>image ] [ text-position vneg ] bi ;
-M: pango-renderer x>offset ( x font string -- n )
+M: pango-renderer x>offset
cached-layout swap x>line-offset ;
-M: pango-renderer offset>x ( n font string -- x )
+M: pango-renderer offset>x
cached-layout swap line-offset>x ;
-M: pango-renderer font-metrics ( font -- metrics )
+M: pango-renderer font-metrics
" " cached-layout metrics>> clone f >>width ;
-M: pango-renderer line-metrics ( font string -- metrics )
+M: pango-renderer line-metrics
[ " " line-metrics clone 0 >>width ]
[ cached-layout metrics>> ]
if-empty ;