X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela_ttf.lisp;h=1d9aec72239cea4d9cd28e26deeae48fd8a9cb91;hb=6a3d1ffb69036e6d4f1c239fd7d52f9bfc48d50c;hp=63b4b2d6326df139dbddb059e6995d83847afd8e;hpb=870f146b156daf8910c0ee549df1bc47d509169e;p=gacela.git diff --git a/gacela_ttf.lisp b/gacela_ttf.lisp index 63b4b2d..1d9aec7 100644 --- a/gacela_ttf.lisp +++ b/gacela_ttf.lisp @@ -14,18 +14,33 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with this program. If not, see . -(in-package :gacela) -(defun open-font (font-file &key (size 80) (encoding ft_encoding_unicode) static) - (let ((key (make-resource-font :filename font-file :size size :encoding encoding))) - (cond ((get-resource key) key) - (t - (let ((font (ftglCreateTextureFont font-file))) - (cond ((/= font 0) - (ftglSetFontFaceSize font size 72) - (ftglSetFontCharMap font encoding) - (set-resource key `(:id-font ,font) nil :static static) - key))))))) +(eval-when (compile load eval) + (when (not (find-package 'gacela)) (make-package 'gacela :nicknames '(gg) :use '(lisp))) + (in-package 'gacela :nicknames '(gg) :use '(lisp))) -(defun render-text (text font) - (ftglRenderFont (getf font :id-font) text FTGL_RENDER_ALL)) + +(defun load-font (font-file &key (size 40) (encoding ft_encoding_unicode) static) + (let* ((key (make-resource-font :filename font-file :encoding encoding)) + (res (get-resource key))) + (cond (res (ftglSetFontFaceSize (getf res :id-font) size 72) + key) + (t (true-load-font font-file size encoding static))))) + +(defun true-load-font (font-file size encoding static) + (let ((key (make-resource-font :filename font-file :encoding encoding)) + (font (ftglCreateTextureFont font-file))) + (cond ((/= font 0) + (ftglSetFontFaceSize font size 72) + (ftglSetFontCharMap font encoding) + (set-resource key + `(:id-font ,font) + (lambda () (true-load-font font-file size encoding static)) + (lambda () (ftglDestroyFont font)) + :static static) + key)))) + +(defun render-text (text font &key size) + (let ((id-font (getf (get-resource font) :id-font))) + (cond (size (ftglSetFontFaceSize id-font size 72))) + (ftglRenderFont id-font text FTGL_RENDER_ALL)))