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 };