Pergunta

Quero usar o DirectWrite para formatação de texto de cor mista (destaque da sintaxe, para ser mais preciso), mas não consigo encontrar uma maneira de fazê-lo, seja nas opções de layout ou tipografia. A única opção é passar um pincel ao renderizar o texto, o que não funciona para mim, porque eu basicamente tenho apenas um layout. Ajuda!

Foi útil?

Solução

Usar IDWriteTextLayout::SetDrawingEffect para aplicar efeitos de desenho em subrange. Se você está usando DWRITE com D2D DrawTextLayout, o que parece que você é, então esse efeito de desenho seria apenas um pincel (como ID2D1Brush através da CreateSolidColorBrush ou um dos pincéis de gradiente). Se você implementou o seu próprio IDWriteTextRenderer por IDWriteTextLayout::Draw, então o efeito de desenho pode ser o que você interpreta. No IDWriteTextRenderer::DrawGlyphRun retorno de chamada, então você liga QueryInterface No parâmetro desenhado, ou se você tiver certeza de que é o seu próprio tipo, basta static_cast diretamente.

// ... create the colored brushes and determine where to draw ...
wchar_t const* text = L"Red Green";
dwriteFactory->CreateTextLayout(....., OUT &textLayout);

DWRITE_TEXT_RANGE textRange1 = {0,3}, textRange2 = {4,5};

textLayout->SetDrawingEffect(redBrush,  textRange1);
textLayout->SetDrawingEffect(greenBrush, textRange2);

renderer->DrawTextLayout(point, textLayout, defaultBrush);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top