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 }