Почему DrawTextLayout игнорирует кисти из SetDrawingEffect в SharpDX?
Моя цель - нарисовать текст в одном макете с определенными диапазонами разных размеров и непрозрачности. ID2D1RenderTarget::DrawTextLayout
метод, кажется, путь.
Документация для defaultForegroundBrush
параметр:
Кисть, используемая для рисования любого текста в textLayout, с которым еще не связана кисть в качестве эффекта рисования (определяется методом IDWriteTextLayout::SetDrawingEffect).
Согласно разделу "Замечания" IDWriteTextLayout::SetDrawingEffect
метод,
ID2D1Brush, такой как цветная или градиентная кисть, может быть установлен как эффект рисования, если вы используете ID2D1RenderTarget::DrawTextLayout для рисования текста, и эта кисть будет использоваться для рисования указанного диапазона текста.
Этот эффект рисования связан с указанным диапазоном и будет передан обратно в приложение посредством обратного вызова, когда диапазон рисуется во время рисования.
Это звучит как ID2D1RenderTarget::DrawTextLayout
определенно будет использовать любую кисть, установленную IDWriteTextLayout::SetDrawingEffect
, Этот неуправляемый ответ C++, кажется, подтверждает эту идею.
Однако на практике DrawTextLayout
игнорирует любой SolidColorBrush
Я установил с помощью SetDrawingEffect
, Я получаю стили и размеры в соответствующих диапазонах, но все окрашивается с помощью кисти по умолчанию.
Я работал над этим, внедряя пользовательский текстовый рендер ( gist), который очень прост и нарисовал именно то, что я ожидал от ID2D1RenderTarget::DrawTextLayout
согласно документации. Я был бы удовлетворен, но производительность TextRendererBase
а также DrawGlyphRun
более чем на 25% медленнее, чем ID2D1RenderTarget::DrawTextLayout
,
Что может быть причиной этой проблемы? Могу ли я использовать цвет в соответствии с документацией и все еще использовать ID2D1RenderTarget::DrawTextLayout
?
1 ответ
Вместо:
layout.SetDrawingEffect(myBrush, new TextRange(1, 5));
Назовите это так:
layout.SetDrawingEffect(myBrush.NativePointer, new TextRange(1, 5));