#include "DirectXTextPainter.h" #include "DrawingContext.h" #include "DrawingSurface.h" #include "FontsManager.h" #include "FontGlyph.h" #include "DirectXShaderProgram.h" #include "TextData.h" #include "SceneText.h" #include "DirectX2dInterface.h" #include "StringUtils.h" #include "File.h" #include #include #include #include DirectXTextPainter::DirectXTextPainter() { } void DirectXTextPainter::setD2dInterface(DirectX2dInterface* d2dIterface) { mD2dInterface = d2dIterface; mD2dInterface->getRenderTarget()->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black), &mTextBrush); } void DirectXTextPainter::updateTextFormat(const FontItem& font) { mD2dInterface->getDirectWriteFactory()->CreateTextFormat( StringUtils::convert(font.getFaceName()).c_str(), nullptr, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, static_cast(font.getSize()), L"en-us", &mTextFormat ); //mTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER); //mTextFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER); } void DirectXTextPainter::paint(SceneText* text, DrawingContext* context) { const auto location = text->getTransform().getLocation(); D2D1_RECT_F textRect = D2D1::RectF(static_cast(location.getX()), static_cast(location.getY()), static_cast(location.getX() + 200), static_cast(location.getY() + 100)); updateTextFormat(text->getTextData().mFont); auto content = StringUtils::convert(text->getTextData().mContent); mD2dInterface->getRenderTarget()->DrawText(content.c_str(), static_cast(content.size()), mTextFormat.Get(), &textRect, mTextBrush.Get()); }