Split d2d integration into own class.

This commit is contained in:
jmsgrogan 2023-01-11 16:27:25 +00:00
parent 0d3674faac
commit 0c84a53643
25 changed files with 361 additions and 155 deletions

View file

@ -7,9 +7,10 @@
#include "FontGlyph.h"
#include "DirectXShaderProgram.h"
#include "TextData.h"
#include "TextData.h"
#include "SceneText.h"
#include "DirectX2dInterface.h"
#include "StringUtils.h"
#include "File.h"
@ -25,19 +26,24 @@ DirectXTextPainter::DirectXTextPainter()
}
void DirectXTextPainter::initialize(ID2D1DeviceContext2* d2dContext, IDWriteFactory* directWriteFactory)
void DirectXTextPainter::setD2dInterface(DirectX2dInterface* d2dIterface)
{
initializeBrush(d2dContext);
mD2dInterface = d2dIterface;
}
void DirectXTextPainter::initializeBrush(ID2D1DeviceContext2* d2dContext)
void DirectXTextPainter::initialize()
{
d2dContext->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black), &mTextBrush);
initializeBrush();
}
void DirectXTextPainter::updateTextFormat(IDWriteFactory* directWriteFactory, float fontSize)
void DirectXTextPainter::initializeBrush()
{
directWriteFactory->CreateTextFormat(
mD2dInterface->getContext()->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black), &mTextBrush);
}
void DirectXTextPainter::updateTextFormat(float fontSize)
{
mD2dInterface->getDirectWriteFactory()->CreateTextFormat(
L"Verdana",
NULL,
DWRITE_FONT_WEIGHT_NORMAL,
@ -51,19 +57,19 @@ void DirectXTextPainter::updateTextFormat(IDWriteFactory* directWriteFactory, fl
//mTextFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
}
void DirectXTextPainter::paint(SceneText* text, DrawingContext* context, ID2D1DeviceContext2* d2dContext, IDWriteFactory* directWriteFactory)
void DirectXTextPainter::paint(SceneText* text, DrawingContext* context)
{
const auto location = text->getTransform().getLocation();
D2D1_RECT_F textRect = D2D1::RectF(static_cast<float>(location.getX()), static_cast<float>(location.getY()), static_cast<float>(location.getX() + 200), static_cast<float>(location.getY() + 100));
updateTextFormat(directWriteFactory, static_cast<float>(text->getTextData().mFont.getSize()));
updateTextFormat(static_cast<float>(text->getTextData().mFont.getSize()));
auto content = StringUtils::convert(text->getTextData().mContent);
d2dContext->BeginDraw();
d2dContext->SetTransform(D2D1::Matrix3x2F::Identity());
d2dContext->DrawText(content.c_str(), static_cast<UINT32>(content.size()), mTextFormat.Get(), &textRect, mTextBrush.Get());
d2dContext->EndDraw();
mD2dInterface->getContext()->BeginDraw();
mD2dInterface->getContext()->SetTransform(D2D1::Matrix3x2F::Identity());
mD2dInterface->getContext()->DrawText(content.c_str(), static_cast<UINT32>(content.size()), mTextFormat.Get(), &textRect, mTextBrush.Get());
mD2dInterface->getContext()->EndDraw();
}