64 lines
1.8 KiB
C++
64 lines
1.8 KiB
C++
#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 <windows.h>
|
|
|
|
#include <d2d1_3.h>
|
|
#include <d2d1_1.h>
|
|
#include <dwrite.h>
|
|
|
|
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<float>(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<float>(location.getX()), static_cast<float>(location.getY()), static_cast<float>(location.getX() + 200), static_cast<float>(location.getY() + 100));
|
|
|
|
updateTextFormat(text->getTextData().mFont);
|
|
|
|
auto content = StringUtils::convert(text->getTextData().mContent);
|
|
|
|
mD2dInterface->getRenderTarget()->DrawText(content.c_str(), static_cast<UINT32>(content.size()), mTextFormat.Get(), &textRect, mTextBrush.Get());
|
|
}
|
|
|
|
|
|
|