chickadee » sdl2-ttf

sdl2-ttf

The sdl2-ttf egg provides bindings to SDL_ttf version 2. SDL_ttf is a library for rendering text using TTF, OTF, and FON fonts. It is compatible with Simple DirectMedia Layer version 2 (SDL2), a popular library used in games and other media-rich software.

The sdl2-ttf egg is designed to be compatible with the sdl2 egg, which provides bindings to SDL 2.

Project / Source Code Repository
https://gitlab.com/chicken-sdl2/chicken-sdl2-ttf
Issue Tracker
https://gitlab.com/chicken-sdl2/chicken-sdl2-ttf/issues
Maintainer
John Croisant (john+chicken at croisant dot net)
License
BSD 2-Clause

Table of Contents:

Requirements

The sdl2-ttf egg requires the sdl2 egg, Simple DirectMedia Layer version 2.0.0 or higher, and SDL_ttf version 2.0 or higher. It will not work with older versions of SDL or SDL_ttf.

This egg requires CHICKEN Scheme 4.8 or higher. Please file an issue or contact the maintainer if you need to use this library with an earlier version of CHICKEN Scheme.

Installation

When installing the egg, you should set the SDL2_FLAGS environment variable to a string of compiler flags to be used when compiling the egg. If you have the sdl2-config helper program installed on your system, you can set appropriate flags and install the extension like so (notice these are back ticks, not quotes):

export SDL2_FLAGS=`sdl2-config --cflags --libs`
chicken-install sdl2-ttf

If you do not have the sdl2-config helper program installed on your computer, you may manually specify SDL-related compiler flags (notice these are double quotes, not back ticks):

export SDL2_FLAGS="-I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2"
chicken-install sdl2-ttf

By default, the sdl2-ttf egg will be linked against SDL_ttf using the compiler flag -lSDL2_ttf. You can override this by setting the SDL2_TTF_FLAGS environment variable, if needed. You can also use that environment variable in case you have installed SDL_ttf in a different location than SDL.

The SDL2_FLAGS and SDL2_TTF_FLAGS environment variables are only needed during installation of the egg. They do not need to be set during normal use.

Usage and Examples

To avoid procedure name collisions, it is recommended that you import the sdl2-ttf module using a prefix such as "ttf:", like so:

(use (prefix sdl2     sdl2:)
     (prefix sdl2-ttf ttf:))

(sdl2:set-main-ready!)
(sdl2:init!)
(ttf:init!)

(define font (ttf:open-font "ComicNeue-Regular.otf" 40))
(define text "Hello, World!")
(define-values (w h) (ttf:size-utf8 font text))
(define window (sdl2:create-window! text 'centered 'centered w h))

