| 
									
										
										
										
											2018-04-02 23:01:38 +08:00
										 |  |  |  | #include "..\enode.h"
 | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | e2d::Text::Text() | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	: m_bWrappingEnable(false) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_Font() | 
					
						
							|  |  |  |  | 	, m_nAlign(TextAlign::LEFT) | 
					
						
							|  |  |  |  | 	, m_fLineSpacing(0.0f) | 
					
						
							|  |  |  |  | 	, m_fWrappingWidth(0.0f) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	, m_pDWriteTextLayout(nullptr) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_pDWriteTextFormat(nullptr) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | e2d::Text::Text(String text) | 
					
						
							|  |  |  |  | 	: m_bWrappingEnable(false) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_Font() | 
					
						
							|  |  |  |  | 	, m_nAlign(TextAlign::LEFT) | 
					
						
							|  |  |  |  | 	, m_fLineSpacing(0.0f) | 
					
						
							|  |  |  |  | 	, m_fWrappingWidth(0.0f) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	, m_pDWriteTextLayout(nullptr) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_pDWriteTextFormat(nullptr) | 
					
						
							|  |  |  |  | 	, m_sText(text) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	_reset(); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | e2d::Text::Text(Font font) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	: m_bWrappingEnable(false) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_Font(font) | 
					
						
							|  |  |  |  | 	, m_nAlign(TextAlign::LEFT) | 
					
						
							|  |  |  |  | 	, m_fLineSpacing(0.0f) | 
					
						
							|  |  |  |  | 	, m_fWrappingWidth(0.0f) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	, m_pDWriteTextLayout(nullptr) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_pDWriteTextFormat(nullptr) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	_reset(); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | e2d::Text::Text(String text, Font font) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	: m_bWrappingEnable(false) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_Font(font) | 
					
						
							|  |  |  |  | 	, m_nAlign(TextAlign::LEFT) | 
					
						
							|  |  |  |  | 	, m_fLineSpacing(0.0f) | 
					
						
							|  |  |  |  | 	, m_fWrappingWidth(0.0f) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	, m_pDWriteTextLayout(nullptr) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_pDWriteTextFormat(nullptr) | 
					
						
							|  |  |  |  | 	, m_sText(text) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	_reset(); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | e2d::Text::Text(String text, String fontFamily, double fontSize, UINT32 color, UINT32 fontWeight, bool italic, bool hasUnderline, bool hasStrikethrough) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	: m_bWrappingEnable(false) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_Font(Font(fontFamily, fontSize, color, fontWeight, italic, hasUnderline, hasStrikethrough)) | 
					
						
							|  |  |  |  | 	, m_nAlign(TextAlign::LEFT) | 
					
						
							|  |  |  |  | 	, m_fLineSpacing(0.0f) | 
					
						
							|  |  |  |  | 	, m_fWrappingWidth(0.0f) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	, m_pDWriteTextLayout(nullptr) | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	, m_pDWriteTextFormat(nullptr) | 
					
						
							|  |  |  |  | 	, m_sText(text) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	_reset(); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | e2d::Text::~Text() | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	SafeReleaseInterface(&m_pDWriteTextFormat); | 
					
						
							|  |  |  |  | 	SafeReleaseInterface(&m_pDWriteTextLayout); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | e2d::String e2d::Text::getText() const | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_sText; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | e2d::Font e2d::Text::getFont() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_Font; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::String e2d::Text::getFontFamily() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_Font.fontFamily; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | double e2d::Text::getFontSize() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_Font.size; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | UINT32 e2d::Text::getFontWeight() const | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	return m_Font.weight; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | UINT32 e2d::Text::getColor() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_Font.color; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool e2d::Text::isItalic() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_Font.italic; | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | void e2d::Text::setText(String text) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	m_sText = text; | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	_reset(); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | void e2d::Text::setFont(Font font) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	m_Font = font; | 
					
						
							|  |  |  |  | 	_reset(); | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | void e2d::Text::setFontFamily(String fontFamily) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_Font.fontFamily = fontFamily; | 
					
						
							|  |  |  |  | 	_reset(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setFontSize(double fontSize) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_Font.size = static_cast<float>(fontSize); | 
					
						
							|  |  |  |  | 	_reset(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setFontWeight(UINT32 fontWeight) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_Font.weight = fontWeight; | 
					
						
							|  |  |  |  | 	_reset(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setColor(UINT32 color) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_Font.color = color; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setItalic(bool value) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_Font.italic = value; | 
					
						
							|  |  |  |  | 	_reset(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setWrappingWidth(double fWrappingWidth) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_fWrappingWidth != fWrappingWidth) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		m_fWrappingWidth = max(static_cast<float>(fWrappingWidth), 0); | 
					
						
							| 
									
										
										
										
											2018-03-31 00:02:30 +08:00
										 |  |  |  | 		m_bWrappingEnable = (m_fWrappingWidth > FLT_MIN); | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		_reset(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | void e2d::Text::setLineSpacing(double fLineSpacing) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_fLineSpacing != fLineSpacing) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		m_fLineSpacing = static_cast<float>(fLineSpacing); | 
					
						
							|  |  |  |  | 		_reset(); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-01 23:08:11 +08:00
										 |  |  |  | void e2d::Text::setAlignment(int nAlign) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_nAlign != nAlign) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		m_nAlign = nAlign; | 
					
						
							|  |  |  |  | 		_reset(); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setUnderline(bool hasUnderline) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_Font.underline != hasUnderline) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		m_Font.underline = hasUnderline; | 
					
						
							|  |  |  |  | 		if (!m_pDWriteTextFormat) | 
					
						
							|  |  |  |  | 			_createFormat(); | 
					
						
							|  |  |  |  | 		_createLayout(); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::setStrikethrough(bool hasStrikethrough) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_Font.strikethrough != hasStrikethrough) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		m_Font.strikethrough = hasStrikethrough; | 
					
						
							|  |  |  |  | 		if (!m_pDWriteTextFormat) | 
					
						
							|  |  |  |  | 			_createFormat(); | 
					
						
							|  |  |  |  | 		_createLayout(); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | void e2d::Text::onRender() | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	D2D1_RECT_F textLayoutRect = D2D1::RectF(0, 0, m_fWidth, m_fHeight); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	// <20><><EFBFBD>û<EFBFBD>ˢ<EFBFBD><CBA2>ɫ<EFBFBD><C9AB><EFBFBD><CDB8><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	Renderer::getSolidColorBrush()->SetColor(D2D1::ColorF(m_Font.color, m_fDisplayOpacity)); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	if (m_pDWriteTextLayout) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		Renderer::getRenderTarget()->DrawTextLayout( | 
					
						
							| 
									
										
										
										
											2018-04-01 13:22:15 +08:00
										 |  |  |  | 			D2D1::Point2F(0, 0), | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 			m_pDWriteTextLayout, | 
					
						
							|  |  |  |  | 			Renderer::getSolidColorBrush() | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | void e2d::Text::_reset() | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>ʽ<EFBFBD><CABD>
 | 
					
						
							|  |  |  |  | 	_createFormat(); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
 | 
					
						
							|  |  |  |  | 	_createLayout(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::Text::_createFormat() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	SafeReleaseInterface(&m_pDWriteTextFormat); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	HRESULT hr = Renderer::getIDWriteFactory()->CreateTextFormat( | 
					
						
							|  |  |  |  | 		m_Font.fontFamily, | 
					
						
							|  |  |  |  | 		NULL, | 
					
						
							|  |  |  |  | 		DWRITE_FONT_WEIGHT(m_Font.weight), | 
					
						
							|  |  |  |  | 		m_Font.italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL, | 
					
						
							|  |  |  |  | 		DWRITE_FONT_STRETCH_NORMAL, | 
					
						
							|  |  |  |  | 		static_cast<float>(m_Font.size), | 
					
						
							|  |  |  |  | 		L"zh-cn", | 
					
						
							|  |  |  |  | 		&m_pDWriteTextFormat | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	ASSERT(SUCCEEDED(hr), "Create IDWriteTextFormat Failed!"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	if (m_pDWriteTextFormat) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6>뷽ʽ
 | 
					
						
							|  |  |  |  | 		m_pDWriteTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT(m_nAlign)); | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (m_fLineSpacing == 0.0f) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_pDWriteTextFormat->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, 0, 0); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_pDWriteTextFormat->SetLineSpacing( | 
					
						
							|  |  |  |  | 				DWRITE_LINE_SPACING_METHOD_UNIFORM, | 
					
						
							|  |  |  |  | 				m_fLineSpacing, | 
					
						
							|  |  |  |  | 				m_fLineSpacing * 0.8f | 
					
						
							|  |  |  |  | 			); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (m_bWrappingEnable) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_pDWriteTextFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_WRAP); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_pDWriteTextFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); | 
					
						
							|  |  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | void e2d::Text::_createLayout() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	SafeReleaseInterface(&m_pDWriteTextLayout); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ı<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	if (m_sText.isEmpty()) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		this->setSize(0, 0); | 
					
						
							|  |  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	if (m_pDWriteTextFormat == nullptr) | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 		WARN_IF(true, "Text::_createLayout failed! m_pDWriteTextFormat NULL pointer exception."); | 
					
						
							|  |  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	UINT32 length = static_cast<UINT32>(m_sText.getLength()); | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD> TextLayout
 | 
					
						
							|  |  |  |  | 	HRESULT hr; | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ı<EFBFBD><C4B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD>д<EFBFBD><D0B4><EFBFBD>
 | 
					
						
							|  |  |  |  | 	if (m_bWrappingEnable) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		hr = Renderer::getIDWriteFactory()->CreateTextLayout( | 
					
						
							|  |  |  |  | 			m_sText, | 
					
						
							|  |  |  |  | 			length, | 
					
						
							|  |  |  |  | 			m_pDWriteTextFormat, | 
					
						
							|  |  |  |  | 			m_fWrappingWidth, | 
					
						
							|  |  |  |  | 			0, | 
					
						
							|  |  |  |  | 			&m_pDWriteTextLayout | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 		if (m_pDWriteTextLayout) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// <20><>ȡ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ֵĿ<D6B5><C4BF>Ⱥ߶<CDB8>
 | 
					
						
							|  |  |  |  | 			DWRITE_TEXT_METRICS metrics; | 
					
						
							|  |  |  |  | 			m_pDWriteTextLayout->GetMetrics(&metrics); | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 			this->setSize(metrics.layoutWidth, metrics.height); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		hr = Renderer::getIDWriteFactory()->CreateTextLayout(m_sText, length, m_pDWriteTextFormat, 0, 0, &m_pDWriteTextLayout); | 
					
						
							|  |  |  |  | 		// Ϊ<><CEAA>ֹ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD>ݸղŴ<D5B2><C5B4><EFBFBD><EFBFBD><EFBFBD> layout <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (m_pDWriteTextLayout) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// <20><>ȡ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ֵĿ<D6B5><C4BF>Ⱥ߶<CDB8>
 | 
					
						
							|  |  |  |  | 			DWRITE_TEXT_METRICS metrics; | 
					
						
							|  |  |  |  | 			m_pDWriteTextLayout->GetMetrics(&metrics); | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 			this->setSize(metrics.width, metrics.height); | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD> layout
 | 
					
						
							|  |  |  |  | 			SafeReleaseInterface(&m_pDWriteTextLayout); | 
					
						
							|  |  |  |  | 			hr = Renderer::getIDWriteFactory()->CreateTextLayout(m_sText, length, m_pDWriteTextFormat, m_fWidth, 0, &m_pDWriteTextLayout); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	ASSERT(SUCCEEDED(hr), "Create IDWriteTextFormat Failed!"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB>ߺ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-04-01 13:28:32 +08:00
										 |  |  |  | 	DWRITE_TEXT_RANGE range = { 0, length }; | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_Font.underline) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-04-01 13:28:32 +08:00
										 |  |  |  | 		m_pDWriteTextLayout->SetUnderline(true, range); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-03-30 23:37:42 +08:00
										 |  |  |  | 	if (m_Font.strikethrough) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-04-01 13:28:32 +08:00
										 |  |  |  | 		m_pDWriteTextLayout->SetStrikethrough(true, range); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | } |