/ src / modules / ShortcutGuide / ShortcutGuide / d2d_text.cpp
d2d_text.cpp
 1  #include "pch.h"
 2  #include "d2d_text.h"
 3  
 4  D2DText::D2DText(float text_size, float scale)
 5  {
 6      winrt::check_hresult(DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(factory), reinterpret_cast<IUnknown**>(factory.put_void())));
 7      resize(text_size, scale);
 8      winrt::check_hresult(format->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER));
 9      winrt::check_hresult(format->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER));
10  }
11  
12  D2DText& D2DText::resize(float text_size, float scale)
13  {
14      format = nullptr;
15      winrt::check_hresult(factory->CreateTextFormat(L"Segoe UI",
16                                                     nullptr,
17                                                     DWRITE_FONT_WEIGHT_NORMAL,
18                                                     DWRITE_FONT_STYLE_NORMAL,
19                                                     DWRITE_FONT_STRETCH_NORMAL,
20                                                     text_size * scale,
21                                                     L"en-us",
22                                                     format.put()));
23      winrt::check_hresult(format->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER));
24      return *this;
25  }
26  
27  D2DText& D2DText::set_alignment_left()
28  {
29      winrt::check_hresult(format->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING));
30      return *this;
31  }
32  
33  D2DText& D2DText::set_alignment_center()
34  {
35      winrt::check_hresult(format->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER));
36      return *this;
37  }
38  
39  D2DText& D2DText::set_alignment_right()
40  {
41      winrt::check_hresult(format->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_TRAILING));
42      return *this;
43  }
44  
45  void D2DText::write(ID2D1DeviceContext5* d2d_dc, D2D1_COLOR_F color, D2D1_RECT_F rect, std::wstring text)
46  {
47      winrt::com_ptr<ID2D1SolidColorBrush> brush;
48      d2d_dc->CreateSolidColorBrush(color, brush.put());
49      d2d_dc->DrawText(text.c_str(),
50                       static_cast<UINT32>(text.length()),
51                       format.get(),
52                       rect,
53                       brush.get());
54  }