89 lines
2.1 KiB
Factor
89 lines
2.1 KiB
Factor
! Copyright (C) 2009, 2010 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: kernel arrays assocs sequences math math.order cache
|
|
opengl opengl.gl opengl.textures strings fonts colors accessors
|
|
namespaces ui.gadgets.worlds ;
|
|
IN: ui.text
|
|
|
|
<PRIVATE
|
|
|
|
SYMBOL: font-renderer
|
|
|
|
: world-text-handle ( world -- handle )
|
|
dup text-handle>> [ <cache-assoc> >>text-handle ] unless
|
|
text-handle>> ;
|
|
|
|
HOOK: flush-layout-cache font-renderer ( -- )
|
|
|
|
[ flush-layout-cache ] flush-layout-cache-hook set-global
|
|
|
|
HOOK: string-dim font-renderer ( font string -- dim )
|
|
|
|
: string-width ( font string -- w ) string-dim first ; inline
|
|
|
|
: string-height ( font string -- h ) string-dim second ; inline
|
|
|
|
HOOK: free-fonts font-renderer ( world -- )
|
|
|
|
: combine-text-dim ( dim1 dim2 -- dim3 )
|
|
[ first2 ] bi@ swapd [ max ] [ + ] 2bi* 2array ; inline
|
|
|
|
PRIVATE>
|
|
|
|
HOOK: x>offset font-renderer ( x font string -- n )
|
|
|
|
HOOK: offset>x font-renderer ( n font string -- x )
|
|
|
|
GENERIC: text-dim ( font text -- dim )
|
|
|
|
M: string text-dim string-dim ;
|
|
|
|
M: array text-dim
|
|
[ { 0 0 } ] 2dip [ string-dim combine-text-dim ] with each ;
|
|
|
|
: text-width ( font text -- w ) text-dim first ;
|
|
|
|
: text-height ( font text -- h ) text-dim second ;
|
|
|
|
HOOK: font-metrics font-renderer ( font -- metrics )
|
|
|
|
HOOK: line-metrics font-renderer ( font string -- metrics )
|
|
|
|
HOOK: string>image font-renderer ( font string -- image loc )
|
|
|
|
<PRIVATE
|
|
|
|
: string-empty? ( obj -- ? )
|
|
dup selection? [ string>> ] when empty? ;
|
|
|
|
: draw-string ( font string -- )
|
|
dup string-empty? [ 2drop ] [
|
|
world get world-text-handle
|
|
[ string>image <texture> ] 2cache
|
|
draw-texture
|
|
] if ;
|
|
|
|
PRIVATE>
|
|
|
|
GENERIC: draw-text ( font text -- )
|
|
|
|
M: string draw-text draw-string ;
|
|
|
|
M: selection draw-text draw-string ;
|
|
|
|
M: array draw-text
|
|
[
|
|
[
|
|
[ draw-string ]
|
|
[ [ 0.0 ] 2dip string-height 0.0 glTranslated ] 2bi
|
|
] with each
|
|
] do-matrix ;
|
|
|
|
USING: vocabs system combinators ;
|
|
|
|
{
|
|
{ [ os macosx? ] [ "core-text" ] }
|
|
{ [ os windows? ] [ "uniscribe" ] }
|
|
{ [ os unix? ] [ "pango" ] }
|
|
} cond "ui.text." prepend require
|