🛠️🐜 Antkeeper superbuild with dependencies included https://antkeeper.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1240 lines
30 KiB

  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <meta name="description" content="API Reference Documentation for FreeType-2.11.0">
  7. <meta name="author" content="FreeType Contributors">
  8. <link rel="icon" href="images/favico.ico">
  9. <meta name="generator" content="mkdocs-1.2.1, mkdocs-material-7.1.9">
  10. <title>The CFF driver - FreeType-2.11.0 API Reference</title>
  11. <link rel="stylesheet" href="assets/stylesheets/main.ca7ac06f.min.css">
  12. <link rel="stylesheet" href="assets/stylesheets/palette.f1a3b89f.min.css">
  13. <meta name="theme-color" content="#4cae4f">
  14. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  15. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Serif:300,400,400i,700%7CRoboto+Mono&display=fallback">
  16. <style>:root{--md-text-font-family:"Noto Serif";--md-code-font-family:"Roboto Mono"}</style>
  17. <link rel="stylesheet" href="stylesheets/extra.css">
  18. </head>
  19. <body dir="ltr" data-md-color-scheme="" data-md-color-primary="green" data-md-color-accent="green">
  20. <script>function __prefix(e){return new URL(".",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
  21. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  22. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  23. <label class="md-overlay" for="__drawer"></label>
  24. <div data-md-component="skip">
  25. <a href="#the-cff-driver" class="md-skip">
  26. Skip to content
  27. </a>
  28. </div>
  29. <div data-md-component="announce">
  30. </div>
  31. <header class="md-header" data-md-component="header">
  32. <nav class="md-header__inner md-grid" aria-label="Header">
  33. <a href="index.html" title="FreeType-2.11.0 API Reference" class="md-header__button md-logo" aria-label="FreeType-2.11.0 API Reference" data-md-component="logo">
  34. <img src="images/favico.ico" alt="logo">
  35. </a>
  36. <label class="md-header__button md-icon" for="__drawer">
  37. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
  38. </label>
  39. <div class="md-header__title" data-md-component="header-title">
  40. <div class="md-header__ellipsis">
  41. <div class="md-header__topic">
  42. <span class="md-ellipsis">
  43. FreeType-2.11.0 API Reference
  44. </span>
  45. </div>
  46. <div class="md-header__topic" data-md-component="header-topic">
  47. <span class="md-ellipsis">
  48. The CFF driver
  49. </span>
  50. </div>
  51. </div>
  52. </div>
  53. <label class="md-header__button md-icon" for="__search">
  54. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  55. </label>
  56. <div class="md-search" data-md-component="search" role="dialog">
  57. <label class="md-search__overlay" for="__search"></label>
  58. <div class="md-search__inner" role="search">
  59. <form class="md-search__form" name="search">
  60. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
  61. <label class="md-search__icon md-icon" for="__search">
  62. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  63. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  64. </label>
  65. <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
  66. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
  67. </button>
  68. </form>
  69. <div class="md-search__output">
  70. <div class="md-search__scrollwrap" data-md-scrollfix>
  71. <div class="md-search-result" data-md-component="search-result">
  72. <div class="md-search-result__meta">
  73. Initializing search
  74. </div>
  75. <ol class="md-search-result__list"></ol>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </nav>
  82. </header>
  83. <div class="md-container" data-md-component="container">
  84. <main class="md-main" data-md-component="main">
  85. <div class="md-main__inner md-grid">
  86. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  87. <div class="md-sidebar__scrollwrap">
  88. <div class="md-sidebar__inner">
  89. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  90. <label class="md-nav__title" for="__drawer">
  91. <a href="index.html" title="FreeType-2.11.0 API Reference" class="md-nav__button md-logo" aria-label="FreeType-2.11.0 API Reference" data-md-component="logo">
  92. <img src="images/favico.ico" alt="logo">
  93. </a>
  94. FreeType-2.11.0 API Reference
  95. </label>
  96. <ul class="md-nav__list" data-md-scrollfix>
  97. <li class="md-nav__item">
  98. <a href="index.html" class="md-nav__link">
  99. TOC
  100. </a>
  101. </li>
  102. <li class="md-nav__item">
  103. <a href="ft2-index.html" class="md-nav__link">
  104. Index
  105. </a>
  106. </li>
  107. <li class="md-nav__item md-nav__item--nested">
  108. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
  109. <label class="md-nav__link" for="__nav_3">
  110. General Remarks
  111. <span class="md-nav__icon md-icon"></span>
  112. </label>
  113. <nav class="md-nav" aria-label="General Remarks" data-md-level="1">
  114. <label class="md-nav__title" for="__nav_3">
  115. <span class="md-nav__icon md-icon"></span>
  116. General Remarks
  117. </label>
  118. <ul class="md-nav__list" data-md-scrollfix>
  119. <li class="md-nav__item">
  120. <a href="ft2-preamble.html" class="md-nav__link">
  121. Preamble
  122. </a>
  123. </li>
  124. <li class="md-nav__item">
  125. <a href="ft2-header_inclusion.html" class="md-nav__link">
  126. FreeType's header inclusion scheme
  127. </a>
  128. </li>
  129. <li class="md-nav__item">
  130. <a href="ft2-user_allocation.html" class="md-nav__link">
  131. User allocation
  132. </a>
  133. </li>
  134. </ul>
  135. </nav>
  136. </li>
  137. <li class="md-nav__item md-nav__item--nested">
  138. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
  139. <label class="md-nav__link" for="__nav_4">
  140. Core API
  141. <span class="md-nav__icon md-icon"></span>
  142. </label>
  143. <nav class="md-nav" aria-label="Core API" data-md-level="1">
  144. <label class="md-nav__title" for="__nav_4">
  145. <span class="md-nav__icon md-icon"></span>
  146. Core API
  147. </label>
  148. <ul class="md-nav__list" data-md-scrollfix>
  149. <li class="md-nav__item">
  150. <a href="ft2-version.html" class="md-nav__link">
  151. FreeType Version
  152. </a>
  153. </li>
  154. <li class="md-nav__item">
  155. <a href="ft2-basic_types.html" class="md-nav__link">
  156. Basic Data Types
  157. </a>
  158. </li>
  159. <li class="md-nav__item">
  160. <a href="ft2-base_interface.html" class="md-nav__link">
  161. Base Interface
  162. </a>
  163. </li>
  164. <li class="md-nav__item">
  165. <a href="ft2-glyph_variants.html" class="md-nav__link">
  166. Unicode Variation Sequences
  167. </a>
  168. </li>
  169. <li class="md-nav__item">
  170. <a href="ft2-color_management.html" class="md-nav__link">
  171. Glyph Color Management
  172. </a>
  173. </li>
  174. <li class="md-nav__item">
  175. <a href="ft2-layer_management.html" class="md-nav__link">
  176. Glyph Layer Management
  177. </a>
  178. </li>
  179. <li class="md-nav__item">
  180. <a href="ft2-glyph_management.html" class="md-nav__link">
  181. Glyph Management
  182. </a>
  183. </li>
  184. <li class="md-nav__item">
  185. <a href="ft2-mac_specific.html" class="md-nav__link">
  186. Mac Specific Interface
  187. </a>
  188. </li>
  189. <li class="md-nav__item">
  190. <a href="ft2-sizes_management.html" class="md-nav__link">
  191. Size Management
  192. </a>
  193. </li>
  194. <li class="md-nav__item">
  195. <a href="ft2-header_file_macros.html" class="md-nav__link">
  196. Header File Macros
  197. </a>
  198. </li>
  199. </ul>
  200. </nav>
  201. </li>
  202. <li class="md-nav__item md-nav__item--nested">
  203. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
  204. <label class="md-nav__link" for="__nav_5">
  205. Format-Specific API
  206. <span class="md-nav__icon md-icon"></span>
  207. </label>
  208. <nav class="md-nav" aria-label="Format-Specific API" data-md-level="1">
  209. <label class="md-nav__title" for="__nav_5">
  210. <span class="md-nav__icon md-icon"></span>
  211. Format-Specific API
  212. </label>
  213. <ul class="md-nav__list" data-md-scrollfix>
  214. <li class="md-nav__item">
  215. <a href="ft2-multiple_masters.html" class="md-nav__link">
  216. Multiple Masters
  217. </a>
  218. </li>
  219. <li class="md-nav__item">
  220. <a href="ft2-truetype_tables.html" class="md-nav__link">
  221. TrueType Tables
  222. </a>
  223. </li>
  224. <li class="md-nav__item">
  225. <a href="ft2-type1_tables.html" class="md-nav__link">
  226. Type 1 Tables
  227. </a>
  228. </li>
  229. <li class="md-nav__item">
  230. <a href="ft2-sfnt_names.html" class="md-nav__link">
  231. SFNT Names
  232. </a>
  233. </li>
  234. <li class="md-nav__item">
  235. <a href="ft2-bdf_fonts.html" class="md-nav__link">
  236. BDF and PCF Files
  237. </a>
  238. </li>
  239. <li class="md-nav__item">
  240. <a href="ft2-cid_fonts.html" class="md-nav__link">
  241. CID Fonts
  242. </a>
  243. </li>
  244. <li class="md-nav__item">
  245. <a href="ft2-pfr_fonts.html" class="md-nav__link">
  246. PFR Fonts
  247. </a>
  248. </li>
  249. <li class="md-nav__item">
  250. <a href="ft2-winfnt_fonts.html" class="md-nav__link">
  251. Window FNT Files
  252. </a>
  253. </li>
  254. <li class="md-nav__item">
  255. <a href="ft2-font_formats.html" class="md-nav__link">
  256. Font Formats
  257. </a>
  258. </li>
  259. <li class="md-nav__item">
  260. <a href="ft2-gasp_table.html" class="md-nav__link">
  261. Gasp Table
  262. </a>
  263. </li>
  264. </ul>
  265. </nav>
  266. </li>
  267. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  268. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
  269. <label class="md-nav__link" for="__nav_6">
  270. Controlling FreeType Modules
  271. <span class="md-nav__icon md-icon"></span>
  272. </label>
  273. <nav class="md-nav" aria-label="Controlling FreeType Modules" data-md-level="1">
  274. <label class="md-nav__title" for="__nav_6">
  275. <span class="md-nav__icon md-icon"></span>
  276. Controlling FreeType Modules
  277. </label>
  278. <ul class="md-nav__list" data-md-scrollfix>
  279. <li class="md-nav__item">
  280. <a href="ft2-auto_hinter.html" class="md-nav__link">
  281. The auto-hinter
  282. </a>
  283. </li>
  284. <li class="md-nav__item md-nav__item--active">
  285. <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
  286. <label class="md-nav__link md-nav__link--active" for="__toc">
  287. The CFF driver
  288. <span class="md-nav__icon md-icon"></span>
  289. </label>
  290. <a href="ft2-cff_driver.html" class="md-nav__link md-nav__link--active">
  291. The CFF driver
  292. </a>
  293. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  294. <label class="md-nav__title" for="__toc">
  295. <span class="md-nav__icon md-icon"></span>
  296. Table of contents
  297. </label>
  298. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  299. <li class="md-nav__item">
  300. <a href="#synopsis" class="md-nav__link">
  301. Synopsis
  302. </a>
  303. </li>
  304. </ul>
  305. </nav>
  306. </li>
  307. <li class="md-nav__item">
  308. <a href="ft2-t1_cid_driver.html" class="md-nav__link">
  309. The Type 1 and CID drivers
  310. </a>
  311. </li>
  312. <li class="md-nav__item">
  313. <a href="ft2-tt_driver.html" class="md-nav__link">
  314. The TrueType driver
  315. </a>
  316. </li>
  317. <li class="md-nav__item">
  318. <a href="ft2-pcf_driver.html" class="md-nav__link">
  319. The PCF driver
  320. </a>
  321. </li>
  322. <li class="md-nav__item">
  323. <a href="ft2-properties.html" class="md-nav__link">
  324. Driver properties
  325. </a>
  326. </li>
  327. <li class="md-nav__item">
  328. <a href="ft2-parameter_tags.html" class="md-nav__link">
  329. Parameter Tags
  330. </a>
  331. </li>
  332. <li class="md-nav__item">
  333. <a href="ft2-lcd_rendering.html" class="md-nav__link">
  334. Subpixel Rendering
  335. </a>
  336. </li>
  337. </ul>
  338. </nav>
  339. </li>
  340. <li class="md-nav__item md-nav__item--nested">
  341. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
  342. <label class="md-nav__link" for="__nav_7">
  343. Cache Sub-System
  344. <span class="md-nav__icon md-icon"></span>
  345. </label>
  346. <nav class="md-nav" aria-label="Cache Sub-System" data-md-level="1">
  347. <label class="md-nav__title" for="__nav_7">
  348. <span class="md-nav__icon md-icon"></span>
  349. Cache Sub-System
  350. </label>
  351. <ul class="md-nav__list" data-md-scrollfix>
  352. <li class="md-nav__item">
  353. <a href="ft2-cache_subsystem.html" class="md-nav__link">
  354. Cache Sub-System
  355. </a>
  356. </li>
  357. </ul>
  358. </nav>
  359. </li>
  360. <li class="md-nav__item md-nav__item--nested">
  361. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_8" type="checkbox" id="__nav_8" >
  362. <label class="md-nav__link" for="__nav_8">
  363. Support API
  364. <span class="md-nav__icon md-icon"></span>
  365. </label>
  366. <nav class="md-nav" aria-label="Support API" data-md-level="1">
  367. <label class="md-nav__title" for="__nav_8">
  368. <span class="md-nav__icon md-icon"></span>
  369. Support API
  370. </label>
  371. <ul class="md-nav__list" data-md-scrollfix>
  372. <li class="md-nav__item">
  373. <a href="ft2-computations.html" class="md-nav__link">
  374. Computations
  375. </a>
  376. </li>
  377. <li class="md-nav__item">
  378. <a href="ft2-list_processing.html" class="md-nav__link">
  379. List Processing
  380. </a>
  381. </li>
  382. <li class="md-nav__item">
  383. <a href="ft2-outline_processing.html" class="md-nav__link">
  384. Outline Processing
  385. </a>
  386. </li>
  387. <li class="md-nav__item">
  388. <a href="ft2-quick_advance.html" class="md-nav__link">
  389. Quick retrieval of advance values
  390. </a>
  391. </li>
  392. <li class="md-nav__item">
  393. <a href="ft2-bitmap_handling.html" class="md-nav__link">
  394. Bitmap Handling
  395. </a>
  396. </li>
  397. <li class="md-nav__item">
  398. <a href="ft2-raster.html" class="md-nav__link">
  399. Scanline Converter
  400. </a>
  401. </li>
  402. <li class="md-nav__item">
  403. <a href="ft2-glyph_stroker.html" class="md-nav__link">
  404. Glyph Stroker
  405. </a>
  406. </li>
  407. <li class="md-nav__item">
  408. <a href="ft2-system_interface.html" class="md-nav__link">
  409. System Interface
  410. </a>
  411. </li>
  412. <li class="md-nav__item">
  413. <a href="ft2-module_management.html" class="md-nav__link">
  414. Module Management
  415. </a>
  416. </li>
  417. <li class="md-nav__item">
  418. <a href="ft2-gzip.html" class="md-nav__link">
  419. GZIP Streams
  420. </a>
  421. </li>
  422. <li class="md-nav__item">
  423. <a href="ft2-lzw.html" class="md-nav__link">
  424. LZW Streams
  425. </a>
  426. </li>
  427. <li class="md-nav__item">
  428. <a href="ft2-bzip2.html" class="md-nav__link">
  429. BZIP2 Streams
  430. </a>
  431. </li>
  432. <li class="md-nav__item">
  433. <a href="ft2-debugging_apis.html" class="md-nav__link">
  434. External Debugging APIs
  435. </a>
  436. </li>
  437. </ul>
  438. </nav>
  439. </li>
  440. <li class="md-nav__item md-nav__item--nested">
  441. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_9" type="checkbox" id="__nav_9" >
  442. <label class="md-nav__link" for="__nav_9">
  443. Error Codes
  444. <span class="md-nav__icon md-icon"></span>
  445. </label>
  446. <nav class="md-nav" aria-label="Error Codes" data-md-level="1">
  447. <label class="md-nav__title" for="__nav_9">
  448. <span class="md-nav__icon md-icon"></span>
  449. Error Codes
  450. </label>
  451. <ul class="md-nav__list" data-md-scrollfix>
  452. <li class="md-nav__item">
  453. <a href="ft2-error_enumerations.html" class="md-nav__link">
  454. Error Enumerations
  455. </a>
  456. </li>
  457. <li class="md-nav__item">
  458. <a href="ft2-error_code_values.html" class="md-nav__link">
  459. Error Code Values
  460. </a>
  461. </li>
  462. </ul>
  463. </nav>
  464. </li>
  465. <li class="md-nav__item md-nav__item--nested">
  466. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_10" type="checkbox" id="__nav_10" >
  467. <label class="md-nav__link" for="__nav_10">
  468. Miscellaneous
  469. <span class="md-nav__icon md-icon"></span>
  470. </label>
  471. <nav class="md-nav" aria-label="Miscellaneous" data-md-level="1">
  472. <label class="md-nav__title" for="__nav_10">
  473. <span class="md-nav__icon md-icon"></span>
  474. Miscellaneous
  475. </label>
  476. <ul class="md-nav__list" data-md-scrollfix>
  477. <li class="md-nav__item">
  478. <a href="ft2-gx_validation.html" class="md-nav__link">
  479. TrueTypeGX/AAT Validation
  480. </a>
  481. </li>
  482. <li class="md-nav__item">
  483. <a href="ft2-incremental.html" class="md-nav__link">
  484. Incremental Loading
  485. </a>
  486. </li>
  487. <li class="md-nav__item">
  488. <a href="ft2-truetype_engine.html" class="md-nav__link">
  489. The TrueType Engine
  490. </a>
  491. </li>
  492. <li class="md-nav__item">
  493. <a href="ft2-ot_validation.html" class="md-nav__link">
  494. OpenType Validation
  495. </a>
  496. </li>
  497. </ul>
  498. </nav>
  499. </li>
  500. </ul>
  501. </nav>
  502. </div>
  503. </div>
  504. </div>
  505. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  506. <div class="md-sidebar__scrollwrap">
  507. <div class="md-sidebar__inner">
  508. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  509. <label class="md-nav__title" for="__toc">
  510. <span class="md-nav__icon md-icon"></span>
  511. Table of contents
  512. </label>
  513. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  514. <li class="md-nav__item">
  515. <a href="#synopsis" class="md-nav__link">
  516. Synopsis
  517. </a>
  518. </li>
  519. </ul>
  520. </nav>
  521. </div>
  522. </div>
  523. </div>
  524. <div class="md-content" data-md-component="content">
  525. <article class="md-content__inner md-typeset">
  526. <p><a href="https://www.freetype.org">FreeType</a> &raquo; <a href="../">Docs</a> &raquo; <a href="index.html#controlling-freetype-modules">Controlling FreeType Modules</a> &raquo; The CFF driver</p>
  527. <hr />
  528. <h1 id="the-cff-driver">The CFF driver<a class="headerlink" href="#the-cff-driver" title="Permanent link">&para;</a></h1>
  529. <h2 id="synopsis">Synopsis<a class="headerlink" href="#synopsis" title="Permanent link">&para;</a></h2>
  530. <p>While FreeType's CFF driver doesn't expose API functions by itself, it is possible to control its behaviour with <code><a href="ft2-module_management.html#ft_property_set">FT_Property_Set</a></code> and <code><a href="ft2-module_management.html#ft_property_get">FT_Property_Get</a></code>.</p>
  531. <p>The CFF driver's module name is &lsquo;cff&rsquo;.</p>
  532. <p>Available properties are <code><a href="ft2-properties.html#hinting-engine">hinting-engine</a></code>, <code><a href="ft2-properties.html#no-stem-darkening">no-stem-darkening</a></code>, <code><a href="ft2-properties.html#darkening-parameters">darkening-parameters</a></code>, and <code><a href="ft2-properties.html#random-seed">random-seed</a></code>, as documented in the &lsquo;<a href="ft2-properties.html#properties">Driver properties</a>&rsquo; section.</p>
  533. <p><strong>Hinting and anti-aliasing principles of the new engine</strong></p>
  534. <p>The rasterizer is positioning horizontal features (e.g., ascender height &amp; x-height, or crossbars) on the pixel grid and minimizing the amount of anti-aliasing applied to them, while placing vertical features (vertical stems) on the pixel grid without hinting, thus representing the stem position and weight accurately. Sometimes the vertical stems may be only partially black. In this context, &lsquo;anti-aliasing&rsquo; means that stems are not positioned exactly on pixel borders, causing a fuzzy appearance.</p>
  535. <p>There are two principles behind this approach.</p>
  536. <p>1) No hinting in the horizontal direction: Unlike &lsquo;superhinted&rsquo; TrueType, which changes glyph widths to accommodate regular inter-glyph spacing, Adobe's approach is &lsquo;faithful to the design&rsquo; in representing both the glyph width and the inter-glyph spacing designed for the font. This makes the screen display as close as it can be to the result one would get with infinite resolution, while preserving what is considered the key characteristics of each glyph. Note that the distances between unhinted and grid-fitted positions at small sizes are comparable to kerning values and thus would be noticeable (and distracting) while reading if hinting were applied.</p>
  537. <p>One of the reasons to not hint horizontally is anti-aliasing for LCD screens: The pixel geometry of modern displays supplies three vertical subpixels as the eye moves horizontally across each visible pixel. On devices where we can be certain this characteristic is present a rasterizer can take advantage of the subpixels to add increments of weight. In Western writing systems this turns out to be the more critical direction anyway; the weights and spacing of vertical stems (see above) are central to Armenian, Cyrillic, Greek, and Latin type designs. Even when the rasterizer uses greyscale anti-aliasing instead of color (a necessary compromise when one doesn't know the screen characteristics), the unhinted vertical features preserve the design's weight and spacing much better than aliased type would.</p>
  538. <p>2) Alignment in the vertical direction: Weights and spacing along the y&nbsp;axis are less critical; what is much more important is the visual alignment of related features (like cap-height and x-height). The sense of alignment for these is enhanced by the sharpness of grid-fit edges, while the cruder vertical resolution (full pixels instead of &#8531; pixels) is less of a problem.</p>
  539. <p>On the technical side, horizontal alignment zones for ascender, x-height, and other important height values (traditionally called &lsquo;blue zones&rsquo;) as defined in the font are positioned independently, each being rounded to the nearest pixel edge, taking care of overshoot suppression at small sizes, stem darkening, and scaling.</p>
  540. <p>Hstems (this is, hint values defined in the font to help align horizontal features) that fall within a blue zone are said to be &lsquo;captured&rsquo; and are aligned to that zone. Uncaptured stems are moved in one of four ways, top edge up or down, bottom edge up or down. Unless there are conflicting hstems, the smallest movement is taken to minimize distortion.</p>
  541. </article>
  542. </div>
  543. </div>
  544. </main>
  545. <footer class="md-footer">
  546. <nav class="md-footer__inner md-grid" aria-label="Footer">
  547. <a href="ft2-auto_hinter.html" class="md-footer__link md-footer__link--prev" aria-label="Previous: The auto-hinter" rel="prev">
  548. <div class="md-footer__button md-icon">
  549. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  550. </div>
  551. <div class="md-footer__title">
  552. <div class="md-ellipsis">
  553. <span class="md-footer__direction">
  554. Previous
  555. </span>
  556. The auto-hinter
  557. </div>
  558. </div>
  559. </a>
  560. <a href="ft2-t1_cid_driver.html" class="md-footer__link md-footer__link--next" aria-label="Next: The Type 1 and CID drivers" rel="next">
  561. <div class="md-footer__title">
  562. <div class="md-ellipsis">
  563. <span class="md-footer__direction">
  564. Next
  565. </span>
  566. The Type 1 and CID drivers
  567. </div>
  568. </div>
  569. <div class="md-footer__button md-icon">
  570. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
  571. </div>
  572. </a>
  573. </nav>
  574. <div class="md-footer-meta md-typeset">
  575. <div class="md-footer-meta__inner md-grid">
  576. <div class="md-footer-copyright">
  577. <div class="md-footer-copyright__highlight">
  578. Copyright 2021 <a href = "https://www.freetype.org/license.html">The FreeType Project</a>.
  579. </div>
  580. Made with
  581. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  582. Material for MkDocs
  583. </a>
  584. </div>
  585. </div>
  586. </div>
  587. </footer>
  588. </div>
  589. <div class="md-dialog" data-md-component="dialog">
  590. <div class="md-dialog__inner md-typeset"></div>
  591. </div>
  592. <script id="__config" type="application/json">{"base": ".", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "assets/javascripts/workers/search.477d984a.min.js", "version": null}</script>
  593. <script src="assets/javascripts/bundle.82b56eb2.min.js"></script>
  594. <script src="javascripts/extra.js"></script>
  595. </body>
  596. </html>