STDMETHODIMP CCustomTextRenderer::XCustomTextRenderer::DrawGlyphRun(
void* pClientDrawingContext,
FLOAT fBaselineOriginX,
FLOAT fBaselineOriginY,
DWRITE_MEASURING_MODE measuringMode,
const DWRITE_GLYPH_RUN* pGlyphRun,
const DWRITE_GLYPH_RUN_DESCRIPTION* pGlyphRunDescription,
IUnknown* pClientDrawingEffect)
{
METHOD_PROLOGUE(CCustomTextRenderer, CustomTextRenderer);
CRenderTarget* pRenderTarget = pThis->GetRenderTarget();
ASSERT(pRenderTarget && pRenderTarget->IsValid());
CD2DPointF point(fBaselineOriginX, fBaselineOriginY);
CCustomEffect* pCustomEffect = static_cast<CCustomEffect*>(pClientDrawingContext);
if (NULL == pCustomEffect)
{
return _DrawDefaultGlyphRun(pRenderTarget, point, pGlyphRun, measuringMode);
}
HRESULT hr = E_FAIL;
switch (pCustomEffect->GetType())
{
case CustomEffectType::outlined_text:
hr = _DrawOutlinedGlyphRun(pRenderTarget,
dynamic_cast<COutlinedTextEffect*>(pCustomEffect),
point,
pGlyphRun,
measuringMode);
// ...
// may add other types of custom effects here
}
return hr;
}