/ src / modules / MeasureTool / MeasureToolCore / PerGlyphOpacityTextRender.h
PerGlyphOpacityTextRender.h
 1  #pragma once
 2  
 3  #include <winrt/base.h>
 4  #include <wil/resource.h>
 5  #include <Windows.h>
 6  #include <dwrite.h>
 7  
 8  struct __declspec(uuid("{01557C9F-E3DD-4C28-AE64-E731EAB479CC}")) IDrawingEffect : IUnknown
 9  {
10  };
11  
12  struct OpacityEffect : winrt::implements<OpacityEffect, IDrawingEffect>
13  {
14      float alpha = 1.f;
15  };
16  
17  struct PerGlyphOpacityTextRender : winrt::implements<PerGlyphOpacityTextRender, IDWriteTextRenderer>
18  {
19      ID2D1Factory* _pD2DFactory = nullptr;
20      ID2D1RenderTarget* _rt = nullptr;
21      ID2D1SolidColorBrush* _baseBrush = nullptr;
22  
23      PerGlyphOpacityTextRender(
24          winrt::com_ptr<ID2D1Factory> pD2DFactory,
25          winrt::com_ptr<ID2D1RenderTarget> rt,
26          winrt::com_ptr<ID2D1SolidColorBrush> baseBrush);
27  
28      HRESULT __stdcall DrawGlyphRun(void* clientDrawingContext,
29                                     FLOAT baselineOriginX,
30                                     FLOAT baselineOriginY,
31                                     DWRITE_MEASURING_MODE measuringMode,
32                                     _In_ const DWRITE_GLYPH_RUN* glyphRun,
33                                     _In_ const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,
34                                     IUnknown* clientDrawingEffect) noexcept override;
35      HRESULT __stdcall DrawUnderline(void* clientDrawingContext,
36                                      FLOAT baselineOriginX,
37                                      FLOAT baselineOriginY,
38                                      _In_ const DWRITE_UNDERLINE* underline,
39                                      IUnknown* clientDrawingEffect) noexcept override;
40      HRESULT __stdcall DrawStrikethrough(void* clientDrawingContext,
41                                          FLOAT baselineOriginX,
42                                          FLOAT baselineOriginY,
43                                          _In_ const DWRITE_STRIKETHROUGH* strikethrough,
44                                          IUnknown* clientDrawingEffect) noexcept override;
45      HRESULT __stdcall DrawInlineObject(void* clientDrawingContext,
46                                         FLOAT originX,
47                                         FLOAT originY,
48                                         IDWriteInlineObject* inlineObject,
49                                         BOOL isSideways,
50                                         BOOL isRightToLeft,
51                                         IUnknown* clientDrawingEffect) noexcept override;
52      HRESULT __stdcall IsPixelSnappingDisabled(void* clientDrawingContext, BOOL* isDisabled) noexcept override;
53      HRESULT __stdcall GetCurrentTransform(void* clientDrawingContext, DWRITE_MATRIX* transform) noexcept override;
54      HRESULT __stdcall GetPixelsPerDip(void* clientDrawingContext, FLOAT* pixelsPerDip) noexcept override;
55  };