diff --git a/extra/ui/freetype/freetype.factor b/extra/ui/freetype/freetype.factor old mode 100644 new mode 100755 index 48164c08f6..8fc320e34c --- a/extra/ui/freetype/freetype.factor +++ b/extra/ui/freetype/freetype.factor @@ -3,7 +3,7 @@ USING: alien alien.c-types arrays io kernel libc math math.vectors namespaces opengl opengl.gl prettyprint assocs sequences io.files io.styles continuations freetype -ui.gadgets.worlds ui.render ui.backend io.mmap ; +ui.gadgets.worlds ui.render ui.backend byte-arrays ; IN: ui.freetype TUPLE: freetype-renderer ; @@ -63,18 +63,23 @@ M: freetype-renderer free-fonts ( world -- ) : ttf-path ( name -- string ) "/fonts/" swap ".ttf" 3append resource-path ; -: (open-face) ( mapped-file -- face ) +: (open-face) ( path length -- face ) #! We use FT_New_Memory_Face, not FT_New_Face, since #! FT_New_Face only takes an ASCII path name and causes #! problems on localized versions of Windows - freetype swap dup mapped-file-address swap length 0 f - [ FT_New_Memory_Face freetype-error ] keep *void* ; + freetype -rot 0 f [ + FT_New_Memory_Face freetype-error + ] keep *void* ; : open-face ( font style -- face ) - ttf-name ttf-path dup file-length - (open-face) ; + ttf-name ttf-path + dup file-contents >byte-array malloc-byte-array + swap file-length + (open-face) ; -: dpi 72 ; inline +SYMBOL: dpi + +72 dpi set-global : ft-floor -6 shift ; inline @@ -101,7 +106,8 @@ M: freetype-renderer free-fonts ( world -- ) : (open-font) ( font -- open-font ) first3 >r open-face dup 0 r> 6 shift - dpi dpi FT_Set_Char_Size freetype-error ; + dpi get-global dpi get-global FT_Set_Char_Size + freetype-error ; M: freetype-renderer open-font ( font -- open-font ) freetype drop open-fonts get [ (open-font) ] cache ;