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博客


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

相关推荐
越城2 分钟前
冒泡与 qsort 排序策略集
c语言·开发语言·算法·排序算法
我不会JAVA!29 分钟前
C++ 实现A*算法
c++·算法
mushangqiujin33 分钟前
python爬虫 线程,进程,协程
开发语言·爬虫·python
小王努力学编程43 分钟前
贪心算法学习C++
开发语言·c++·学习·算法·leetcode·贪心算法
羽沢311 小时前
js高级_执行上下文和作用域
开发语言·javascript·ecmascript
墨客Y1 小时前
ubtuntu+cmake+c++
开发语言·c++
forestsea1 小时前
Java并发编程面试题:锁(17题)
java·开发语言
寒雪谷1 小时前
用户登陆UI
开发语言·javascript·ui·harmonyos·鸿蒙
努力学习的小廉1 小时前
【C++】 —— 笔试刷题day_17
开发语言·c++
ChoSeitaku1 小时前
NO.94十六届蓝桥杯备战|图论基础-单源最短路|常规dijkstra|堆优化dijkstra|bellman-ford|spfa(C++)
c++·算法·图论