(let ((text-surf (ttf:render-utf8-shaded
                  font text
                  (sdl2:make-color 0   0   0)
                  (sdl2:make-color 255 255 255))))
  (sdl2:blit-surface! text-surf #f
                      (sdl2:window-surface window) #f))

(sdl2:update-window-surface! window)
(sdl2:delay! 5000)
(sdl2:quit!)

The demos directory contains small programs demonstrating how to use various features of sdl2-ttf.

The chicken-sdl2-examples repository contains complete example games and programs, some of which may use the sdl2-ttf egg.

Version History

0.1.0 (2015-12-25)
Initial release.

For more information about what changed in each version, see the CHANGELOG.

API

About the API

API Stability

The sdl2-ttf egg follows "semantic versioning". Until version 1.0.0 is released, the API is not guaranteed to be "stable". That means the maintainer reserves the right to change the API if needed, possibly in ways that break backwards compatibility with previous versions. Large backwards-incompatible changes are unlikely, but there may be small tweaks and fixes to the API if problems are discovered.

After version 1.0.0 is released, the API is guaranteed to remain stable (no backwards-incompatible changes) until the next new major version (e.g. going from version 1.x to 2.0.0, or 2.x to 3.0.0).

Conventions

General

init!procedure

See TTF_Init.

Signals an exception of kind (exn sdl2) if initialization fails.

was-init?procedure

See TTF_WasInit.

quit!procedure

See TTF_Quit.

compiled-versionprocedure
current-versionprocedure

Returns a list of three nonnegative integers, indicating a version number of SDL_ttf. For example, the list (2 0 0) indicates SDL_ttf 2.0.0.

  • compiled-version returns the version of SDL_ttf that the sdl2-ttf egg was compiled with.
  • current-version returns the version of SDL_ttf that the sdl2-ttf egg is currently using.

For example, the user may have compiled the sdl2-ttf egg with SDL_ttf 2.0.0, then later upgraded SDL_ttf to 2.1.0, but not yet recompiled the sdl2-ttf egg with the new version. In such a case, compiled-version would return (2 0 0), and current-version would return (2 1 0). But, features from the new version would not be available until the user recompiles the sdl2-ttf egg.

See SDL_TTF_VERSION and TTF_Linked_Version.

Font

Font Loading

open-font filepath ptsize #!optional indexprocedure
open-font* filepath ptsize #!optional indexprocedure

Attempts to load the TTF or FON font file at the given filepath (a string). See TTF_OpenFontIndex.

ptsize is the point size (based on 72DPI) to load the font as. This basically translates to pixel height.

index allows you to choose a font face from a file containing multiple font faces. It defaults to 0, the first face.

Returns a ttf:font with the font data. Signals an exception of kind (exn sdl2) if the font could not be loaded.

open-font-rw rwops close? ptsize #!optional indexprocedure
open-font-rw* rwops close? ptsize #!optional indexprocedure

Attempts a TTF or FON font from an sdl2:rwops. This procedure allows you to load a font from a variety of sources, such as a blob, string, memory pointer, or file. See TTF_OpenFontIndexRW.

If close? is #t, the sdl2:rwops will be automatically closed after the font is loaded. See rw-close! in the sdl2 egg. If close? is #f (the default), the sdl2:rwops will not be closed.

ptsize is the point size (based on 72DPI) to load the font as. This basically translates to pixel height.

index allows you to choose a font face from a file containing multiple font faces. It defaults to 0, the first face.

Returns a ttf:font with the font data. Signals an exception of kind (exn sdl2) if the font could not be loaded.

ttf:font

ttf:font is a record type that wraps a pointer to a TTF_Font struct.

font? objprocedure

Returns #t if obj is a ttf:font.

close-font! fontprocedure

See TTF_CloseFont.

Close and free the memory of the ttf:font's underlying struct. font's pointer will be set to null (see struct-null? in the sdl2 egg). It is safe to call this procedure with managed or unmanaged ttf:fonts. It is safe (but has no effect) to free a struct record multiple times.

Font Attributes

font-style fontprocedure
set! (font-style font) stylesetter
font-style-set! font stylesetter

Get or set the ttf:font's style, as a list of zero or more of the following symbols:

  • bold
  • italic
  • underline
  • strikethrough

Returns an empty list if the font has no style. See TTF_FontGetStyle and TTF_FontSetStyle.

The setters accept either a list of symbols or an integer, representing bitwise-or'd integer constants.

NOTE: Bold and italic styles perform automatic adjustment of the font. The results sometimes do not look very good. For better-looking results, you should instead load the bold or italic versions of your font as a separate ttf:font.

font-outline fontprocedure
set! (font-outline font) outlinesetter
font-outline-set! font outlinesetter

Get or set the ttf:font's outline, as a nonnegative integer number of pixels. See TTF_GetFontOutline and TTF_SetFontOutline.

font-hinting fontprocedure
set! (font-hinting font) hintingsetter
font-hinting-set! font hintingsetter

Get or set the ttf:font's hinting, as one of the following symbols:

  • normal
  • light
  • mono
  • none

See TTF_GetFontHinting and TTF_SetFontHinting.

font-kerning? fontprocedure
set! (font-kerning? font) kerningsetter
font-kerning-set! font kerningsetter

Get or set the ttf:font's kerning, as a boolean. #t means kerning is enabled, #f means kerning is disabled.

See TTF_GetFontKerning and TTF_SetFontKerning.

Font Metrics

font-height fontprocedure
font-ascent fontprocedure
font-descent fontprocedure
font-line-skip fontprocedure

Return various measurements of the ttf:font.

See TTF_FontHeight, TTF_FontAscent, TTF_FontDescent, TTF_FontLineSkip.

Font Faces

font-faces fontprocedure

Returns the number of faces ("sub-fonts") available in the ttf:font. See TTF_FontFaces.

font-face-fixed-width? fontprocedure

Returns #t if the current face of the given ttf:font is a fixed width font (i.e. every glyph is the same width). See TTF_FontFaceIsFixedWidth.

font-face-family-name fontprocedure

Returns the current font face family name for the given ttf:font. See TTF_FontFaceFamilyName.

font-face-style-name fontprocedure

Returns the current font face style name for the given ttf:font. See TTF_FontFaceStyleName.

Glyph Metrics

glyph-provided font glyphprocedure

If the glyph is provided by the font, this procedure returns a positive integer, indicating the glyph's index position in the font. If the glyph is not provided by the font, this procedure returns #f. See TTF_GlyphIsProvided.

glyph may be an integer (representing a 16-bit Unicode character) or a Scheme character in the ASCII range. Results may be incorrect if given a Scheme character outside the ASCII range.

glyph-metrics font glyphprocedure

Return various metrics about the given glyph. This procedure returns multiple values:

min-x
the glyph's minimum X offset
max-x
the glyph's maximum X offset
min-y
the glyph's minimum Y offset
max-y
the glyph's maximum Y offset
advance
the glyph's advance offset

See TTF_GlyphMetrics. There is a diagram which shows what these metrics mean.

glyph may be an integer (representing a 16-bit Unicode character) or a Scheme character in the ASCII range. Results may be incorrect if given a Scheme character outside the ASCII range.

Signals an exception of kind (exn sdl2) if an error occurs.

Rendering

Rendering Latin-1 (ISO 8859-1) Text

size-text font textprocedure

Calculate the size of the surface that would be created if you rendered the given Latin-1 (ISO 8859-1) text using the ttf:font. See TTF_SizeText.

Returns two values, the calculated width and the height, as integers.

This is much faster than actually rendering the text, so you can use this to quickly predict how much space would be needed. This is useful for calculating word wrapping, alignment, truncation, etc.

render-text-solid font text fgprocedure
render-text-solid* font text fgprocedure

Render the given Latin-1 (ISO 8859-1) encoded text using "solid" rendering mode. See TTF_RenderText_Solid.

  • font must be a ttf:font specifying the font to render with.
  • text must be a Latin-1 (ISO 8859-1) encoded string specifying the text to render.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

  • render-text-solid returns a managed sdl2:surface.
  • render-text-solid* returns an unmanaged sdl2:surface, which must be freed with free-surface! (from the sdl2 egg) when you are done with it.
render-text-shaded font text fg bgprocedure
render-text-shaded* font text fg bgprocedure

Render the given Latin-1-encoded text using "shaded" rendering mode. See TTF_RenderText_Shaded.

  • font must be a ttf:font specifying the font to render with.
  • text must be a Latin-1 (ISO 8859-1) encoded string specifying the text to render.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.
  • bg must be a sdl2:color specifying the background color.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

  • render-text-shaded returns a managed sdl2:surface.
  • render-text-shaded* returns an unmanaged sdl2:surface, which must be freed with free-surface! (from the sdl2 egg) when you are done with it.
render-text-blended font text fgprocedure
render-text-blended* font text fgprocedure

Render the given Latin-1 (ISO 8859-1) encoded text using "blended" rendering mode. See TTF_RenderText_Blended.

  • font must be a ttf:font specifying the font to render with.
  • text must be a Latin-1 (ISO 8859-1) encoded string specifying the text to render.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

Rendering UTF8 Text

size-utf8 font textprocedure

Calculate the size of the surface that would be created if you rendered the given UTF8 text using the ttf:font. See TTF_SizeUTF8.

Returns two values, the calculated width and the height, as integers.

This is much faster than actually rendering the text, so you can use this to quickly predict how much space would be needed. This is useful for calculating word wrapping, alignment, truncation, etc.

render-utf8-solid font text fgprocedure
render-utf8-solid* font text fgprocedure

Render the given UTF8 encoded text using "solid" rendering mode. See TTF_RenderUTF8_Solid.

  • font must be a ttf:font specifying the font to render with.
  • text must be a UTF8 encoded string specifying the text to render.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

  • render-utf8-solid returns a managed sdl2:surface.
  • render-utf8-solid* returns an unmanaged sdl2:surface, which must be freed with free-surface! (from the sdl2 egg) when you are done with it.
render-utf8-shaded font text fg bgprocedure
render-utf8-shaded* font text fg bgprocedure

Render the given UTF8 encoded text using "shaded" rendering mode. See TTF_RenderUTF8_Shaded.

  • font must be a ttf:font specifying the font to render with.
  • text must be a UTF8 encoded string specifying the text to render.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.
  • bg must be a sdl2:color specifying the background color.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

  • render-utf8-shaded returns a managed sdl2:surface.
  • render-utf8-shaded* returns an unmanaged sdl2:surface, which must be freed with free-surface! (from the sdl2 egg) when you are done with it.
render-utf8-blended font text fgprocedure
render-utf8-blended* font text fgprocedure

Render the given UTF8 encoded text using "blended" rendering mode. See TTF_RenderUTF8_Blended.

  • font must be a ttf:font specifying the font to render with.
  • text must be a UTF8 encoded string specifying the text to render.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

Rendering Unicode Text

byte-swapped-unicode-set! swapped?procedure
UNICODE_BOM_NATIVEconstant
UNICODE_BOM_SWAPPEDconstant

byte-swapped-unicode-set! sets the default byte order of Unicode chars. If swapped? is #t, this sets the default byte order to swapped. If swapped? is #f, this sets the default byte order to native. See TTF_ByteSwappedUNICODE.

UNICODE_BOM_NATIVE and UNICODE_BOM_SWAPPED are special Unicode characters (unsigned 16-bit integers). When used in a Unicode string, they temporarily (for the remainder of the string) override whether the byte order of Unicode chars is native or swapped. See UNICODE_BOM_NATIVE and UNICODE_BOM_SWAPPED.

size-unicode font unicodeprocedure

Calculate the size of the surface that would be created if you rendered the given 16-bit Unicode encoded text using the ttf:font. See TTF_SizeUNICODE.

unicode must be a pointer or locative to a null-terminated C array of 16-bit unsigned integers, representing Unicode text. (SRFI-4 u16vectors can be wrapped in a locative using make-locative.)

Returns two values, the calculated width and the height, as integers.

This is much faster than actually rendering the text, so you can use this to quickly predict how much space would be needed. This is useful for calculating word wrapping, alignment, truncation, etc.

render-unicode-solid font unicode fgprocedure
render-unicode-solid* font unicode fgprocedure

Render the given 16-bit Unicode encoded text using "solid" rendering mode. See TTF_RenderUNICODE_Solid.

  • font must be a ttf:font specifying the font to render with.
  • unicode must be a pointer or locative to a null-terminated C array of 16-bit unsigned integers, representing Unicode text. (SRFI-4 u16vectors can be wrapped in a locative using make-locative.)
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

render-unicode-shaded font unicode fg bgprocedure
render-unicode-shaded* font unicode fg bgprocedure

Render the given 16-bit Unicode encoded text using "shaded" rendering mode. See TTF_RenderUNICODE_Shaded.

  • font must be a ttf:font specifying the font to render with.
  • unicode must be a pointer or locative to a null-terminated C array of 16-bit unsigned integers, representing Unicode text. (SRFI-4 u16vectors can be wrapped in a locative using make-locative.)
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.
  • bg must be a sdl2:color specifying the background color.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

render-unicode-blended font unicode fgprocedure
render-unicode-blended* font unicode fgprocedure

Render the given 16-bit Unicode encoded text using "blended" rendering mode. See TTF_RenderUNICODE_Blended.

  • font must be a ttf:font specifying the font to render with.
  • unicode must be a pointer or locative to a null-terminated C array of 16-bit unsigned integers, representing Unicode text. (SRFI-4 u16vectors can be wrapped in a locative using make-locative.)
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the text itself.

Returns a sdl2:surface containing the rendered text. Signals an exception of kind (exn sdl2) if an error occurred.

Rendering Individual Glyphs

render-glyph-solid font glyph fgprocedure
render-glyph-solid* font glyph fgprocedure

Render the given glyph using "solid" rendering mode. See TTF_RenderGlyph_Solid.

  • font must be a ttf:font specifying the font to render with.
  • glyph must be an integer (representing a 16-bit Unicode character) or a Scheme character in the ASCII range. Results may be incorrect if given a Scheme character outside the ASCII range.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the glyph itself.

Returns a sdl2:surface containing the rendered glyph. Signals an exception of kind (exn sdl2) if an error occurred.

  • render-glyph-solid returns a managed sdl2:surface.
  • render-glyph-solid* returns an unmanaged sdl2:surface, which must be freed with free-surface! (from the sdl2 egg) when you are done with it.
render-glyph-shaded font glyph fg bgprocedure
render-glyph-shaded* font glyph fg bgprocedure

Render the given glyph using "shaded" rendering mode. See TTF_RenderGlyph_Shaded.

  • font must be a ttf:font specifying the font to render with.
  • glyph must be an integer (representing a 16-bit Unicode character) or a Scheme character in the ASCII range. Results may be incorrect if given a Scheme character outside the ASCII range.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the glyph itself.
  • bg must be a sdl2:color specifying the background color.

Returns a sdl2:surface containing the rendered glyph. Signals an exception of kind (exn sdl2) if an error occurred.

render-glyph-blended font glyph fgprocedure
render-glyph-blended* font glyph fgprocedure

Render the given glyph using "blended" rendering mode. See TTF_RenderGlyph_Blended.

  • font must be a ttf:font specifying the font to render with.
  • glyph must be an integer (representing a 16-bit Unicode character) or a Scheme character in the ASCII range. Results may be incorrect if given a Scheme character outside the ASCII range.
  • fg must be a sdl2:color specifying the foreground color, i.e. the color of the glyph itself.

Returns a sdl2:surface containing the rendered glyph. Signals an exception of kind (exn sdl2) if an error occurred.

Contents »