diff --git a/SDL2_ttf/build/SDL2_ttf.pc b/SDL2_ttf/build/SDL2_ttf.pc new file mode 100644 index 0000000..103a42c --- /dev/null +++ b/SDL2_ttf/build/SDL2_ttf.pc @@ -0,0 +1,13 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: SDL2_ttf +Description: ttf library for Simple DirectMedia Layer with FreeType 2 support +Version: 2.24.0 +Requires: sdl2 >= 2.0.10 +Libs: -L${libdir} -lSDL2_ttf +Cflags: -I${includedir}/SDL2 +Requires.private: freetype2 +Libs.private: diff --git a/assets/exit_text.png b/assets/exit_text.png new file mode 100644 index 0000000..b599f89 Binary files /dev/null and b/assets/exit_text.png differ diff --git a/assets/host_text.png b/assets/host_text.png new file mode 100644 index 0000000..edf9d29 Binary files /dev/null and b/assets/host_text.png differ diff --git a/export.sh b/export.sh new file mode 100755 index 0000000..0661deb --- /dev/null +++ b/export.sh @@ -0,0 +1 @@ +export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH diff --git a/include/SDL_ttf.h b/include/SDL_ttf.h new file mode 100644 index 0000000..8180580 --- /dev/null +++ b/include/SDL_ttf.h @@ -0,0 +1,2343 @@ +/* + SDL_ttf: A companion library to SDL for working with TrueType (tm) fonts + Copyright (C) 2001-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + + +/** + * \file SDL_ttf.h + * + * Header file for SDL_ttf library + * + * This library is a wrapper around the excellent FreeType 2.0 library, + * available at: https://www.freetype.org/ + * + * Note: In many places, SDL_ttf will say "glyph" when it means "code point." + * Unicode is hard, we learn as we go, and we apologize for adding to the + * confusion. + * + */ +#ifndef SDL_TTF_H_ +#define SDL_TTF_H_ + +#include "SDL2/SDL.h" +#include "SDL2/begin_code.h" + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL + */ +#define SDL_TTF_MAJOR_VERSION 2 +#define SDL_TTF_MINOR_VERSION 24 +#define SDL_TTF_PATCHLEVEL 0 + +/** + * This macro can be used to fill a version structure with the compile-time + * version of the SDL_ttf library. + */ +#define SDL_TTF_VERSION(X) \ +{ \ + (X)->major = SDL_TTF_MAJOR_VERSION; \ + (X)->minor = SDL_TTF_MINOR_VERSION; \ + (X)->patch = SDL_TTF_PATCHLEVEL; \ +} + +/** + * Backwards compatibility + */ +#define TTF_MAJOR_VERSION SDL_TTF_MAJOR_VERSION +#define TTF_MINOR_VERSION SDL_TTF_MINOR_VERSION +#define TTF_PATCHLEVEL SDL_TTF_PATCHLEVEL +#define TTF_VERSION(X) SDL_TTF_VERSION(X) + +#if SDL_TTF_MAJOR_VERSION < 3 && SDL_MAJOR_VERSION < 3 + +/** + * This is the version number macro for the current SDL_ttf version. + * + * In versions higher than 2.9.0, the minor version overflows into the + * thousands digit: for example, 2.23.0 is encoded as 4300. This macro will + * not be available in SDL 3.x or SDL_ttf 3.x. + */ +#define SDL_TTF_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_TTF_MAJOR_VERSION, SDL_TTF_MINOR_VERSION, SDL_TTF_PATCHLEVEL) +#endif /* SDL_TTF_MAJOR_VERSION < 3 && SDL_MAJOR_VERSION < 3 */ + +/** + * This macro will evaluate to true if compiled with SDL_ttf at least X.Y.Z. + */ +#define SDL_TTF_VERSION_ATLEAST(X, Y, Z) \ + ((SDL_TTF_MAJOR_VERSION >= X) && \ + (SDL_TTF_MAJOR_VERSION > X || SDL_TTF_MINOR_VERSION >= Y) && \ + (SDL_TTF_MAJOR_VERSION > X || SDL_TTF_MINOR_VERSION > Y || SDL_TTF_PATCHLEVEL >= Z)) + +/* Make sure this is defined (only available in newer SDL versions) */ +#ifndef SDL_DEPRECATED +#define SDL_DEPRECATED +#endif + +/** + * Query the version of SDL_ttf that the program is linked against. + * + * This function gets the version of the dynamically linked SDL_ttf library. + * This is separate from the SDL_TTF_VERSION() macro, which tells you what + * version of the SDL_ttf headers you compiled against. + * + * This returns static internal data; do not free or modify it! + * + * \returns a pointer to the version information. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC const SDL_version * SDLCALL TTF_Linked_Version(void); + +/** + * Query the version of the FreeType library in use. + * + * TTF_Init() should be called before calling this function. + * + * \param major to be filled in with the major version number. Can be NULL. + * \param minor to be filled in with the minor version number. Can be NULL. + * \param patch to be filled in with the param version number. Can be NULL. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_Init + */ +extern DECLSPEC void SDLCALL TTF_GetFreeTypeVersion(int *major, int *minor, int *patch); + +/** + * Query the version of the HarfBuzz library in use. + * + * If HarfBuzz is not available, the version reported is 0.0.0. + * + * \param major to be filled in with the major version number. Can be NULL. + * \param minor to be filled in with the minor version number. Can be NULL. + * \param patch to be filled in with the param version number. Can be NULL. + * + * \since This function is available since SDL_ttf 2.0.18. + */ +extern DECLSPEC void SDLCALL TTF_GetHarfBuzzVersion(int *major, int *minor, int *patch); + +/** + * ZERO WIDTH NO-BREAKSPACE (Unicode byte order mark) + */ +#define UNICODE_BOM_NATIVE 0xFEFF +#define UNICODE_BOM_SWAPPED 0xFFFE + +/** + * Tell SDL_ttf whether UNICODE text is generally byteswapped. + * + * A UNICODE BOM character in a string will override this setting for the + * remainder of that string. + * + * \param swapped boolean to indicate whether text is byteswapped. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC void SDLCALL TTF_ByteSwappedUNICODE(SDL_bool swapped); + +/** + * The internal structure containing font information. + * + * Opaque data! + */ +typedef struct TTF_Font TTF_Font; + +/** + * Initialize SDL_ttf. + * + * You must successfully call this function before it is safe to call any + * other function in this library, with one exception: a human-readable error + * message can be retrieved from TTF_GetError() if this function fails. + * + * SDL must be initialized before calls to functions in this library, because + * this library uses utility functions from the SDL library. + * + * It is safe to call this more than once; the library keeps a counter of init + * calls, and decrements it on each call to TTF_Quit, so you must pair your + * init and quit calls. + * + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_Quit + * \sa TTF_WasInit + */ +extern DECLSPEC int SDLCALL TTF_Init(void); + +/** + * Create a font from a file, using a specified point size. + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param file path to font file. + * \param ptsize point size to use for the newly-opened font. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFont(const char *file, int ptsize); + +/** + * Create a font from a file, using a specified face index. + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * Some fonts have multiple "faces" included. The index specifies which face + * to use from the font file. Font files with only one face should specify + * zero for the index. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param file path to font file. + * \param ptsize point size to use for the newly-opened font. + * \param index index of the face in the font file. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndex(const char *file, int ptsize, long index); + +/** + * Create a font from an SDL_RWops, using a specified point size. + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * If `freesrc` is non-zero, the RWops will be automatically closed once the + * font is closed. Otherwise you should close the RWops yourself after closing + * the font. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param src an SDL_RWops to provide a font file's data. + * \param freesrc non-zero to close the RWops when the font is closed, zero to + * leave it open. + * \param ptsize point size to use for the newly-opened font. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize); + +/** + * Create a font from an SDL_RWops, using a specified face index. + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * If `freesrc` is non-zero, the RWops will be automatically closed once the + * font is closed. Otherwise you should close the RWops yourself after closing + * the font. + * + * Some fonts have multiple "faces" included. The index specifies which face + * to use from the font file. Font files with only one face should specify + * zero for the index. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param src an SDL_RWops to provide a font file's data. + * \param freesrc non-zero to close the RWops when the font is closed, zero to + * leave it open. + * \param ptsize point size to use for the newly-opened font. + * \param index index of the face in the font file. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index); + +/** + * Create a font from a file, using target resolutions (in DPI). + * + * DPI scaling only applies to scalable fonts (e.g. TrueType). + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param file path to font file. + * \param ptsize point size to use for the newly-opened font. + * \param hdpi the target horizontal DPI. + * \param vdpi the target vertical DPI. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontDPI(const char *file, int ptsize, unsigned int hdpi, unsigned int vdpi); + +/** + * Create a font from a file, using target resolutions (in DPI). + * + * DPI scaling only applies to scalable fonts (e.g. TrueType). + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * Some fonts have multiple "faces" included. The index specifies which face + * to use from the font file. Font files with only one face should specify + * zero for the index. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param file path to font file. + * \param ptsize point size to use for the newly-opened font. + * \param index index of the face in the font file. + * \param hdpi the target horizontal DPI. + * \param vdpi the target vertical DPI. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndexDPI(const char *file, int ptsize, long index, unsigned int hdpi, unsigned int vdpi); + +/** + * Opens a font from an SDL_RWops with target resolutions (in DPI). + * + * DPI scaling only applies to scalable fonts (e.g. TrueType). + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * If `freesrc` is non-zero, the RWops will be automatically closed once the + * font is closed. Otherwise you should close the RWops yourself after closing + * the font. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param src an SDL_RWops to provide a font file's data. + * \param freesrc non-zero to close the RWops when the font is closed, zero to + * leave it open. + * \param ptsize point size to use for the newly-opened font. + * \param hdpi the target horizontal DPI. + * \param vdpi the target vertical DPI. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontDPIRW(SDL_RWops *src, int freesrc, int ptsize, unsigned int hdpi, unsigned int vdpi); + +/** + * Opens a font from an SDL_RWops with target resolutions (in DPI). + * + * DPI scaling only applies to scalable fonts (e.g. TrueType). + * + * Some .fon fonts will have several sizes embedded in the file, so the point + * size becomes the index of choosing which size. If the value is too high, + * the last indexed size will be the default. + * + * If `freesrc` is non-zero, the RWops will be automatically closed once the + * font is closed. Otherwise you should close the RWops yourself after closing + * the font. + * + * Some fonts have multiple "faces" included. The index specifies which face + * to use from the font file. Font files with only one face should specify + * zero for the index. + * + * When done with the returned TTF_Font, use TTF_CloseFont() to dispose of it. + * + * \param src an SDL_RWops to provide a font file's data. + * \param freesrc non-zero to close the RWops when the font is closed, zero to + * leave it open. + * \param ptsize point size to use for the newly-opened font. + * \param index index of the face in the font file. + * \param hdpi the target horizontal DPI. + * \param vdpi the target vertical DPI. + * \returns a valid TTF_Font, or NULL on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_CloseFont + */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndexDPIRW(SDL_RWops *src, int freesrc, int ptsize, long index, unsigned int hdpi, unsigned int vdpi); + +/** + * Set a font's size dynamically. + * + * This clears already-generated glyphs, if any, from the cache. + * + * \param font the font to resize. + * \param ptsize the new point size. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + */ +extern DECLSPEC int SDLCALL TTF_SetFontSize(TTF_Font *font, int ptsize); + +/** + * Set font size dynamically with target resolutions (in DPI). + * + * This clears already-generated glyphs, if any, from the cache. + * + * \param font the font to resize. + * \param ptsize the new point size. + * \param hdpi the target horizontal DPI. + * \param vdpi the target vertical DPI. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + */ +extern DECLSPEC int SDLCALL TTF_SetFontSizeDPI(TTF_Font *font, int ptsize, unsigned int hdpi, unsigned int vdpi); + +/** + * Font style flags + */ +#define TTF_STYLE_NORMAL 0x00 +#define TTF_STYLE_BOLD 0x01 +#define TTF_STYLE_ITALIC 0x02 +#define TTF_STYLE_UNDERLINE 0x04 +#define TTF_STYLE_STRIKETHROUGH 0x08 + +/** + * Query a font's current style. + * + * The font styles are a set of bit flags, OR'd together: + * + * - `TTF_STYLE_NORMAL` (is zero) + * - `TTF_STYLE_BOLD` + * - `TTF_STYLE_ITALIC` + * - `TTF_STYLE_UNDERLINE` + * - `TTF_STYLE_STRIKETHROUGH` + * + * \param font the font to query. + * \returns the current font style, as a set of bit flags. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_SetFontStyle + */ +extern DECLSPEC int SDLCALL TTF_GetFontStyle(const TTF_Font *font); + +/** + * Set a font's current style. + * + * Setting the style clears already-generated glyphs, if any, from the cache. + * + * The font styles are a set of bit flags, OR'd together: + * + * - `TTF_STYLE_NORMAL` (is zero) + * - `TTF_STYLE_BOLD` + * - `TTF_STYLE_ITALIC` + * - `TTF_STYLE_UNDERLINE` + * - `TTF_STYLE_STRIKETHROUGH` + * + * \param font the font to set a new style on. + * \param style the new style values to set, OR'd together. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_GetFontStyle + */ +extern DECLSPEC void SDLCALL TTF_SetFontStyle(TTF_Font *font, int style); + +/** + * Query a font's current outline. + * + * \param font the font to query. + * \returns the font's current outline value. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_SetFontOutline + */ +extern DECLSPEC int SDLCALL TTF_GetFontOutline(const TTF_Font *font); + +/** + * Set a font's current outline. + * + * \param font the font to set a new outline on. + * \param outline positive outline value, 0 to default. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_GetFontOutline + */ +extern DECLSPEC void SDLCALL TTF_SetFontOutline(TTF_Font *font, int outline); + + +/** + * Hinting flags + */ +#define TTF_HINTING_NORMAL 0 +#define TTF_HINTING_LIGHT 1 +#define TTF_HINTING_MONO 2 +#define TTF_HINTING_NONE 3 +#define TTF_HINTING_LIGHT_SUBPIXEL 4 + +/** + * Query a font's current FreeType hinter setting. + * + * The hinter setting is a single value: + * + * - `TTF_HINTING_NORMAL` + * - `TTF_HINTING_LIGHT` + * - `TTF_HINTING_MONO` + * - `TTF_HINTING_NONE` + * - `TTF_HINTING_LIGHT_SUBPIXEL` (available in SDL_ttf 2.0.18 and later) + * + * \param font the font to query. + * \returns the font's current hinter value. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_SetFontHinting + */ +extern DECLSPEC int SDLCALL TTF_GetFontHinting(const TTF_Font *font); + +/** + * Set a font's current hinter setting. + * + * Setting it clears already-generated glyphs, if any, from the cache. + * + * The hinter setting is a single value: + * + * - `TTF_HINTING_NORMAL` + * - `TTF_HINTING_LIGHT` + * - `TTF_HINTING_MONO` + * - `TTF_HINTING_NONE` + * - `TTF_HINTING_LIGHT_SUBPIXEL` (available in SDL_ttf 2.0.18 and later) + * + * \param font the font to set a new hinter setting on. + * \param hinting the new hinter setting. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_GetFontHinting + */ +extern DECLSPEC void SDLCALL TTF_SetFontHinting(TTF_Font *font, int hinting); + +/** + * Special layout option for rendering wrapped text + */ +#define TTF_WRAPPED_ALIGN_LEFT 0 +#define TTF_WRAPPED_ALIGN_CENTER 1 +#define TTF_WRAPPED_ALIGN_RIGHT 2 + +/** + * Query a font's current wrap alignment option. + * + * The wrap alignment option can be one of the following: + * + * - `TTF_WRAPPED_ALIGN_LEFT` + * - `TTF_WRAPPED_ALIGN_CENTER` + * - `TTF_WRAPPED_ALIGN_RIGHT` + * + * \param font the font to query. + * \returns the font's current wrap alignment option. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_SetFontWrappedAlign + */ +extern DECLSPEC int SDLCALL TTF_GetFontWrappedAlign(const TTF_Font *font); + +/** + * Set a font's current wrap alignment option. + * + * The wrap alignment option can be one of the following: + * + * - `TTF_WRAPPED_ALIGN_LEFT` + * - `TTF_WRAPPED_ALIGN_CENTER` + * - `TTF_WRAPPED_ALIGN_RIGHT` + * + * \param font the font to set a new wrap alignment option on. + * \param align the new wrap alignment option. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_GetFontWrappedAlign + */ +extern DECLSPEC void SDLCALL TTF_SetFontWrappedAlign(TTF_Font *font, int align); + +/** + * Query the total height of a font. + * + * This is usually equal to point size. + * + * \param font the font to query. + * \returns the font's height. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC int SDLCALL TTF_FontHeight(const TTF_Font *font); + +/** + * Query the offset from the baseline to the top of a font. + * + * This is a positive value, relative to the baseline. + * + * \param font the font to query. + * \returns the font's ascent. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC int SDLCALL TTF_FontAscent(const TTF_Font *font); + +/** + * Query the offset from the baseline to the bottom of a font. + * + * This is a negative value, relative to the baseline. + * + * \param font the font to query. + * \returns the font's descent. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC int SDLCALL TTF_FontDescent(const TTF_Font *font); + +/** + * Query the spacing between lines of text for a font. + * + * \param font the font to query. + * \returns the font's line spacing. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC int SDLCALL TTF_FontLineSkip(const TTF_Font *font); + +/** + * Set the spacing between lines of text for a font. + * + * \param font the font to modify. + * \param lineskip the new line spacing for the font. + * + * \since This function is available since SDL_ttf 2.22.0. + */ +extern DECLSPEC void SDLCALL TTF_SetFontLineSkip(TTF_Font *font, int lineskip); + +/** + * Query whether or not kerning is allowed for a font. + * + * \param font the font to query. + * \returns non-zero if kerning is enabled, zero otherwise. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC int SDLCALL TTF_GetFontKerning(const TTF_Font *font); + +/** + * Set if kerning is allowed for a font. + * + * Newly-opened fonts default to allowing kerning. This is generally a good + * policy unless you have a strong reason to disable it, as it tends to + * produce better rendering (with kerning disabled, some fonts might render + * the word `kerning` as something that looks like `keming` for example). + * + * \param font the font to set kerning on. + * \param allowed non-zero to allow kerning, zero to disallow. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC void SDLCALL TTF_SetFontKerning(TTF_Font *font, int allowed); + +/** + * Query the number of faces of a font. + * + * \param font the font to query. + * \returns the number of FreeType font faces. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC long SDLCALL TTF_FontFaces(const TTF_Font *font); + +/** + * Query whether a font is fixed-width. + * + * A "fixed-width" font means all glyphs are the same width across; a + * lowercase 'i' will be the same size across as a capital 'W', for example. + * This is common for terminals and text editors, and other apps that treat + * text as a grid. Most other things (WYSIWYG word processors, web pages, etc) + * are more likely to not be fixed-width in most cases. + * + * \param font the font to query. + * \returns non-zero if fixed-width, zero if not. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC int SDLCALL TTF_FontFaceIsFixedWidth(const TTF_Font *font); + +/** + * Query a font's family name. + * + * This string is dictated by the contents of the font file. + * + * Note that the returned string is to internal storage, and should not be + * modifed or free'd by the caller. The string becomes invalid, with the rest + * of the font, when `font` is handed to TTF_CloseFont(). + * + * \param font the font to query. + * \returns the font's family name. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC const char * SDLCALL TTF_FontFaceFamilyName(const TTF_Font *font); + +/** + * Query a font's style name. + * + * This string is dictated by the contents of the font file. + * + * Note that the returned string is to internal storage, and should not be + * modifed or free'd by the caller. The string becomes invalid, with the rest + * of the font, when `font` is handed to TTF_CloseFont(). + * + * \param font the font to query. + * \returns the font's style name. + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC const char * SDLCALL TTF_FontFaceStyleName(const TTF_Font *font); + +/** + * Check whether a glyph is provided by the font for a 16-bit codepoint. + * + * Note that this version of the function takes a 16-bit character code, which + * covers the Basic Multilingual Plane, but is insufficient to cover the + * entire set of possible Unicode values, including emoji glyphs. You should + * use TTF_GlyphIsProvided32() instead, which offers the same functionality + * but takes a 32-bit codepoint instead. + * + * The only reason to use this function is that it was available since the + * beginning of time, more or less. + * + * \param font the font to query. + * \param ch the character code to check. + * \returns non-zero if font provides a glyph for this character, zero if not. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_GlyphIsProvided32 + */ +extern DECLSPEC int SDLCALL TTF_GlyphIsProvided(TTF_Font *font, Uint16 ch); + +/** + * Check whether a glyph is provided by the font for a 32-bit codepoint. + * + * This is the same as TTF_GlyphIsProvided(), but takes a 32-bit character + * instead of 16-bit, and thus can query a larger range. If you are sure + * you'll have an SDL_ttf that's version 2.0.18 or newer, there's no reason + * not to use this function exclusively. + * + * \param font the font to query. + * \param ch the character code to check. + * \returns non-zero if font provides a glyph for this character, zero if not. + * + * \since This function is available since SDL_ttf 2.0.18. + */ +extern DECLSPEC int SDLCALL TTF_GlyphIsProvided32(TTF_Font *font, Uint32 ch); + +/** + * Query the metrics (dimensions) of a font's 16-bit glyph. + * + * To understand what these metrics mean, here is a useful link: + * + * https://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html + * + * Note that this version of the function takes a 16-bit character code, which + * covers the Basic Multilingual Plane, but is insufficient to cover the + * entire set of possible Unicode values, including emoji glyphs. You should + * use TTF_GlyphMetrics32() instead, which offers the same functionality but + * takes a 32-bit codepoint instead. + * + * The only reason to use this function is that it was available since the + * beginning of time, more or less. + * + * \param font the font to query. + * \param ch the character code to check. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_GlyphMetrics32 + */ +extern DECLSPEC int SDLCALL TTF_GlyphMetrics(TTF_Font *font, Uint16 ch, + int *minx, int *maxx, + int *miny, int *maxy, int *advance); + +/** + * Query the metrics (dimensions) of a font's 32-bit glyph. + * + * To understand what these metrics mean, here is a useful link: + * + * https://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html + * + * This is the same as TTF_GlyphMetrics(), but takes a 32-bit character + * instead of 16-bit, and thus can query a larger range. If you are sure + * you'll have an SDL_ttf that's version 2.0.18 or newer, there's no reason + * not to use this function exclusively. + * + * \param font the font to query. + * \param ch the character code to check. + * + * \since This function is available since SDL_ttf 2.0.18. + */ +extern DECLSPEC int SDLCALL TTF_GlyphMetrics32(TTF_Font *font, Uint32 ch, + int *minx, int *maxx, + int *miny, int *maxy, int *advance); + +/** + * Calculate the dimensions of a rendered string of Latin1 text. + * + * This will report the width and height, in pixels, of the space that the + * specified string will take to fully render. + * + * This does not need to render the string to do this calculation. + * + * You almost certainly want TTF_SizeUTF8() unless you're sure you have a + * 1-byte Latin1 encoding. US ASCII characters will work with either function, + * but most other Unicode characters packed into a `const char *` will need + * UTF-8. + * + * \param font the font to query. + * \param text text to calculate, in Latin1 encoding. + * \param w will be filled with width, in pixels, on return. + * \param h will be filled with height, in pixels, on return. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_SizeUTF8 + * \sa TTF_SizeUNICODE + */ +extern DECLSPEC int SDLCALL TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h); + +/** + * Calculate the dimensions of a rendered string of UTF-8 text. + * + * This will report the width and height, in pixels, of the space that the + * specified string will take to fully render. + * + * This does not need to render the string to do this calculation. + * + * \param font the font to query. + * \param text text to calculate, in UTF-8 encoding. + * \param w will be filled with width, in pixels, on return. + * \param h will be filled with height, in pixels, on return. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_SizeUNICODE + */ +extern DECLSPEC int SDLCALL TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h); + +/** + * Calculate the dimensions of a rendered string of UCS-2 text. + * + * This will report the width and height, in pixels, of the space that the + * specified string will take to fully render. + * + * This does not need to render the string to do this calculation. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * \param font the font to query. + * \param text text to calculate, in UCS-2 encoding. + * \param w will be filled with width, in pixels, on return. + * \param h will be filled with height, in pixels, on return. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_SizeUTF8 + */ +extern DECLSPEC int SDLCALL TTF_SizeUNICODE(TTF_Font *font, const Uint16 *text, int *w, int *h); + +/** + * Calculate how much of a Latin1 string will fit in a given width. + * + * This reports the number of characters that can be rendered before reaching + * `measure_width`. + * + * This does not need to render the string to do this calculation. + * + * You almost certainly want TTF_MeasureUTF8() unless you're sure you have a + * 1-byte Latin1 encoding. US ASCII characters will work with either function, + * but most other Unicode characters packed into a `const char *` will need + * UTF-8. + * + * \param font the font to query. + * \param text text to calculate, in Latin1 encoding. + * \param measure_width maximum width, in pixels, available for the string. + * \param extent on return, filled with latest calculated width. + * \param count on return, filled with number of characters that can be + * rendered. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_MeasureText + * \sa TTF_MeasureUTF8 + * \sa TTF_MeasureUNICODE + */ +extern DECLSPEC int SDLCALL TTF_MeasureText(TTF_Font *font, const char *text, int measure_width, int *extent, int *count); + +/** + * Calculate how much of a UTF-8 string will fit in a given width. + * + * This reports the number of characters that can be rendered before reaching + * `measure_width`. + * + * This does not need to render the string to do this calculation. + * + * \param font the font to query. + * \param text text to calculate, in UTF-8 encoding. + * \param measure_width maximum width, in pixels, available for the string. + * \param extent on return, filled with latest calculated width. + * \param count on return, filled with number of characters that can be + * rendered. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_MeasureText + * \sa TTF_MeasureUTF8 + * \sa TTF_MeasureUNICODE + */ +extern DECLSPEC int SDLCALL TTF_MeasureUTF8(TTF_Font *font, const char *text, int measure_width, int *extent, int *count); + +/** + * Calculate how much of a UCS-2 string will fit in a given width. + * + * This reports the number of characters that can be rendered before reaching + * `measure_width`. + * + * This does not need to render the string to do this calculation. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * \param font the font to query. + * \param text text to calculate, in UCS-2 encoding. + * \param measure_width maximum width, in pixels, available for the string. + * \param extent on return, filled with latest calculated width. + * \param count on return, filled with number of characters that can be + * rendered. + * \returns 0 if successful, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_MeasureText + * \sa TTF_MeasureUTF8 + * \sa TTF_MeasureUNICODE + */ +extern DECLSPEC int SDLCALL TTF_MeasureUNICODE(TTF_Font *font, const Uint16 *text, int measure_width, int *extent, int *count); + +/** + * Render Latin1 text at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderText_Solid_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_Solid() unless you're sure you + * have a 1-byte Latin1 encoding. US ASCII characters will work with either + * function, but most other Unicode characters packed into a `const char *` + * will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Shaded, + * TTF_RenderText_Blended, and TTF_RenderText_LCD. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Solid + * \sa TTF_RenderUNICODE_Solid + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Solid(TTF_Font *font, + const char *text, SDL_Color fg); + +/** + * Render UTF-8 text at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUTF8_Solid_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Shaded, + * TTF_RenderUTF8_Blended, and TTF_RenderUTF8_LCD. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Shaded + * \sa TTF_RenderUTF8_Blended + * \sa TTF_RenderUTF8_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Solid(TTF_Font *font, + const char *text, SDL_Color fg); + +/** + * Render UCS-2 text at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUNICODE_Solid_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with TTF_RenderUNICODE_Shaded, + * TTF_RenderUNICODE_Blended, and TTF_RenderUNICODE_LCD. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Solid + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Solid(TTF_Font *font, + const Uint16 *text, SDL_Color fg); + +/** + * Render word-wrapped Latin1 text at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_Solid_Wrapped() unless you're sure + * you have a 1-byte Latin1 encoding. US ASCII characters will work with + * either function, but most other Unicode characters packed into a `const + * char *` will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Shaded_Wrapped, + * TTF_RenderText_Blended_Wrapped, and TTF_RenderText_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Solid_Wrapped + * \sa TTF_RenderUNICODE_Solid_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Solid_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, Uint32 wrapLength); + +/** + * Render word-wrapped UTF-8 text at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Shaded_Wrapped, + * TTF_RenderUTF8_Blended_Wrapped, and TTF_RenderUTF8_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Shaded_Wrapped + * \sa TTF_RenderUTF8_Blended_Wrapped + * \sa TTF_RenderUTF8_LCD_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Solid_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, Uint32 wrapLength); + +/** + * Render word-wrapped UCS-2 text at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with + * TTF_RenderUNICODE_Shaded_Wrapped, TTF_RenderUNICODE_Blended_Wrapped, and + * TTF_RenderUNICODE_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Solid_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Solid_Wrapped(TTF_Font *font, + const Uint16 *text, SDL_Color fg, Uint32 wrapLength); + +/** + * Render a single 16-bit glyph at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * Note that this version of the function takes a 16-bit character code, which + * covers the Basic Multilingual Plane, but is insufficient to cover the + * entire set of possible Unicode values, including emoji glyphs. You should + * use TTF_RenderGlyph32_Solid() instead, which offers the same functionality + * but takes a 32-bit codepoint instead. + * + * The only reason to use this function is that it was available since the + * beginning of time, more or less. + * + * You can render at other quality levels with TTF_RenderGlyph_Shaded, + * TTF_RenderGlyph_Blended, and TTF_RenderGlyph_LCD. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderGlyph32_Solid + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Solid(TTF_Font *font, + Uint16 ch, SDL_Color fg); + +/** + * Render a single 32-bit glyph at fast quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the colorkey, giving a transparent background. The 1 pixel + * will be set to the text color. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * This is the same as TTF_RenderGlyph_Solid(), but takes a 32-bit character + * instead of 16-bit, and thus can render a larger range. If you are sure + * you'll have an SDL_ttf that's version 2.0.18 or newer, there's no reason + * not to use this function exclusively. + * + * You can render at other quality levels with TTF_RenderGlyph32_Shaded, + * TTF_RenderGlyph32_Blended, and TTF_RenderGlyph32_LCD. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderGlyph32_Shaded + * \sa TTF_RenderGlyph32_Blended + * \sa TTF_RenderGlyph32_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph32_Solid(TTF_Font *font, + Uint32 ch, SDL_Color fg); + +/** + * Render Latin1 text at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderText_Shaded_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_Shaded() unless you're sure you + * have a 1-byte Latin1 encoding. US ASCII characters will work with either + * function, but most other Unicode characters packed into a `const char *` + * will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Solid, + * TTF_RenderText_Blended, and TTF_RenderText_LCD. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Shaded + * \sa TTF_RenderUNICODE_Shaded + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Shaded(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg); + +/** + * Render UTF-8 text at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUTF8_Shaded_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Solid, + * TTF_RenderUTF8_Blended, and TTF_RenderUTF8_LCD. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUNICODE_Shaded + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Shaded(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg); + +/** + * Render UCS-2 text at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUNICODE_Shaded_Wrapped() instead if you need to wrap the output + * to multiple lines. + * + * This will not wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with TTF_RenderUNICODE_Solid, + * TTF_RenderUNICODE_Blended, and TTF_RenderUNICODE_LCD. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Shaded + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Shaded(TTF_Font *font, + const Uint16 *text, SDL_Color fg, SDL_Color bg); + +/** + * Render word-wrapped Latin1 text at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_Shaded_Wrapped() unless you're + * sure you have a 1-byte Latin1 encoding. US ASCII characters will work with + * either function, but most other Unicode characters packed into a `const + * char *` will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Solid_Wrapped, + * TTF_RenderText_Blended_Wrapped, and TTF_RenderText_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Shaded_Wrapped + * \sa TTF_RenderUNICODE_Shaded_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Shaded_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength); + +/** + * Render word-wrapped UTF-8 text at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Solid_Wrapped, + * TTF_RenderUTF8_Blended_Wrapped, and TTF_RenderUTF8_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Solid_Wrapped + * \sa TTF_RenderUTF8_Blended_Wrapped + * \sa TTF_RenderUTF8_LCD_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Shaded_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength); + +/** + * Render word-wrapped UCS-2 text at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with + * TTF_RenderUNICODE_Solid_Wrapped, TTF_RenderUNICODE_Blended_Wrapped, and + * TTF_RenderUNICODE_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Shaded_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Shaded_Wrapped(TTF_Font *font, + const Uint16 *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength); + +/** + * Render a single 16-bit glyph at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * Note that this version of the function takes a 16-bit character code, which + * covers the Basic Multilingual Plane, but is insufficient to cover the + * entire set of possible Unicode values, including emoji glyphs. You should + * use TTF_RenderGlyph32_Shaded() instead, which offers the same functionality + * but takes a 32-bit codepoint instead. + * + * The only reason to use this function is that it was available since the + * beginning of time, more or less. + * + * You can render at other quality levels with TTF_RenderGlyph_Solid, + * TTF_RenderGlyph_Blended, and TTF_RenderGlyph_LCD. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderGlyph32_Shaded + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Shaded(TTF_Font *font, + Uint16 ch, SDL_Color fg, SDL_Color bg); + +/** + * Render a single 32-bit glyph at high quality to a new 8-bit surface. + * + * This function will allocate a new 8-bit, palettized surface. The surface's + * 0 pixel will be the specified background color, while other pixels have + * varying degrees of the foreground color. This function returns the new + * surface, or NULL if there was an error. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * This is the same as TTF_RenderGlyph_Shaded(), but takes a 32-bit character + * instead of 16-bit, and thus can render a larger range. If you are sure + * you'll have an SDL_ttf that's version 2.0.18 or newer, there's no reason + * not to use this function exclusively. + * + * You can render at other quality levels with TTF_RenderGlyph32_Solid, + * TTF_RenderGlyph32_Blended, and TTF_RenderGlyph32_LCD. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \returns a new 8-bit, palettized surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderGlyph32_Solid + * \sa TTF_RenderGlyph32_Blended + * \sa TTF_RenderGlyph32_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph32_Shaded(TTF_Font *font, + Uint32 ch, SDL_Color fg, SDL_Color bg); + +/** + * Render Latin1 text at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderText_Blended_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_Blended() unless you're sure you + * have a 1-byte Latin1 encoding. US ASCII characters will work with either + * function, but most other Unicode characters packed into a `const char *` + * will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Solid, + * TTF_RenderText_Blended, and TTF_RenderText_LCD. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Shaded + * \sa TTF_RenderUNICODE_Shaded + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Blended(TTF_Font *font, + const char *text, SDL_Color fg); + +/** + * Render UTF-8 text at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUTF8_Blended_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Solid, + * TTF_RenderUTF8_Shaded, and TTF_RenderUTF8_LCD. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUNICODE_Blended + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Blended(TTF_Font *font, + const char *text, SDL_Color fg); + +/** + * Render UCS-2 text at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUNICODE_Blended_Wrapped() instead if you need to wrap the output + * to multiple lines. + * + * This will not wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with TTF_RenderUNICODE_Solid, + * TTF_RenderUNICODE_Shaded, and TTF_RenderUNICODE_LCD. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderUTF8_Blended + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Blended(TTF_Font *font, + const Uint16 *text, SDL_Color fg); + +/** + * Render word-wrapped Latin1 text at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_Blended_Wrapped() unless you're + * sure you have a 1-byte Latin1 encoding. US ASCII characters will work with + * either function, but most other Unicode characters packed into a `const + * char *` will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Solid_Wrapped, + * TTF_RenderText_Shaded_Wrapped, and TTF_RenderText_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \param wrapLength the text is wrapped to multiple lines on line endings and + * on word boundaries if it extends beyond this value in + * pixels. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Blended_Wrapped + * \sa TTF_RenderUNICODE_Blended_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Blended_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, Uint32 wrapLength); + +/** + * Render word-wrapped UTF-8 text at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Solid_Wrapped, + * TTF_RenderUTF8_Shaded_Wrapped, and TTF_RenderUTF8_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \param wrapLength the text is wrapped to multiple lines on line endings and + * on word boundaries if it extends beyond this value in + * pixels. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Solid_Wrapped + * \sa TTF_RenderUTF8_Shaded_Wrapped + * \sa TTF_RenderUTF8_LCD_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Blended_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, Uint32 wrapLength); + +/** + * Render word-wrapped UCS-2 text at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with + * TTF_RenderUNICODE_Solid_Wrapped, TTF_RenderUNICODE_Shaded_Wrapped, and + * TTF_RenderUNICODE_LCD_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \param wrapLength the text is wrapped to multiple lines on line endings and + * on word boundaries if it extends beyond this value in + * pixels. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderUTF8_Blended_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Blended_Wrapped(TTF_Font *font, + const Uint16 *text, SDL_Color fg, Uint32 wrapLength); + +/** + * Render a single 16-bit glyph at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * Note that this version of the function takes a 16-bit character code, which + * covers the Basic Multilingual Plane, but is insufficient to cover the + * entire set of possible Unicode values, including emoji glyphs. You should + * use TTF_RenderGlyph32_Blended() instead, which offers the same + * functionality but takes a 32-bit codepoint instead. + * + * The only reason to use this function is that it was available since the + * beginning of time, more or less. + * + * You can render at other quality levels with TTF_RenderGlyph_Solid, + * TTF_RenderGlyph_Shaded, and TTF_RenderGlyph_LCD. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_RenderGlyph32_Blended + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Blended(TTF_Font *font, + Uint16 ch, SDL_Color fg); + +/** + * Render a single 32-bit glyph at high quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, using alpha + * blending to dither the font with the given color. This function returns the + * new surface, or NULL if there was an error. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * This is the same as TTF_RenderGlyph_Blended(), but takes a 32-bit character + * instead of 16-bit, and thus can render a larger range. If you are sure + * you'll have an SDL_ttf that's version 2.0.18 or newer, there's no reason + * not to use this function exclusively. + * + * You can render at other quality levels with TTF_RenderGlyph32_Solid, + * TTF_RenderGlyph32_Shaded, and TTF_RenderGlyph32_LCD. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_RenderGlyph32_Solid + * \sa TTF_RenderGlyph32_Shaded + * \sa TTF_RenderGlyph32_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph32_Blended(TTF_Font *font, + Uint32 ch, SDL_Color fg); + +/** + * Render Latin1 text at LCD subpixel quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderText_LCD_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_LCD() unless you're sure you have + * a 1-byte Latin1 encoding. US ASCII characters will work with either + * function, but most other Unicode characters packed into a `const char *` + * will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Solid, + * TTF_RenderText_Shaded, and TTF_RenderText_Blended. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderUTF8_LCD + * \sa TTF_RenderUNICODE_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_LCD(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg); + +/** + * Render UTF-8 text at LCD subpixel quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUTF8_LCD_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Solid, + * TTF_RenderUTF8_Shaded, and TTF_RenderUTF8_Blended. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderUNICODE_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_LCD(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg); + +/** + * Render UCS-2 text at LCD subpixel quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * This will not word-wrap the string; you'll get a surface with a single line + * of text, as long as the string requires. You can use + * TTF_RenderUNICODE_LCD_Wrapped() instead if you need to wrap the output to + * multiple lines. + * + * This will not wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with TTF_RenderUNICODE_Solid, + * TTF_RenderUNICODE_Shaded, and TTF_RenderUNICODE_Blended. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderUTF8_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_LCD(TTF_Font *font, + const Uint16 *text, SDL_Color fg, SDL_Color bg); + +/** + * Render word-wrapped Latin1 text at LCD subpixel quality to a new ARGB + * surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You almost certainly want TTF_RenderUTF8_LCD_Wrapped() unless you're sure + * you have a 1-byte Latin1 encoding. US ASCII characters will work with + * either function, but most other Unicode characters packed into a `const + * char *` will need UTF-8. + * + * You can render at other quality levels with TTF_RenderText_Solid_Wrapped, + * TTF_RenderText_Shaded_Wrapped, and TTF_RenderText_Blended_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in Latin1 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderUTF8_LCD_Wrapped + * \sa TTF_RenderUNICODE_LCD_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_LCD_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength); + +/** + * Render word-wrapped UTF-8 text at LCD subpixel quality to a new ARGB + * surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * You can render at other quality levels with TTF_RenderUTF8_Solid_Wrapped, + * TTF_RenderUTF8_Shaded_Wrapped, and TTF_RenderUTF8_Blended_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UTF-8 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderUTF8_Solid_Wrapped + * \sa TTF_RenderUTF8_Shaded_Wrapped + * \sa TTF_RenderUTF8_Blended_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_LCD_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength); + +/** + * Render word-wrapped UCS-2 text at LCD subpixel quality to a new ARGB + * surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * Text is wrapped to multiple lines on line endings and on word boundaries if + * it extends beyond `wrapLength` in pixels. + * + * If wrapLength is 0, this function will only wrap on newline characters. + * + * Please note that this function is named "Unicode" but currently expects + * UCS-2 encoding (16 bits per codepoint). This does not give you access to + * large Unicode values, such as emoji glyphs. These codepoints are accessible + * through the UTF-8 version of this function. + * + * You can render at other quality levels with + * TTF_RenderUNICODE_Solid_Wrapped, TTF_RenderUNICODE_Shaded_Wrapped, and + * TTF_RenderUNICODE_Blended_Wrapped. + * + * \param font the font to render with. + * \param text text to render, in UCS-2 encoding. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderUTF8_LCD_Wrapped + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_LCD_Wrapped(TTF_Font *font, + const Uint16 *text, SDL_Color fg, SDL_Color bg, Uint32 wrapLength); + +/** + * Render a single 16-bit glyph at LCD subpixel quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * Note that this version of the function takes a 16-bit character code, which + * covers the Basic Multilingual Plane, but is insufficient to cover the + * entire set of possible Unicode values, including emoji glyphs. You should + * use TTF_RenderGlyph32_LCD() instead, which offers the same functionality + * but takes a 32-bit codepoint instead. + * + * This function only exists for consistency with the existing API at the time + * of its addition. + * + * You can render at other quality levels with TTF_RenderGlyph_Solid, + * TTF_RenderGlyph_Shaded, and TTF_RenderGlyph_Blended. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderGlyph32_LCD + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_LCD(TTF_Font *font, + Uint16 ch, SDL_Color fg, SDL_Color bg); + +/** + * Render a single 32-bit glyph at LCD subpixel quality to a new ARGB surface. + * + * This function will allocate a new 32-bit, ARGB surface, and render + * alpha-blended text using FreeType's LCD subpixel rendering. This function + * returns the new surface, or NULL if there was an error. + * + * The glyph is rendered without any padding or centering in the X direction, + * and aligned normally in the Y direction. + * + * This is the same as TTF_RenderGlyph_LCD(), but takes a 32-bit character + * instead of 16-bit, and thus can render a larger range. Between the two, you + * should always use this function. + * + * You can render at other quality levels with TTF_RenderGlyph32_Solid, + * TTF_RenderGlyph32_Shaded, and TTF_RenderGlyph32_Blended. + * + * \param font the font to render with. + * \param ch the character to render. + * \param fg the foreground color for the text. + * \param bg the background color for the text. + * \returns a new 32-bit, ARGB surface, or NULL if there was an error. + * + * \since This function is available since SDL_ttf 2.20.0. + * + * \sa TTF_RenderGlyph32_Solid + * \sa TTF_RenderGlyph32_Shaded + * \sa TTF_RenderGlyph32_Blended + */ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph32_LCD(TTF_Font *font, + Uint32 ch, SDL_Color fg, SDL_Color bg); + + +/* For compatibility with previous versions, here are the old functions */ +#define TTF_RenderText(font, text, fg, bg) \ + TTF_RenderText_Shaded(font, text, fg, bg) +#define TTF_RenderUTF8(font, text, fg, bg) \ + TTF_RenderUTF8_Shaded(font, text, fg, bg) +#define TTF_RenderUNICODE(font, text, fg, bg) \ + TTF_RenderUNICODE_Shaded(font, text, fg, bg) + +/** + * Dispose of a previously-created font. + * + * Call this when done with a font. This function will free any resources + * associated with it. It is safe to call this function on NULL, for example + * on the result of a failed call to TTF_OpenFont(). + * + * The font is not valid after being passed to this function. String pointers + * from functions that return information on this font, such as + * TTF_FontFaceFamilyName() and TTF_FontFaceStyleName(), are no longer valid + * after this call, as well. + * + * \param font the font to dispose of. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_OpenFont + * \sa TTF_OpenFontIndexDPIRW + * \sa TTF_OpenFontRW + * \sa TTF_OpenFontDPI + * \sa TTF_OpenFontDPIRW + * \sa TTF_OpenFontIndex + * \sa TTF_OpenFontIndexDPI + * \sa TTF_OpenFontIndexDPIRW + * \sa TTF_OpenFontIndexRW + */ +extern DECLSPEC void SDLCALL TTF_CloseFont(TTF_Font *font); + +/** + * Deinitialize SDL_ttf. + * + * You must call this when done with the library, to free internal resources. + * It is safe to call this when the library isn't initialized, as it will just + * return immediately. + * + * Once you have as many quit calls as you have had successful calls to + * TTF_Init, the library will actually deinitialize. + * + * Please note that this does not automatically close any fonts that are still + * open at the time of deinitialization, and it is possibly not safe to close + * them afterwards, as parts of the library will no longer be initialized to + * deal with it. A well-written program should call TTF_CloseFont() on any + * open fonts before calling this function! + * + * \since This function is available since SDL_ttf 2.0.12. + */ +extern DECLSPEC void SDLCALL TTF_Quit(void); + +/** + * Check if SDL_ttf is initialized. + * + * This reports the number of times the library has been initialized by a call + * to TTF_Init(), without a paired deinitialization request from TTF_Quit(). + * + * In short: if it's greater than zero, the library is currently initialized + * and ready to work. If zero, it is not initialized. + * + * Despite the return value being a signed integer, this function should not + * return a negative number. + * + * \returns the current number of initialization calls, that need to + * eventually be paired with this many calls to TTF_Quit(). + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_Init + * \sa TTF_Quit + */ +extern DECLSPEC int SDLCALL TTF_WasInit(void); + +/** + * Query the kerning size of two glyphs indices. + * + * \deprecated This function accidentally requires FreeType font indexes, + * not codepoints, which we don't expose through this API, so + * it could give wildly incorrect results, especially with + * non-ASCII values. Going forward, please use + * TTF_GetFontKerningSizeGlyphs() instead, which does what you + * probably expected this function to do. + * + * \param font the font to query. + * \param prev_index the font index, NOT codepoint, of the previous character. + * \param index the font index, NOT codepoint, of the current character. + * \returns The kerning size between the two specified characters, in pixels, or -1 on error. + * + * \since This function is available since SDL_ttf 2.0.12. + * + * \sa TTF_GetFontKerningSizeGlyphs + */ +extern SDL_DEPRECATED DECLSPEC int TTF_GetFontKerningSize(TTF_Font *font, int prev_index, int index); + +/** + * Query the kerning size of two 16-bit glyphs. + * + * Note that this version of the function takes 16-bit character + * codes, which covers the Basic Multilingual Plane, but is insufficient + * to cover the entire set of possible Unicode values, including emoji + * glyphs. You should use TTF_GetFontKerningSizeGlyphs32() instead, which + * offers the same functionality but takes a 32-bit codepoints instead. + * + * The only reason to use this function is that it was available since + * the beginning of time, more or less. + * + * \param font the font to query. + * \param previous_ch the previous character's code, 16 bits. + * \param ch the current character's code, 16 bits. + * \returns The kerning size between the two specified characters, in pixels, or -1 on error. + * + * \since This function is available since SDL_ttf 2.0.14. + * + * \sa TTF_GetFontKerningSizeGlyphs32 + */ +extern DECLSPEC int TTF_GetFontKerningSizeGlyphs(TTF_Font *font, Uint16 previous_ch, Uint16 ch); + +/** + * Query the kerning size of two 32-bit glyphs. + * + * This is the same as TTF_GetFontKerningSizeGlyphs(), but takes 32-bit + * characters instead of 16-bit, and thus can manage a larger range. If + * you are sure you'll have an SDL_ttf that's version 2.0.18 or newer, + * there's no reason not to use this function exclusively. + * + * \param font the font to query. + * \param previous_ch the previous character's code, 32 bits. + * \param ch the current character's code, 32 bits. + * \returns The kerning size between the two specified characters, in pixels, or -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + */ +extern DECLSPEC int TTF_GetFontKerningSizeGlyphs32(TTF_Font *font, Uint32 previous_ch, Uint32 ch); + +/** + * Enable Signed Distance Field rendering for a font. + * + * This works with the Blended APIs. SDF is a technique that + * helps fonts look sharp even when scaling and rotating. + * + * This clears already-generated glyphs, if any, from the cache. + * + * \param font the font to set SDF support on. + * \param on_off SDL_TRUE to enable SDF, SDL_FALSE to disable. + * + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_GetFontSDF + */ +extern DECLSPEC int TTF_SetFontSDF(TTF_Font *font, SDL_bool on_off); + +/** + * Query whether Signed Distance Field rendering is enabled for a font. + * + * \param font the font to query + * + * \returns SDL_TRUE if enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_SetFontSDF + */ +extern DECLSPEC SDL_bool TTF_GetFontSDF(const TTF_Font *font); + +/** + * Report SDL_ttf errors + * + * \sa TTF_GetError + */ +#define TTF_SetError SDL_SetError + +/** + * Get last SDL_ttf error + * + * \sa TTF_SetError + */ +#define TTF_GetError SDL_GetError + +/** + * Direction flags + * + * \sa TTF_SetFontDirection + */ +typedef enum TTF_Direction +{ + TTF_DIRECTION_LTR = 0, /* Left to Right */ + TTF_DIRECTION_RTL, /* Right to Left */ + TTF_DIRECTION_TTB, /* Top to Bottom */ + TTF_DIRECTION_BTT /* Bottom to Top */ +} TTF_Direction; + +/** + * Set a global direction to be used for text shaping. + * + * \deprecated This function expects an hb_direction_t value, from HarfBuzz, + * cast to an int, and affects all fonts globally. Please use + * TTF_SetFontDirection() instead, which uses an enum supplied by + * SDL_ttf itself and operates on a per-font basis. + * + * This is a global setting; fonts will favor a value set with + * TTF_SetFontDirection(), but if they have not had one explicitly + * set, they will use the value specified here. + * + * The default value is `HB_DIRECTION_LTR` (left-to-right text + * flow). + * + * \param direction an hb_direction_t value. + * \returns 0, or -1 if SDL_ttf is not compiled with HarfBuzz support. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_SetFontDirection + */ +extern SDL_DEPRECATED DECLSPEC int SDLCALL TTF_SetDirection(int direction); /* hb_direction_t */ + +/** + * Set a global script to be used for text shaping. + * + * \deprecated This function expects an hb_script_t value, from HarfBuzz, cast + * to an int, and affects all fonts globally. Please use + * TTF_SetFontScriptName() instead, which accepts a string that is + * converted to an equivalent int internally, and operates on a + * per-font basis. + * + * This is a global setting; fonts will favor a value set with + * TTF_SetFontScriptName(), but if they have not had one + * explicitly set, they will use the value specified here. + * + * The default value is `HB_SCRIPT_UNKNOWN`. + * + * \returns 0, or -1 if SDL_ttf is not compiled with HarfBuzz support. + * + * \since This function is available since SDL_ttf 2.0.18. + * + * \sa TTF_SetFontScriptName + */ +extern SDL_DEPRECATED DECLSPEC int SDLCALL TTF_SetScript(int script); /* hb_script_t */ + +/** + * Set direction to be used for text shaping by a font. + * + * Any value supplied here will override the global direction set with the + * deprecated TTF_SetDirection(). + * + * Possible direction values are: + * + * - `TTF_DIRECTION_LTR` (Left to Right) + * - `TTF_DIRECTION_RTL` (Right to Left) + * - `TTF_DIRECTION_TTB` (Top to Bottom) + * - `TTF_DIRECTION_BTT` (Bottom to Top) + * + * If SDL_ttf was not built with HarfBuzz support, this function returns -1. + * + * \param font the font to specify a direction for. + * \param direction the new direction for text to flow. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL_ttf 2.20.0. + */ +extern DECLSPEC int SDLCALL TTF_SetFontDirection(TTF_Font *font, TTF_Direction direction); + +/** + * Set script to be used for text shaping by a font. + * + * Any value supplied here will override the global script set with the + * deprecated TTF_SetScript(). + * + * The supplied script value must be a null-terminated string of exactly four + * characters. + * + * If SDL_ttf was not built with HarfBuzz support, this function returns -1. + * + * \param font the font to specify a direction for. + * \param script null-terminated string of exactly 4 characters. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL_ttf 2.20.0. + */ +extern DECLSPEC int SDLCALL TTF_SetFontScriptName(TTF_Font *font, const char *script); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "SDL2/close_code.h" + +#endif /* SDL_TTF_H_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/main.c b/main.c index 38d49fc..d39a913 100644 --- a/main.c +++ b/main.c @@ -6,6 +6,7 @@ #include #include #include +#include SDL_Window* window; SDL_Renderer* renderer; @@ -18,10 +19,12 @@ int running; int selected_index = START_GAME; int main(void) { + int ret = 0; + SDL_Init(SDL_INIT_VIDEO); - window = SDL_CreateWindow("Shit Game",\ - SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DEF_WINDOW_WIDTH, -DEF_WINDOW_HEIGHT, 0); + TTF_Init(); + window = SDL_CreateWindow("Shufflers", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, DEF_WINDOW_WIDTH,DEF_WINDOW_HEIGHT, 0); renderer = SDL_CreateRenderer(window, -1, 0); IMG_Init(IMG_INIT_PNG); SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); @@ -29,21 +32,30 @@ DEF_WINDOW_HEIGHT, 0); SDL_CaptureMouse(SDL_TRUE); SDL_Texture* background = IMG_LoadTexture(renderer, "assets/mainscreen.png"); + //remove from here SDL_Texture* start_img = IMG_LoadTexture(renderer, "assets/mainscreen_start.png"); SDL_Texture* exit_img = IMG_LoadTexture(renderer, "assets/mainscreen_exit.png"); SDL_Texture* selection_img = start_img; - - if (!background || !start_img || !exit_img) { + //keep this tho + if (!background || !start_img || !exit_img ) { printf("IMG_LoadTexture error: %s\n", IMG_GetError()); } - int ret = 0; + ret = SDL_SetTextureColorMod(start_img, 255, 0, 0); ret |= SDL_SetTextureColorMod(exit_img, 255, 0, 0); if(ret){ puts("SetTextureColorMod error"); } - + //end remove + + TTF_Font* sans = TTF_OpenFont("Sans.ttf", 24); + SDL_Color white = {255, 255, 255, 0}; + SDL_Surface* start_surface = TTF_RenderText_Solid(sans, "START", white); + SDL_Texture* start_text = SDL_CreateTextureFromSurface(renderer, + start_surface); + + running = 1; while (running)