[English]

FreeType support(FreeType 支持)

显示原文

Interface to FreeType library to generate font bitmaps run time.

Detailed introduction: https://www.freetype.org


FreeType 库的接口,用于生成字体位图运行时。

详细介绍:https://www.freetype.org

Add FreeType to your project(将 FreeType 添加到你的项目)

显示原文

First, Download FreeType from here.

There are two ways to use FreeType:


首先,从 这里 下载 FreeType。

有两种方法可以使用 FreeType:

For UNIX(对于 UNIX)

显示原文

For UNIX systems, it is recommended to use the way of compiling and installing libraries.

  • Enter the FreeType source code directory

  • make

  • sudo make install

  • Add include path: /usr/include/freetype2 (for GCC: -I/usr/include/freetype2 -L/usr/local/lib)

  • Link library: freetype (for GCC: -L/usr/local/lib -lfreetype)


对于UNIX系统,建议使用编译和安装库的方式。

  • 进入 FreeType 源码目录

  • make

  • sudo make install

  • 添加包含路径: /usr/include/freetype2 (对于 GCC: -I/usr/include/freetype2 -L/usr/local/lib)

  • 链接库: freetype (对于 GCC: -L/usr/local/lib -lfreetype)

For Embedded Devices(对于嵌入式设备)

显示原文

For embedded devices, it is more recommended to use the FreeType configuration file provided by LVGL, which only includes the most commonly used functions, which is very meaningful for saving limited FLASH space.

  • Copy the FreeType source code to your project directory.

  • Refer to the following Makefile for configuration:

# FreeType custom configuration header file
CFLAGS += -DFT2_BUILD_LIBRARY
CFLAGS += -DFT_CONFIG_MODULES_H=<lvgl/src/libs/freetype/ftmodule.h>
CFLAGS += -DFT_CONFIG_OPTIONS_H=<lvgl/src/libs/freetype/ftoption.h>

# FreeType include path
CFLAGS += -Ifreetype/include

# FreeType C source file
FT_CSRCS += freetype/src/base/ftbase.c
FT_CSRCS += freetype/src/base/ftbitmap.c
FT_CSRCS += freetype/src/base/ftdebug.c
FT_CSRCS += freetype/src/base/ftglyph.c
FT_CSRCS += freetype/src/base/ftinit.c
FT_CSRCS += freetype/src/cache/ftcache.c
FT_CSRCS += freetype/src/gzip/ftgzip.c
FT_CSRCS += freetype/src/sfnt/sfnt.c
FT_CSRCS += freetype/src/smooth/smooth.c
FT_CSRCS += freetype/src/truetype/truetype.c
CSRCS += $(FT_CSRCS)

对于嵌入式设备,更建议使用 FreeType LVGL 提供的配置文件,其中仅包含最 常用函数,对于节省有限非常有意义 FLASH空间。

  • 将 FreeType 源代码复制到项目目录。

  • 有关配置,请参阅以下内容: Makefile

# FreeType custom configuration header file
CFLAGS += -DFT2_BUILD_LIBRARY
CFLAGS += -DFT_CONFIG_MODULES_H=<lvgl/src/libs/freetype/ftmodule.h>
CFLAGS += -DFT_CONFIG_OPTIONS_H=<lvgl/src/libs/freetype/ftoption.h>

# FreeType include path
CFLAGS += -Ifreetype/include

# FreeType C source file
FT_CSRCS += freetype/src/base/ftbase.c
FT_CSRCS += freetype/src/base/ftbitmap.c
FT_CSRCS += freetype/src/base/ftdebug.c
FT_CSRCS += freetype/src/base/ftglyph.c
FT_CSRCS += freetype/src/base/ftinit.c
FT_CSRCS += freetype/src/cache/ftcache.c
FT_CSRCS += freetype/src/gzip/ftgzip.c
FT_CSRCS += freetype/src/sfnt/sfnt.c
FT_CSRCS += freetype/src/smooth/smooth.c
FT_CSRCS += freetype/src/truetype/truetype.c
CSRCS += $(FT_CSRCS)

Usage(用法)

显示原文

Enable LV_USE_FREETYPE in lv_conf.h.

Cache configuration:

  • LV_FREETYPE_CACHE_SIZE Maximum memory(Bytes) used to cache font bitmap, outline, character maps, etc. :Note: This value does not include the memory used by FT_Face and FT_Size objects

  • LV_FREETYPE_CACHE_FT_FACES: Maximum open number of FT_Face objects.

  • LV_FREETYPE_CACHE_FT_SIZES: Maximum open number of FT_Size objects.

By default, 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.

If you want FreeType to use lvgl's memory allocation and file system interface, you can enable LV_FREETYPE_USE_LVGL_PORT in lv_conf.h, convenient for unified management.

The font style supports Italic and Bold fonts processed by software, and can be set with reference to the following values:

They can be combined.eg: LV_FREETYPE_FONT_STYLE_BOLD | LV_FREETYPE_FONT_STYLE_ITALIC.

Use the lv_freetype_font_create() function to create a font. To delete a font, use lv_freetype_font_delete(). For more detailed usage, please refer to example code.


LV_USE_FREETYPE 中启用 lv_conf.h

缓存配置:

  • LV_FREETYPE_CACHE_SIZE 用于缓存字体位图、轮廓图、字符映射表等的最大内存(字节)。 :注意:此值不包括 FT_FaceFT_Size 对象使用的内存。

  • LV_FREETYPE_CACHE_FT_FACES:最大打开 FT_Face 对象数。

  • LV_FREETYPE_CACHE_FT_SIZES:最大打开 FT_Size 对象数。

默认情况下,FreeType 扩展不使用 LVGL 的文件系统。你 可以像往常一样在操作系统上简单地传递字体的路径 或平台。

如果希望 FreeType 使用 lvgl 的内存分配和文件系统接口,即可启用 LV_FREETYPE_USE_LVGL_PORTlv_conf.h 里 ,方便统一管理。

字体样式支持 斜体粗体 处理 软件,并可参考以下值进行设置:

它们可以 combined.eg:LV_FREETYPE_FONT_STYLE_BOLD | LV_FREETYPE_FONT_STYLE_ITALIC

使用 lv_freetype_font_create() 函数创建字体。到删除字体,使用 lv_freetype_font_delete()。为了更详细的使用,请参阅示例代码。

Example

[English]

Open a front with FreeType

#include "../../lv_examples.h"
#if LV_BUILD_EXAMPLES
#if LV_USE_FREETYPE

#if LV_FREETYPE_USE_LVGL_PORT
    #define PATH_PREFIX "A:"
#else
    #define PATH_PREFIX "./"
#endif

/**
 * Load a font with FreeType
 */
void lv_example_freetype_1(void)
{
    /*Create a font*/
    lv_font_t * font = lv_freetype_font_create(PATH_PREFIX "lvgl/examples/libs/freetype/Lato-Regular.ttf",
                                               LV_FREETYPE_FONT_RENDER_MODE_BITMAP,
                                               24,
                                               LV_FREETYPE_FONT_STYLE_NORMAL);

    if(!font) {
        LV_LOG_ERROR("freetype font create failed.");
        return;
    }

    /*Create style with the new font*/
    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_text_font(&style, 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_screen_active());
    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_screen_active());
    lv_label_set_text(label, "FreeType is not installed");
    lv_obj_center(label);
}

#endif
#endif

Learn more(了解更多信息)

显示原文

FreeType 教程

LVGL的 Add a new font(添加新的字体)

API

ftoption.h

ftmodule.h

lv_types.h

lv_freetype.h