2009-11-01 10 views
5

Quiero usar DirectWrite para el formato mixto color del texto (el resaltado de sintaxis, para ser exactos), pero parece que no puede encontrar una manera de hacerlo, ya sea en las opciones de Distribución o la tipografía. La única opción es pasar un Pincel cuando renderizo el texto, lo que no funciona para mí porque básicamente tengo solo un Diseño. ¡Ayuda!¿Cómo puedo renderizar texto de color mixto en DirectWrite?

Respuesta

8

Uso IDWriteTextLayout::SetDrawingEffect para aplicar efectos en subintervalos dibujo. Si está utilizando dwrite con D2D DrawTextLayout, que suena como si es así, entonces tal efecto dibujo sería más que un cepillo (como ID2D1Brush través CreateSolidColorBrush o uno de los cepillos de gradiente). Si ha implementado su propio IDWriteTextRenderer para IDWriteTextLayout::Draw, entonces el efecto de dibujo puede ser lo que interpreta que sea. En el IDWriteTextRenderer::DrawGlyphRun de devolución de llamada, a continuación, llama QueryInterface en el parámetro drawingEffect, o si está seguro de que es su propio tipo, simplemente static_cast directamente.

// ... 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); 
Cuestiones relacionadas