WPF "глифы" не рендеринг текста правильно, как " TextBlock`

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

enter image description here

есть две проблемы:

  1. Кернинг между буквами.
  2. Кернинг между буквами и диакритиками.

первая проблема, которую я решить

2 ответов


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


Как сказал @Codedom, вы должны определить свой собственный список, который может выглядеть так:

class Program
{
    static void Main(string[] args)
    {
        var list = new List<DiacriticsKerning>();
        list.Add(new DiacriticsKerning('א', 'ָ', HorizontalAlignment.Center, VerticalAlignment.None));
        list.Add(new DiacriticsKerning('ב', 'ָ', HorizontalAlignment.Center, VerticalAlignment.None));
        list.Add(new DiacriticsKerning('ג', 'ָ', HorizontalAlignment.Center, VerticalAlignment.None));
        list.Add(new DiacriticsKerning('ד', 'ָ', HorizontalAlignment.Right, VerticalAlignment.None));
        list.Add(new DiacriticsKerning('ה', 'ָ', HorizontalAlignment.Center, VerticalAlignment.None));
        list.Add(new DiacriticsKerning('ו', 'ָ', HorizontalAlignment.Center, VerticalAlignment.None));
        // ...
    }
}

struct DiacriticsKerning
{
    public DiacriticsKerning(char letter, char diacritics, HorizontalAlignment alignmentHorizontal, VerticalAlignment alignmentVertical)
    {
        Letters = letter;
        Diacritics = diacritics;
        HorizontalAlignment = alignmentHorizontal;
        VerticalAlignment = alignmentVertical;
    }

    char Letters;
    char Diacritics;
    HorizontalAlignment HorizontalAlignment;
    VerticalAlignment VerticalAlignment;
}

enum HorizontalAlignment { None, Center, Left, Right, }

enum VerticalAlignment { None, Center, Left, Right, }