Поделиться через


Обоснование, кернинг и интервал

Начиная с Windows 8, DirectWrite предоставляет ряд функций, позволяющих управлять базовыми функциями типографии, макета и интервала, такими как символьный интервал, кернинг пар и обоснование.

Интервалы между символами

Интервал между символами, также известный как "отслеживание", — это интервал между символами в фрагменте текста.

Ниже приведен пример отслеживания. Первая строка не применяет отслеживание к тексту. Во второй строке увеличивается интервал между символами, а в третьей строке уменьшается символьный интервал.

три примера одного и того же текста без отслеживания, с большим интервалом и меньшим интервалом.

Начиная с Windows 8, DirectWrite добавляет эти методы для управления интервалами между символами в тексте.

Если вы используете макет DirectWrite, для этой цели можно использовать методы IDWriteTextLayout1::GetCharacterSpacing и IDWriteTextLayout1::SetCharacterSpacing.

Используйте метод GetCharacterSpacing для определения текущего интервала между символами и возвращает текущий символ, интервал до и после символа, минимальную ширину перед символом и структуру DWRITE_TEXT_RANGE , содержащую сведения о начальной позиции и длине оставшегося текста.

Используйте SetCharacterSpacing в интерфейсе DWriteTextLayout1 , чтобы применить собственные символьные интервалы к тексту в макете. Метод SetCharacterSpacing принимает необходимое пространство до и после символа, минимально допустимое значение заранее и DWRITE_TEXT_RANGE , определяющее диапазон для применения интервала.

Если вы используете пользовательский макет, DirectWrite поддерживает настройку интервалов между символами с помощью IDWriteTextAnalyzer1::ApplyCharacterSpacing. Используйте этот метод, если для расширенного управления макетом требуется пользовательский текстовый макет. Этот метод позволяет предоставить ApplyCharacterSpacing начальные и конечные интервалы, минимальную ширину, длину карты кластера, количество глифов, сопоставление диапазонов символов с глифами и ширину каждого глифа, если вы используете пользовательский макет. Метод возвращает измененные достижения глифа и перечисление DWRITE_GLYPH_OFFSET с новыми смещениями к источнику каждого глифа.

Кернинг

Кернинг — это настройка контекстных интервалов между парами или тройными буквами. Специальные интервалы между наборами символов могут повысить удобочитаемость и улучшить внешний вид текста. Важное различие между кернингом и символьным интервалом заключается в том, что буквенный интервал не зависит от текста, в котором он пробелов, а кернинг используется в определенных ситуациях между определенными парами символов, как определено в шрифте.

Изображение ее является примером кернинга. Слово АВАТАР в верхней строке кернировано, чтобы сделать слово более естественным. Как видно из красных полей вокруг символов, между первыми четырьмя буквами применяется больше интервалов, в то время как R на конце имеет больше места перед ним. Исходный текст без кернинга находится во второй строке. Кернинг в этом примере делает слово более удобочитаемым и более естественным.

пример того же слова с примененным кернингом и без нее.

Символ перемещается между парами символов, которые kerns шрифтов хранятся в таблице kern, и DirectWrite анализирует эту таблицу и возвращает сведения через API kerning.

Если вы хотите узнать, поддерживает ли шрифт кернинг для пар, можно использовать метод IDWriteFontFace1::HasKerningPairs . Этот метод возвращает логическое значение 1, если шрифт поддерживает пары кернинга.

IdWriteFontFace1 также имеет метод, который позволяет получить доступ к корректировкам пар kerning для индексов глифов. GetKerningPairAdjustments позволяет ввести массив индексов глифов и DirectWrite возвращает массив предварительных корректировок глифов. Если шрифт не поддерживает таблицу kern, метод возвращает нули для предварительных корректировок глифа.

Если вы используете макет DirectWrite, в интерфейсе IDWriteTextLayout1 есть два метода, которые позволяют задать кернинг пары и узнать больше о парном кернинге в макете. Метод SetPairKerning принимает логическое представление о том, должна ли быть включена пара kerning, и DWRITE_TEXT_RANGE , определяющий диапазон текста, к которому он применяется. Если вы хотите узнать, включено ли кернинг для пар в текстовом диапазоне, можно использовать метод GetPairKerning , который принимает текущую позицию и возвращает логическое значение, соответствующее включению кернинга пары, и текстовому диапазону, к которому применяется параметр кернинга.

Обоснование

Обоснование — это процесс выравнивания текста таким образом, чтобы он заполнял все пространство в столбце, увеличивая сдвиги между символами или глифами или добавляя символы обоснования для достижения того же эффекта. Как правило, это достигается путем определения места, в которое нужно добавить пробел в строку текста, и вставки пробелов в эти возможности нарушения. Эти элементы интервалов также могут отличаться: в латинских письмах текст оправдывается увеличением ширины между элементами, в то время как на арабском языке текст оправдывается с помощью кашиды. Ниже приведен пример арабского и латинского алфавита, как оправданного, так и не оправданного.

пример арабского и латинского алфавита как оправдано, так и не оправдано.

Начиная с Windows 8, DirectWrite имеет ряд методов, позволяющих обосновать текст в приложениях.

В перечислении DWRITE_TEXT_ALIGNMENT есть дополнительное значение. Можно использовать метод SetTextAlignment и передать константу DWRITE_TEXT_ALIGNMENT_JUSTIFIED, а DirectWrite оправдывает текст и вставляет соответствующий символ обоснования для скрипта.

Если вы используете пользовательский макет, у вас есть несколько методов, которые позволяют воспользоваться преимуществами обоснования. DirectWrite имеет три метода в интерфейсе IDWriteTextAnalyzer1, которые можно использовать для добавления обоснования в пользовательский макет.

Первый метод — GetJustificationOpportunities, который принимает текст, который требуется обосновать, и возвращает DWRITE_JUSTIFICATION_OPPORTUNITY структуру, которая описывает, где можно добавить символы обоснования для обоснования текста.

Вторая функция — JustifyGlyphAdvances, которая оправдывает массив сдвигов глифов, чтобы они соответствовали ширине линии. Этот метод принимает DWRITE_JUSTIFICATION_OPPORTUNITY структуру, которую создает GetJustificationOpportunities , глиф перемещается и глиф смещается. Затем он создает оправданные сдвиги глифа и перечисление DWRITE_GLYPH_OFFSET , содержащее обоснованные смещения глифов.

Третья функция — GetJustifiedGlyphs, которая заполняет новые глифы для сложных скриптов, где обоснование увеличило прогресс для глифов. Метод GetJustifiedGlyphs должен вызываться только в том случае, если скрипт имеет определенный символ обоснования, возвращаемый getScriptProperties. Этот метод принимает сведения о шрифте, длине текста, размере em глифов, сценарии текста, количестве глифов, карте кластера, исходных достижениях и смещениях глифов, а также свойствах глифа. Метод возвращает фактическое число глифов, обновленную карту кластера, обновленные индексы глифов с вставленными глифами обоснования, обновленные смещения глифов и обновленные авансы глифов.