C++字体库开发之字体回退三

代码片段

class FontCoverage

{

public:

using SP = std::shared_ptr<FontCoverage>;

virtual ~FontCoverage() = default;

virtual void set(int index, FontTypes::CoverageLevel level) = 0;

virtual FontTypes::CoverageLevel get(int index) = 0;

virtual FontCoverage::SP clone() = 0;

};

freetype:

FTCoverage::SP coverage = std::make_shared<FTCoverage>();

FT_CharMap *charMap = (*m_face)->charmaps;

for (int i = 0; i < (*m_face)->num_charmaps; i++) {

FT_Select_Charmap((*m_face), charMap[i]->encoding);

FT_UInt gIndex;

for (auto charCode = FT_Get_First_Char((*m_face), &gIndex); gIndex != 0;

charCode = FT_Get_Next_Char((*m_face), charCode, &gIndex)) {

coverage->set(charCode, FontTypes::CoverageLevel::COVERAGE_EXACT);

}

}

harfbuzz:

FontCoverage::SP coverage = std::make_shared<HBCoverage>();

hb_set_t *chars = hb_set_create();

hb_codepoint_t ch = HB_SET_VALUE_INVALID;

hb_face_collect_unicodes(m_face, chars);

while (hb_set_next(chars, &ch))

coverage->set(ch, FontTypes::CoverageLevel::COVERAGE_EXACT);

hb_set_destroy(chars);

关键点

1.字体解析需包含完整的unicode范围

2.根据unicode,字体名,大小等最优匹配得到回退列表

C++字体库开发二-CSDN博客


创作不易,小小的支持一下吧!

相关推荐
学不思则罔17 分钟前
ParallelStream并发陷阱解析
java·开发语言·windows
认真的小羽❅21 分钟前
【Java并发编程】volatile关键字深度解析:从内存语义到实际应用
java·开发语言
jayson.h28 分钟前
可视化界面
开发语言·python
kgduu36 分钟前
python中的魔法方法
开发语言·python
计算机安禾41 分钟前
【c++面向对象编程】第21篇:运算符重载基础:语法、规则与不可重载的运算符
java·前端·c++
fox_lht41 分钟前
12.3.使用生命周期使引用一直有用
开发语言·后端·rust
开发者联盟league43 分钟前
在cursor中配置c/c++开发环境
c语言·开发语言·c++
初圣魔门首席弟子44 分钟前
bug 2026.05.15(以前能运行的java springboot项目突然间不能运行后台数据了)
java·开发语言·bug
求知也求真佳1 小时前
S19|MCP 与插件:多 Agent 平台 —— 外部能力总线,让外部工具安全接入
开发语言·agent
澈2071 小时前
平衡二叉树:AVL与红黑树终极对比
数据结构·c++·红黑树