Подробности

[В начало]

Проблема в реализации № V0028

Краткое описание

FT_Get_MM_Var возвращает неверные значения по умолчанию для design coordinate

Подробное описание

Согласно FreeType2 API reference, FT_Get_MM_Var возвращает дескриптор, соответствующий данному Multiple Master шрифту. Также в описании структуры FT_Var_Axis указано следующее:

FreeType computes meaningful default values for MM; it is then an integer value, not in 16.16 format.

Из этого следует, что значение по умолчанию для design coordinate должно быть, по крайней мере, не меньше минимального и не больше максимального значения для данной design coordinate.

Например, для первой design coordinate шрифта 'ZX______.PFB' (см. прикреплённый архив), минимальное и максимальное значения равны 50 и 1450 (0x00320000 и 0x05AA0000 в формате 16.16 с фиксированной запятой), соответственно.

FT_Get_MM_Var, однако, выбирает для этой design coordinate в качестве значения по умолчанию число вне допустимого интервала: 0xFBD20000 и 0x000001A3FBD20000 на 32-битных и 64-битных системах, соответственно.

Кроме того, в случаях, когда FT_Get_MM_Var всё-таки возвращает значение из нужного интервала, оно представляет собой число в формате 16.16 с фиксированной запятой, в отличие от того, что сказано в документации:

it is then an integer value, not in 16.16 format

Раздел стандарта

Linux Standard Base Desktop Specification 3.2, Chapter 12. Libraries, 12.1 Interfaces for libfreetype, который ссылается на FreeType-2.1.10 API Reference, section "Multiple Masters"

Способ воспроизведения

  1. Распакуйте прикреплённый архив
  2. Скомпилируйте и скомпонуйте программу-пример, которая в нём хранится
  3. Запустите программу-пример, указав в командной строке в качестве аргумента имя файла шрифта:
    ./multiple_masters ZX______.PFB
    ./multiple_masters ZY______.PFB

Компонент

freetype 2.1.10 or later

Принято

freetype-devel mailing list, #26, 2008.11

Статус

Исправлено в freetype 2.3.8

[В начало]