D2DState.h
 1  #pragma once
 2  
 3  #include <optional>
 4  #include <vector>
 5  
 6  #include <windef.h>
 7  
 8  #include "DxgiAPI.h"
 9  #include "PerGlyphOpacityTextRender.h"
10  
11  enum Brush : size_t
12  {
13      line,
14      foreground,
15      background,
16      border
17  };
18  
19  struct D2DState
20  {
21      const DxgiAPI* dxgiAPI = nullptr;
22  
23      DxgiWindowState dxgiWindowState;
24      winrt::com_ptr<ID2D1BitmapRenderTarget> bitmapRt;
25      winrt::com_ptr<IDWriteTextFormat> textFormat;
26      winrt::com_ptr<PerGlyphOpacityTextRender> textRenderer;
27      std::vector<winrt::com_ptr<ID2D1SolidColorBrush>> solidBrushes;
28      winrt::com_ptr<ID2D1Effect> shadowEffect;
29      winrt::com_ptr<ID2D1Effect> affineTransformEffect;
30  
31      float dpiScale = 1.f;
32  
33      D2DState(const DxgiAPI*,
34               HWND window,
35               std::vector<D2D1::ColorF> solidBrushesColors);
36      void DrawTextBox(const wchar_t* text,
37                       const size_t textLen,
38                       const size_t halfOpaqueSymbolPos[2],
39                       const D2D_POINT_2F center,
40                       const bool screenQuadrantAware,
41                       const HWND window) const;
42      void ToggleAliasedLinesMode(const bool enabled) const;
43  };