Skip to content

Commit d3d0fab

Browse files
authored
Change IDWriteTextRenderer imlementation in DWriteCoreGallery to use DrawGlyphRunWithColorSupport and fix PREFast error. (#290)
1 parent f59aaa8 commit d3d0fab

File tree

2 files changed

+13
-82
lines changed

2 files changed

+13
-82
lines changed

Samples/TextRendering/cpp-win32/DWriteCoreGallery/TextRenderer.cpp

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation.
1+
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT license.
33

44
#include "Main.h"
@@ -221,90 +221,21 @@ HRESULT STDMETHODCALLTYPE TextRenderer::DrawGlyphRun(
221221
{
222222
try
223223
{
224-
OrientationTransform orentation(
224+
OrientationTransform orientation(
225225
this,
226226
orientationAngle,
227227
!!glyphRun->isSideways,
228228
D2D_POINT_2F{ baselineOriginX, baselineOriginY }
229229
);
230230

231-
HRESULT hr = DWRITE_E_NOCOLOR;
232-
wil::com_ptr<IDWriteColorGlyphRunEnumerator> colorLayers;
233-
234-
wil::com_ptr<IDWriteFontFace2> fontFace2;
235-
if (SUCCEEDED(glyphRun->fontFace->QueryInterface(&fontFace2)))
236-
{
237-
uint32_t paletteCount = fontFace2->GetColorPaletteCount();
238-
if (paletteCount > 0)
239-
{
240-
DWRITE_MATRIX transform;
241-
hr = m_renderTarget->GetCurrentTransform(&transform);
242-
if (FAILED(hr))
243-
{
244-
return hr;
245-
}
246-
247-
transform.m11 *= m_dpiScale;
248-
transform.m12 *= m_dpiScale;
249-
transform.m21 *= m_dpiScale;
250-
transform.m22 *= m_dpiScale;
251-
transform.dx *= m_dpiScale;
252-
transform.dy *= m_dpiScale;
253-
254-
// Perform color translation.
255-
// Fall back to the default palette if the current palette index is out of range.
256-
hr = g_factory->TranslateColorGlyphRun(
257-
baselineOriginX,
258-
baselineOriginY,
259-
glyphRun,
260-
nullptr,
261-
measuringMode,
262-
&transform,
263-
m_colorPaletteIndex < paletteCount ? m_colorPaletteIndex : 0,
264-
& colorLayers
265-
);
266-
}
267-
}
268-
269-
if (hr == DWRITE_E_NOCOLOR)
270-
{
271-
THROW_IF_FAILED(m_renderTarget->DrawGlyphRun(
272-
baselineOriginX,
273-
baselineOriginY,
274-
measuringMode,
275-
glyphRun,
276-
m_renderingParams.get(),
277-
m_textColor
278-
));
279-
}
280-
else
281-
{
282-
THROW_IF_FAILED(hr);
283-
284-
for (;;)
285-
{
286-
BOOL haveRun;
287-
THROW_IF_FAILED(colorLayers->MoveNext(&haveRun));
288-
if (!haveRun)
289-
{
290-
break;
291-
}
292-
293-
DWRITE_COLOR_GLYPH_RUN const* colorRun;
294-
THROW_IF_FAILED(colorLayers->GetCurrentRun(&colorRun));
295-
296-
COLORREF runColor = (colorRun->paletteIndex == 0xFFFF) ? m_textColor : ToCOLORREF(colorRun->runColor);
297-
298-
THROW_IF_FAILED(m_renderTarget->DrawGlyphRun(
299-
colorRun->baselineOriginX,
300-
colorRun->baselineOriginY,
301-
measuringMode,
302-
&colorRun->glyphRun,
303-
m_renderingParams.get(),
304-
runColor
305-
));
306-
}
307-
}
231+
RETURN_IF_FAILED(m_renderTarget->DrawGlyphRunWithColorSupport(
232+
baselineOriginX,
233+
baselineOriginY,
234+
measuringMode,
235+
glyphRun,
236+
m_renderingParams.get(),
237+
m_textColor
238+
));
308239

309240
return S_OK;
310241
}

Samples/TextRendering/cpp-win32/DWriteCoreGallery/TextRenderer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation.
1+
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT license.
33

44
#pragma once
@@ -147,13 +147,13 @@ class TextRenderer final : public IDWriteTextRenderer1
147147

148148
private:
149149
IDWriteBitmapRenderTarget1* m_renderTarget = nullptr;
150-
DWRITE_MATRIX m_oldTransform;
150+
DWRITE_MATRIX m_oldTransform = {};
151151
};
152152

153153
uint32_t m_refCount = 0;
154154
float m_dpiScale = 1.0f;
155155
wil::com_ptr<IDWriteRenderingParams> m_renderingParams;
156-
wil::com_ptr<IDWriteBitmapRenderTarget1> m_renderTarget;
156+
wil::com_ptr<IDWriteBitmapRenderTarget3> m_renderTarget;
157157
wil::com_ptr<IDWriteTextAnalyzer2> m_textAnalyzer;
158158
HDC m_targetHdc = nullptr;
159159
SIZE m_targetPixelSize = {};

0 commit comments

Comments
 (0)