((section 2 "Outdated egg!" (p "This is an egg for CHICKEN 4, the unsupported old release.  You're almost certainly looking for " (int-link "/eggref/5/freetype" "the CHICKEN 5 version of this egg") ", if it exists.") (p "If it does not exist, there may be equivalent functionality provided by another egg; have a look at the " (link "https://wiki.call-cc.org/chicken-projects/egg-index-5.html" "egg index") ". Otherwise, please consider porting this egg to the current version of CHICKEN.") (tags "egg") (p "freetype bindings for Chicken.") (toc) (section 3 "Usage" (highlight scheme "(use freetype)\n(define lib (ft-init-freetype))\n(define face\n  (ft-new-face lib \"/usr/share/fonts/truetype/msttcorefonts/arial.ttf\"))\n(ft-set-char-size face 0 (* 16 64) 300 300)\n(ft-set-pixel-sizes face 0 16)\n(define AV (make-ft-vector))\n(ft-get-kerning face\n                (ft-get-char-index face (char->integer #\\A))\n                (ft-get-char-index face (char->integer #\\V))\n                FT_KERNING_DEFAULT\n                AV)\n(print \"AV kerning: \" (ft-vector-x AV) \" \" (ft-vector-y AV))") (pre " AV kerning: -64 0")) (section 3 "Procedures" (def (sig (procedure "(ft-init-freetype) => <error-code>" (id ft-init-freetype))) (p "Create a new freetype library object.")) (def (sig (procedure "(ft-new-face <lib> <path>) => <face>" (id ft-new-face))) (p "Load a font face from a file.  Returns #f if the file can't be loaded.")) (def (sig (procedure "(ft-set-char-size <face> <char-width> <char-height> <hres> <vres>) => <error-code>" (id ft-set-char-size)))) (def (sig (procedure "(ft-set-pixel-size <face> <pixel-width> <pixel-height>) => <error-code>" (id ft-set-pixel-size)))) (def (sig (procedure "(ft-get-char-index <face> <char-code>) => <glyph-index>" (id ft-get-char-index)))) (def (sig (procedure "(ft-load-glyph <face> <glyph-index> <load-flags>) => <error-code>" (id ft-load-glyph)))) (def (sig (procedure "(ft-load-char <face> <char-code> <load-flags>) => <error-code>" (id ft-load-char)))) (def (sig (procedure "(ft-render-glyph <glyph> <render-flags>) => <error-code>" (id ft-render-glyph)))) (def (sig (procedure "(ft-get-kerning <face> <left> <right> <kerning-mode> <vector>) => <error-code>" (id ft-get-kerning)))) (def (sig (procedure "(ft-select-charmap <face> <charmap-index>) => <error-code>" (id ft-select-charmap)))) (def (sig (procedure "(ft-set-transform <face> <matrix> <delta>)" (id ft-set-transform))))) (section 3 "Records" (section 4 "ft-vector" (ul (li "make-ft-vector") (li "free-ft-vector") (li "ft-vector-x") (li "ft-vector-y") (li "ft-vector-x-set!") (li "ft-vector-y-set!"))) (section 4 "ft-matrix" (ul (li "make-ft-matrix") (li "free-ft-matrix") (li "ft-matrix-xx") (li "ft-matrix-xy") (li "ft-matrix-yx") (li "ft-matrix-yy") (li "ft-matrix-xx-set!") (li "ft-matrix-xy-set!") (li "ft-matrix-yx-set!") (li "ft-matrix-yy-set!"))) (section 4 "ft-face" (ul (li "free-ft-face") (li "ft-face-num-faces") (li "ft-face-face-index") (li "ft-face-face-flags") (li "ft-face-style-flags") (li "ft-face-num-glyphs") (li "ft-face-family-name") (li "ft-face-style-name") (li "ft-face-num-fixed-sizes") (li "ft-face-available-sizes") (li "ft-face-num-charmaps") (li "ft-face-charmaps") (li "ft-face-generic-data") (li "ft-face-generic-finalizer") (li "ft-face-bbox-xmin") (li "ft-face-bbox-xmax") (li "ft-face-bbox-ymin") (li "ft-face-bbox-ymax") (li "ft-face-units-per-EM") (li "ft-face-ascender") (li "ft-face-descender") (li "ft-face-height") (li "ft-face-max-advance-width") (li "ft-face-max-advance-height") (li "ft-face-underline-position") (li "ft-face-underline-thickness") (li "ft-face-glyph") (li "ft-face-size") (li "ft-face-charmap"))) (section 4 "ft-glyph-slot" (ul (li "free-ft-glyph-slot") (li "ft-glyph-slot-library") (li "ft-glyph-slot-face") (li "ft-glyph-slot-next") (li "ft-glyph-slot-reserved") (li "ft-glyph-slot-generic-data") (li "ft-glyph-slot-generic-finalizer") (li "ft-glyph-slot-metrics") (li "ft-glyph-slot-linear-hori-advance") (li "ft-glyph-slot-linear-vert-advance") (li "ft-glyph-slot-advance-x") (li "ft-glyph-slot-advance-y") (li "ft-glyph-slot-format") (li "ft-glyph-slot-bitmap") (li "ft-glyph-slot-outline") (li "ft-glyph-slot-num_subglyphs") (li "ft-glyph-slot-subglyphs") (li "ft-glyph-slot-control-data") (li "ft-glyph-slot-control-len") (li "ft-glyph-slot-lsb-delta") (li "ft-glyph-slot-rsb-delta"))) (section 4 "ft-bitmap" (ul (li "free-ft-bitmap") (li "ft-bitmap-rows") (li "ft-bitmap-width") (li "ft-bitmap-pitch") (li "ft-bitmap-buffer") (li "ft-bitmap-num-grays") (li "ft-bitmap-pixel-mode") (li "ft-bitmap-palette-mode") (li "ft-bitmap-palette"))) (section 4 "ft-glyph-metrics" (ul (li "free-ft-glyph-metrics") (li "ft-glyph-metrics-width") (li "ft-glyph-metrics-height") (li "ft-glyph-metrics-hori-bearing-x") (li "ft-glyph-metrics-hori-bearing-y") (li "ft-glyph-metrics-hori-advance") (li "ft-glyph-metrics-vert-bearing-x") (li "ft-glyph-metrics-vert-bearing-y") (li "ft-glyph-metrics-vert-advance")))) (section 3 "Enums" (section 4 "Encodings" (ul (li "FT_ENCODING_NONE") (li "FT_ENCODING_MS_SYMBOL") (li "FT_ENCODING_UNICODE") (li "FT_ENCODING_SJIS") (li "FT_ENCODING_GB2312") (li "FT_ENCODING_BIG5") (li "FT_ENCODING_WANSUNG") (li "FT_ENCODING_JOHAB") (li "FT_ENCODING_ADOBE_STANDARD") (li "FT_ENCODING_ADOBE_EXPERT") (li "FT_ENCODING_ADOBE_CUSTOM") (li "FT_ENCODING_ADOBE_LATIN_1") (li "FT_ENCODING_OLD_LATIN_2") (li "FT_ENCODING_APPLE_ROMAN"))) (section 4 "Face Flags" (ul (li "FT_FACE_FLAG_SCALABLE") (li "FT_FACE_FLAG_FIXED_SIZES") (li "FT_FACE_FLAG_FIXED_WIDTH") (li "FT_FACE_FLAG_SFNT") (li "FT_FACE_FLAG_HORIZONTAL") (li "FT_FACE_FLAG_VERTICAL") (li "FT_FACE_FLAG_KERNING") (li "FT_FACE_FLAG_FAST_GLYPHS") (li "FT_FACE_FLAG_MULTIPLE_MASTERS") (li "FT_FACE_FLAG_GLYPH_NAMES") (li "FT_FACE_FLAG_EXTERNAL_STREAM"))) (section 4 "Style Flags" (ul (li "FT_STYLE_FLAG_ITALIC") (li "FT_STYLE_FLAG_BOLD"))) (section 4 "Open Flags" (ul (li "FT_OPEN_MEMORY") (li "FT_OPEN_STREAM") (li "FT_OPEN_PATHNAME") (li "FT_OPEN_DRIVER") (li "FT_OPEN_PARAMS"))) (section 4 "Load Options" (ul (li "FT_LOAD_DEFAULT") (li "FT_LOAD_NO_SCALE") (li "FT_LOAD_NO_HINTING") (li "FT_LOAD_RENDER") (li "FT_LOAD_NO_BITMAP") (li "FT_LOAD_VERTICAL_LAYOUT") (li "FT_LOAD_FORCE_AUTOHINT") (li "FT_LOAD_CROP_BITMAP") (li "FT_LOAD_PEDANTIC") (li "FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH") (li "FT_LOAD_NO_RECURSE") (li "FT_LOAD_IGNORE_TRANSFORM") (li "FT_LOAD_MONOCHROME") (li "FT_LOAD_LINEAR_DESIGN") (li "FT_LOAD_TARGET_NORMAL") (li "FT_LOAD_TARGET_LIGHT") (li "FT_LOAD_TARGET_MONO") (li "FT_LOAD_TARGET_LCD") (li "FT_LOAD_TARGET_LCD_V"))) (section 4 "Render Mode" (ul (li "FT_RENDER_MODE_NORMAL") (li "FT_RENDER_MODE_LIGHT") (li "FT_RENDER_MODE_MONO") (li "FT_RENDER_MODE_LCD") (li "FT_RENDER_MODE_LCD_V") (li "FT_RENDER_MODE_MAX"))) (section 4 "Kerning Mode" (ul (li "FT_KERNING_DEFAULT") (li "FT_KERNING_UNFITTED") (li "FT_KERNING_UNSCALED")))) (section 3 "Example" (highlight scheme ";; Render an anti-aliased \"A\" to text using the chars 0-9 for grayscale.\n\n(use freetype lolevel)\n\n(define lib (ft-init-freetype))\n(define face\n  (ft-new-face lib \"/usr/share/fonts/truetype/msttcorefonts/arial.ttf\"))\n(ft-set-char-size face 0 (* 16 64) 300 300)\n(ft-set-pixel-sizes face 0 16)\n\n(ft-load-char face (char->integer #\\A) FT_LOAD_DEFAULT)\n(ft-render-glyph (ft-face-glyph face) FT_RENDER_MODE_NORMAL)\n\n(let* ((glyph (ft-face-glyph face))\n       (bitmap (ft-glyph-slot-bitmap glyph))\n       (width (ft-bitmap-width bitmap))\n       (rows (ft-bitmap-rows bitmap))\n       (buf (ft-bitmap-buffer bitmap)))\n  (do ((i 0 (+ i 1)))\n      ((= i rows))\n    (do ((j 0 (+ j 1)))\n        ((= j width))\n      (let ((d (pointer-u8-ref\n                   (pointer+ buf (+ j (* i width))))))\n        (write-char (if (zero? d)\n                        #\\space\n                        (integer->char\n                         (+ (inexact->exact (truncate (/ d 25.6)))\n                            (char->integer #\\0)))))))\n    (newline)))") (pre "     393    \n     666    \n    09190   \n    37 73   \n    63 36   \n   090 090  \n   27   72  \n   6999996  \n  090   090 \n  26     72 \n  63     36 \n 080     080")) (section 3 "Author" (p (int-link "Alex Shinn"))) (section 3 "License" (p "BSD")) (section 3 "History" (dl (dt "0.1") (dd "initial release")))))