Magic_Game/Easy2D/Node/EFont.cpp

92 lines
1.7 KiB
C++

#include "..\enodes.h"
#include "..\Win\winbase.h"
e2d::EFont::EFont()
: m_pTextFormat(nullptr)
, m_fFontSize(22)
, m_FontWeight(EFontWeight::REGULAR)
, m_bItalic(false)
, m_bRecreateNeeded(true)
{
}
e2d::EFont::EFont(EString fontFamily, float fontSize, EFontWeight fontWeight, bool italic)
{
this->setFamily(fontFamily);
this->setSize(fontSize);
this->setWeight(fontWeight);
this->setItalic(italic);
}
e2d::EFont::~EFont()
{
SafeReleaseInterface(&m_pTextFormat);
}
float e2d::EFont::getFontSize() const
{
return m_fFontSize;
}
e2d::EFontWeight e2d::EFont::getFontWeight() const
{
return m_FontWeight;
}
bool e2d::EFont::isItalic() const
{
return m_bItalic;
}
void e2d::EFont::setFamily(EString fontFamily)
{
m_sFontFamily = fontFamily;
m_bRecreateNeeded = true;
}
void e2d::EFont::setSize(float fontSize)
{
m_fFontSize = fontSize;
m_bRecreateNeeded = true;
}
void e2d::EFont::setWeight(EFontWeight fontWeight)
{
m_FontWeight = fontWeight;
m_bRecreateNeeded = true;
}
void e2d::EFont::setItalic(bool value)
{
m_bItalic = value;
m_bRecreateNeeded = true;
}
void e2d::EFont::_initTextFormat()
{
SafeReleaseInterface(&m_pTextFormat);
HRESULT hr = GetDirectWriteFactory()->CreateTextFormat(
m_sFontFamily.c_str(),
NULL, // Font collection(NULL sets it to the system font collection)
DWRITE_FONT_WEIGHT(m_FontWeight.value),
m_bItalic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
m_fFontSize,
L"en-us", // Local
&m_pTextFormat
);
ASSERT(SUCCEEDED(hr), "Create IDWriteTextFormat Failed!");
}
IDWriteTextFormat * e2d::EFont::_getTextFormat()
{
if (m_bRecreateNeeded)
{
_initTextFormat();
m_bRecreateNeeded = false;
}
return m_pTextFormat;
}