FreeType support¶
Interface to FreeType to generate font bitmaps run time.
Add FreeType to your project¶
- Add include path: - /usr/include/freetype2(for GCC:- -I/usr/include/freetype2 -L/usr/local/lib)
- Add library: - freetype(for GCC:- -L/usr/local/lib -lfreetype)
Usage¶
Enable LV_USE_FREETYPE in lv_conf.h.
To cache the glyphs from the opened fonts, set  LV_FREETYPE_CACHE_SIZE >= 0 and then use the following macros for detailed configuration:
- LV_FREETYPE_CACHE_SIZE:maximum memory(bytes) used to cache font bitmap, outline, character maps, etc. 0 means use the system default value, less than 0 means disable cache. Note: that this value does not account for managed FT_Face and FT_Size objects.
- LV_FREETYPE_CACHE_FT_FACES:maximum number of opened FT_Face objects managed by this cache instance.0 means use the system default value. Only useful when LV_FREETYPE_CACHE_SIZE >= 0.
- LV_FREETYPE_CACHE_FT_SIZES:maximum number of opened FT_Size objects managed by this cache instance. 0 means use the system default value. Only useful when LV_FREETYPE_CACHE_SIZE >= 0.
When you are sure that all the used font sizes will not be greater than 256, you can enable LV_FREETYPE_SBIT_CACHE, which is much more memory efficient for small bitmaps.
You can use lv_ft_font_init() to create FreeType fonts. It returns true to indicate success, at the same time, the font member of lv_ft_info_t will be filled with a pointer to an LVGL font, and you can use it like any LVGL font.
Font style supports bold and italic, you can use the following macros to set:
- FT_FONT_STYLE_NORMAL:default style.
- FT_FONT_STYLE_ITALIC:Italic style
- FT_FONT_STYLE_BOLD:bold style
They can be combined.eg:FT_FONT_STYLE_BOLD | FT_FONT_STYLE_ITALIC.
Note that, the FreeType extension doesn't use LVGL's file system. You can simply pass the path to the font as usual on your operating system or platform.
Example¶
Open a front with FreeType¶
C code
GitHub#include "../../lv_examples.h"
#if LV_BUILD_EXAMPLES
#if LV_USE_FREETYPE
/**
 * Load a font with FreeType
 */
void lv_example_freetype_1(void)
{
    /*Create a font*/
    static lv_ft_info_t info;
    /*FreeType uses C standard file system, so no driver letter is required.*/
    info.name = "./lvgl/examples/libs/freetype/arial.ttf";
    info.weight = 24;
    info.style = FT_FONT_STYLE_NORMAL;
    info.mem = NULL;
    if(!lv_ft_font_init(&info)) {
        LV_LOG_ERROR("create failed.");
    }
    /*Create style with the new font*/
    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_text_font(&style, info.font);
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);
    /*Create a label with the new style*/
    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_obj_add_style(label, &style, 0);
    lv_label_set_text(label, "Hello world\nI'm a font created with FreeType");
    lv_obj_center(label);
}
#else
void lv_example_freetype_1(void)
{
    /*TODO
     *fallback for online examples*/
    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "FreeType is not installed");
    lv_obj_center(label);
}
#endif
#endif
#!/opt/bin/lv_micropython -i
import lvgl as lv
import display_driver
import fs_driver
info = lv.ft_info_t()
info.name ="./arial.ttf"
info.weight = 24
info.style = lv.FT_FONT_STYLE.NORMAL
info.font_init()
# Create style with the new font
style = lv.style_t()
style.init()
style.set_text_font(info.font)
style.set_text_align(lv.TEXT_ALIGN.CENTER)
# Create a label with the new style
label = lv.label(lv.scr_act())
label.add_style(style, 0)
label.set_text("Hello world\nI'm a font created with FreeType")
label.center()
Learn more¶
- FreeType tutorial 
- LVGL's font interface 
API¶
Enums
Functions
- 
bool lv_freetype_init(uint16_t max_faces, uint16_t max_sizes, uint32_t max_bytes)¶
- init freetype library - Parameters
- max_faces -- Maximum number of opened FT_Face objects managed by this cache instance. Use 0 for defaults. 
- max_sizes -- Maximum number of opened FT_Size objects managed by this cache instance. Use 0 for defaults. 
- max_bytes -- Maximum number of bytes to use for cached data nodes. Use 0 for defaults. Note that this value does not account for managed FT_Face and FT_Size objects. 
 
- Returns
- true on success, otherwise false. 
 
- 
void lv_freetype_destroy(void)¶
- Destroy freetype library 
- 
bool lv_ft_font_init(lv_ft_info_t *info)¶
- Creates a font with info parameter specified. - Parameters
- info -- See lv_ft_info_t for details. when success, lv_ft_info_t->font point to the font you created. 
- Returns
- true on success, otherwise false. 
 
- 
void lv_ft_font_destroy(lv_font_t *font)¶
- Destroy a font that has been created. - Parameters
- font -- pointer to font. 
 
- 
struct lv_ft_info_t¶