Note: This is taken from the Chicken Wiki, where a more recent version could be available.

freetype bindings for Chicken.

Usage

(use freetype)
(define lib (ft-init-freetype))
(define face
  (ft-new-face lib "/usr/share/fonts/truetype/msttcorefonts/arial.ttf"))
(ft-set-char-size face 0 (* 16 64) 300 300)
(ft-set-pixel-sizes face 0 16)
(define AV (make-ft-vector))
(ft-get-kerning face
                (ft-get-char-index face (char->integer #\A))
                (ft-get-char-index face (char->integer #\V))
                FT_KERNING_DEFAULT
                AV)
(print "AV kerning: " (ft-vector-x AV) " " (ft-vector-y AV))
 AV kerning: -64 0

Procedures

procedure: (ft-init-freetype) => <error-code>

Create a new freetype library object.

procedure: (ft-new-face <lib> <path>) => <face>

Load a font face from a file. Returns #f if the file can't be loaded.

procedure: (ft-set-char-size <face> <char-width> <char-height> <hres> <vres>) => <error-code>
procedure: (ft-set-pixel-size <face> <pixel-width> <pixel-height>) => <error-code>
procedure: (ft-get-char-index <face> <char-code>) => <glyph-index>
procedure: (ft-load-glyph <face> <glyph-index> <load-flags>) => <error-code>
procedure: (ft-load-char <face> <char-code> <load-flags>) => <error-code>
procedure: (ft-render-glyph <glyph> <render-flags>) => <error-code>
procedure: (ft-get-kerning <face> <left> <right> <kerning-mode> <vector>) => <error-code>
procedure: (ft-select-charmap <face> <charmap-index>) => <error-code>
procedure: (ft-set-transform <face> <matrix> <delta>)

Records

ft-vector

ft-matrix

ft-face

ft-glyph-slot

ft-bitmap

ft-glyph-metrics

Enums

Encodings

Face Flags

Style Flags

Open Flags

Load Options

Render Mode

Kerning Mode

Example

;; Render an anti-aliased "A" to text using the chars 0-9 for grayscale.

(use freetype lolevel)

(define lib (ft-init-freetype))
(define face
  (ft-new-face lib "/usr/share/fonts/truetype/msttcorefonts/arial.ttf"))
(ft-set-char-size face 0 (* 16 64) 300 300)
(ft-set-pixel-sizes face 0 16)

(ft-load-char face (char->integer #\A) FT_LOAD_DEFAULT)
(ft-render-glyph (ft-face-glyph face) FT_RENDER_MODE_NORMAL)

(let* ((glyph (ft-face-glyph face))
       (bitmap (ft-glyph-slot-bitmap glyph))
       (width (ft-bitmap-width bitmap))
       (rows (ft-bitmap-rows bitmap))
       (buf (ft-bitmap-buffer bitmap)))
  (do ((i 0 (+ i 1)))
      ((= i rows))
    (do ((j 0 (+ j 1)))
        ((= j width))
      (let ((d (pointer-u8-ref
                   (pointer-offset buf (+ j (* i width))))))
        (write-char (if (zero? d)
                        #\space
                        (integer->char
                         (+ (inexact->exact (truncate (/ d 25.6)))
                            (char->integer #\0)))))))
    (newline)))
     393    
     666    
    09190   
    37 73   
    63 36   
   090 090  
   27   72  
   6999996  
  090   090 
  26     72 
  63     36 
 080     080

Author

Alex Shinn

License

BSD

History

0.1
initial release