更新了ENode二维变换矩阵算法
This commit is contained in:
		
							parent
							
								
									489fa780ca
								
							
						
					
					
						commit
						1e24823452
					
				|  | @ -24,8 +24,8 @@ int WINAPI WinMain( | ||||||
| 		node2->setSize(40, 40); | 		node2->setSize(40, 40); | ||||||
| 		node->addChild(node2); | 		node->addChild(node2); | ||||||
| 
 | 
 | ||||||
| 		auto mlistener = new EMouseClickListener([](EPoint) { | 		auto mlistener = new EMouseClickListener([](EPoint p) { | ||||||
| 			EApp::getCurrentScene()->getChild(L"node1")->setPos(EMouseMsg::getPos()); | 			EApp::getCurrentScene()->getChild(L"node1")->setPos(p.x, p.y); | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
| 		mlistener->bindWith(node); | 		mlistener->bindWith(node); | ||||||
|  |  | ||||||
|  | @ -43,43 +43,40 @@ bool e2d::EApp::init(e2d::EString title, e2d::ESize size, bool bShowConsole /* = | ||||||
| { | { | ||||||
| 	return init(title, size.cx, size.cy, bShowConsole); | 	return init(title, size.cx, size.cy, bShowConsole); | ||||||
| } | } | ||||||
| #include <iostream> | 
 | ||||||
| bool e2d::EApp::init(e2d::EString title, UINT32 width, UINT32 height, bool bShowConsole /* = false */) | bool e2d::EApp::init(e2d::EString title, UINT32 width, UINT32 height, bool bShowConsole /* = false */) | ||||||
| { | { | ||||||
| 	HRESULT hr; | 	HRESULT hr; | ||||||
| 	hr = CoInitialize(NULL); | 	CoInitialize(NULL); | ||||||
| 
 | 
 | ||||||
| 	if (SUCCEEDED(hr)) | 	// 关闭控制台
 | ||||||
|  | 	if (bShowConsole) | ||||||
| 	{ | 	{ | ||||||
| 		// 关闭控制台
 | 		// 查找是否已经存在控制台
 | ||||||
| 		if (bShowConsole) | 		if (!GetConsoleWindow()) | ||||||
| 		{ | 		{ | ||||||
| 			// 查找是否已经存在控制台
 | 			// 显示一个新控制台
 | ||||||
| 			if (!GetConsoleWindow()) | 			if (AllocConsole()) | ||||||
| 			{ | 			{ | ||||||
| 				// 显示一个新控制台
 | 				FILE *stream; | ||||||
| 				if (AllocConsole()) | 				freopen_s(&stream, "CONOUT$", "w+t", stdout); | ||||||
| 				{ | 				freopen_s(&stream, "CONOUT$", "w+t", stderr); | ||||||
| 					FILE *stream; | 				freopen_s(&stream, "CONIN$", "r+t", stdin); | ||||||
| 					freopen_s(&stream, "CONOUT$", "w+t", stdout); | 			} | ||||||
| 					freopen_s(&stream, "CONOUT$", "w+t", stderr); | 			else | ||||||
| 					freopen_s(&stream, "CONIN$", "r+t", stdin); | 			{ | ||||||
| 				} | 				MessageBox(nullptr, L"Alloc Console Failed!", L"Error", MB_OK); | ||||||
| 				else |  | ||||||
| 				{ |  | ||||||
| 					MessageBox(nullptr, L"Alloc Console Failed!", L"Error", MB_OK); |  | ||||||
| 				} |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			FreeConsole(); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// 初始化 device-indpendent 资源
 |  | ||||||
| 		// 比如 Direct2D factory.
 |  | ||||||
| 		hr = _createDeviceIndependentResources(); |  | ||||||
| 	} | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		FreeConsole(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// 初始化 device-indpendent 资源
 | ||||||
|  | 	// 比如 Direct2D factory.
 | ||||||
|  | 	hr = _createDeviceIndependentResources(); | ||||||
| 
 | 
 | ||||||
| 	if (SUCCEEDED(hr)) | 	if (SUCCEEDED(hr)) | ||||||
| 	{ | 	{ | ||||||
|  | @ -194,6 +191,8 @@ void e2d::EApp::run() | ||||||
| 	_onControl(); | 	_onControl(); | ||||||
| 	// 释放所有内存占用
 | 	// 释放所有内存占用
 | ||||||
| 	free(); | 	free(); | ||||||
|  | 
 | ||||||
|  | 	CoUninitialize(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EApp::_mainLoop() | void e2d::EApp::_mainLoop() | ||||||
|  | @ -262,8 +261,6 @@ void e2d::EApp::_onRender() | ||||||
| 	{ | 	{ | ||||||
| 		GetRenderTarget()->BeginDraw(); | 		GetRenderTarget()->BeginDraw(); | ||||||
| 
 | 
 | ||||||
| 		GetRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity()); |  | ||||||
| 
 |  | ||||||
| 		GetRenderTarget()->Clear(D2D1::ColorF(m_ClearColor)); | 		GetRenderTarget()->Clear(D2D1::ColorF(m_ClearColor)); | ||||||
| 
 | 
 | ||||||
| 		m_pCurrentScene->_onRender();	// 绘制当前场景
 | 		m_pCurrentScene->_onRender();	// 绘制当前场景
 | ||||||
|  |  | ||||||
|  | @ -18,6 +18,8 @@ void e2d::EScene::_onRender() | ||||||
| { | { | ||||||
| 	this->_sortChildren(); | 	this->_sortChildren(); | ||||||
| 
 | 
 | ||||||
|  | 	GetRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity()); | ||||||
|  | 
 | ||||||
| 	// 访问所有节点
 | 	// 访问所有节点
 | ||||||
| 	for (auto child : m_vChildren) | 	for (auto child : m_vChildren) | ||||||
| 	{ | 	{ | ||||||
|  |  | ||||||
|  | @ -4,6 +4,18 @@ | ||||||
| 
 | 
 | ||||||
| e2d::ENode::ENode() | e2d::ENode::ENode() | ||||||
| 	: m_nOrder(0) | 	: m_nOrder(0) | ||||||
|  | 	, m_fPosX(0) | ||||||
|  | 	, m_fPosY(0) | ||||||
|  | 	, m_fWidth(0) | ||||||
|  | 	, m_fHeight(0) | ||||||
|  | 	, m_fScaleX(1) | ||||||
|  | 	, m_fScaleY(1) | ||||||
|  | 	, m_fRotation(0) | ||||||
|  | 	, m_fSkewAngleX(0) | ||||||
|  | 	, m_fSkewAngleY(0) | ||||||
|  | 	, m_fDisplayOpacity(1) | ||||||
|  | 	, m_fRealOpacity(1) | ||||||
|  | 	, m_Matri(D2D1::Matrix3x2F::Identity()) | ||||||
| 	, m_bVisiable(true) | 	, m_bVisiable(true) | ||||||
| 	, m_pParent(nullptr) | 	, m_pParent(nullptr) | ||||||
| 	, m_pParentScene(nullptr) | 	, m_pParentScene(nullptr) | ||||||
|  | @ -52,6 +64,7 @@ void e2d::ENode::callOn() | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		GetRenderTarget()->SetTransform(m_Matri); | ||||||
| 		// 渲染自身
 | 		// 渲染自身
 | ||||||
| 		this->_onRender(); | 		this->_onRender(); | ||||||
| 
 | 
 | ||||||
|  | @ -61,6 +74,7 @@ void e2d::ENode::callOn() | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
|  | 		GetRenderTarget()->SetTransform(m_Matri); | ||||||
| 		// 渲染自身
 | 		// 渲染自身
 | ||||||
| 		this->_onRender(); | 		this->_onRender(); | ||||||
| 	} | 	} | ||||||
|  | @ -70,10 +84,6 @@ void e2d::ENode::_onRender() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ENode::_onTransfrom() |  | ||||||
| { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::_sortChildren() | void e2d::ENode::_sortChildren() | ||||||
| { | { | ||||||
| 	if (m_bSortNeeded) | 	if (m_bSortNeeded) | ||||||
|  | @ -95,15 +105,18 @@ void e2d::ENode::_transfrom() | ||||||
| { | { | ||||||
| 	if (m_bTransformNeeded) | 	if (m_bTransformNeeded) | ||||||
| 	{ | 	{ | ||||||
| 		// 更新自身属性
 | 		// ¶þά¾ØÐα任
 | ||||||
|  | 		m_Matri = D2D1::Matrix3x2F::Identity(); | ||||||
|  | 		m_Matri = m_Matri.Translation(m_fPosX, m_fPosY); | ||||||
|  | 		m_Matri = m_Matri.Rotation(m_fRotation); | ||||||
|  | 		m_Matri = m_Matri.Scale(m_fScaleX, m_fScaleY); | ||||||
|  | 		m_Matri = m_Matri.Skew(m_fSkewAngleX, m_fSkewAngleY); | ||||||
|  | 		 | ||||||
| 		if (m_pParent) | 		if (m_pParent) | ||||||
| 		{ | 		{ | ||||||
| 			this->setPos(m_pParent->getX() + m_Pos.x, m_pParent->getY() + m_Pos.y); | 			//m_Matri.SetProduct()
 | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// 根据子节点特殊性进行更新
 |  | ||||||
| 		_onTransfrom(); |  | ||||||
| 
 |  | ||||||
| 		// 提示子节点更新属性
 | 		// 提示子节点更新属性
 | ||||||
| 		for (const auto &child : m_vChildren) | 		for (const auto &child : m_vChildren) | ||||||
| 		{ | 		{ | ||||||
|  | @ -119,115 +132,54 @@ bool e2d::ENode::isVisiable() const | ||||||
| 	return m_bVisiable; | 	return m_bVisiable; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int e2d::ENode::getX() const | float e2d::ENode::getX() const | ||||||
| { | { | ||||||
| 	return m_Rect.TopLeft().x; | 	return m_fPosX; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int e2d::ENode::getY() const | float e2d::ENode::getY() const | ||||||
| { | { | ||||||
| 	return m_Rect.TopLeft().y; | 	return m_fPosY; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| CPoint e2d::ENode::getPos() const | float e2d::ENode::getWidth() const | ||||||
| { | { | ||||||
| 	return m_Rect.TopLeft(); | 	return m_fWidth; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| UINT32 e2d::ENode::getWidth() const | float e2d::ENode::getHeight() const | ||||||
| { | { | ||||||
| 	return UINT32(m_Rect.Size().cx); | 	return m_fHeight; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| UINT32 e2d::ENode::getHeight() const | float e2d::ENode::getScaleX() const | ||||||
| { | { | ||||||
| 	return UINT32(m_Rect.Size().cy); | 	return m_fScaleX; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ESize e2d::ENode::getSize() const | float e2d::ENode::getScaleY() const | ||||||
| { | { | ||||||
| 	return e2d::ESize(m_Rect.Size()); | 	return m_fScaleY; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ERect e2d::ENode::getRect() const | float e2d::ENode::getSkewX() const | ||||||
| { | { | ||||||
| 	return e2d::ERect(m_Rect); | 	return m_fSkewAngleX; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ENode::setX(int x) | float e2d::ENode::getSkewY() const | ||||||
| { | { | ||||||
| 	this->setPos(x, m_Rect.TopLeft().y); | 	return m_fSkewAngleY; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ENode::setY(int y) | float e2d::ENode::getRotation() const | ||||||
| { | { | ||||||
| 	this->setPos(m_Rect.TopLeft().x, y); | 	return m_fRotation; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::ENode::setPos(EPoint p) | float e2d::ENode::getOpacity() const | ||||||
| { | { | ||||||
| 	this->setPos(p.x, p.y); | 	return m_fDisplayOpacity; | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setPos(int x, int y) |  | ||||||
| { |  | ||||||
| 	if (getX() == x && getY() == y) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	if (!m_bTransformNeeded) |  | ||||||
| 	{ |  | ||||||
| 		m_Pos.x = x; |  | ||||||
| 		m_Pos.y = y; |  | ||||||
| 		m_bTransformNeeded = true; |  | ||||||
| 	} |  | ||||||
| 	m_Rect.MoveToXY(x, y); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::move(int x, int y) |  | ||||||
| { |  | ||||||
| 	m_Rect.OffsetRect(x, y); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::move(EVector v) |  | ||||||
| { |  | ||||||
| 	m_Rect.OffsetRect(v); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setWidth(UINT32 width) |  | ||||||
| { |  | ||||||
| 	m_Rect.BottomRight().x = m_Rect.TopLeft().x + width; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setHeight(UINT32 height) |  | ||||||
| { |  | ||||||
| 	m_Rect.BottomRight().y = m_Rect.TopLeft().y + height; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setSize(UINT32 width, UINT32 height) |  | ||||||
| { |  | ||||||
| 	m_Rect.BottomRight().x = m_Rect.TopLeft().x + width; |  | ||||||
| 	m_Rect.BottomRight().y = m_Rect.TopLeft().y + height; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setSize(ESize size) |  | ||||||
| { |  | ||||||
| 	this->setSize(size.cx, size.cy); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setRect(int x1, int y1, int x2, int y2) |  | ||||||
| { |  | ||||||
| 	m_Rect.SetRect(x1, y1, x2, y2); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setRect(EPoint leftTop, EPoint rightBottom) |  | ||||||
| { |  | ||||||
| 	m_Rect.TopLeft() = leftTop; |  | ||||||
| 	m_Rect.BottomRight() = rightBottom; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ENode::setRect(ERect rect) |  | ||||||
| { |  | ||||||
| 	m_Rect = rect; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int e2d::ENode::getOrder() const | int e2d::ENode::getOrder() const | ||||||
|  | @ -240,6 +192,113 @@ void e2d::ENode::setOrder(int order) | ||||||
| 	m_nOrder = order; | 	m_nOrder = order; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void e2d::ENode::setX(float x) | ||||||
|  | { | ||||||
|  | 	this->setPos(x, m_fPosY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setY(float y) | ||||||
|  | { | ||||||
|  | 	this->setPos(m_fPosX, y); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setPos(float x, float y) | ||||||
|  | { | ||||||
|  | 	if (m_fPosX == x && m_fPosY == y) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	//m_Matri.Translation(x, y);
 | ||||||
|  | 	m_fPosX = x; | ||||||
|  | 	m_fPosY = y; | ||||||
|  | 	m_bTransformNeeded = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::move(float x, float y) | ||||||
|  | { | ||||||
|  | 	this->setPos(m_fPosX + x, m_fPosY + y); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setWidth(float width) | ||||||
|  | { | ||||||
|  | 	this->setSize(width, m_fHeight); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setHeight(float height) | ||||||
|  | { | ||||||
|  | 	this->setSize(m_fWidth, height); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setSize(float width, float height) | ||||||
|  | { | ||||||
|  | 	if (m_fWidth == width && m_fHeight == height) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	m_fWidth = width; | ||||||
|  | 	m_fHeight = height; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setScaleX(float scaleX) | ||||||
|  | { | ||||||
|  | 	this->setScale(scaleX, m_fScaleY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setScaleY(float scaleY) | ||||||
|  | { | ||||||
|  | 	this->setScale(m_fScaleX, scaleY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setScale(float scale) | ||||||
|  | { | ||||||
|  | 	this->setScale(scale, scale); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setScale(float scaleX, float scaleY) | ||||||
|  | { | ||||||
|  | 	if (m_fScaleX == scaleX && m_fScaleY == scaleY) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	//m_Matri.Scale(scaleX, scaleY);
 | ||||||
|  | 	m_fScaleX = scaleX; | ||||||
|  | 	m_fScaleY = scaleY; | ||||||
|  | 	m_bTransformNeeded = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setSkewX(float angleX) | ||||||
|  | { | ||||||
|  | 	this->setSkew(angleX, m_fSkewAngleY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setSkewY(float angleY) | ||||||
|  | { | ||||||
|  | 	this->setSkew(m_fSkewAngleX, angleY); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setSkew(float angleX, float angleY) | ||||||
|  | { | ||||||
|  | 	if (m_fSkewAngleX == angleX && m_fSkewAngleY == angleY) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	//m_Matri.Skew(angleX, angleY);
 | ||||||
|  | 	m_fSkewAngleX = angleX; | ||||||
|  | 	m_fSkewAngleY = angleY; | ||||||
|  | 	m_bTransformNeeded = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setRotation(float angle) | ||||||
|  | { | ||||||
|  | 	if (m_fRotation == angle) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	//m_Matri.Rotation(angle);
 | ||||||
|  | 	m_fRotation = angle; | ||||||
|  | 	m_bTransformNeeded = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ENode::setOpacity(float opacity) | ||||||
|  | { | ||||||
|  | 	m_fDisplayOpacity = m_fRealOpacity = opacity; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::ENode::setParent(ENode * parent) | void e2d::ENode::setParent(ENode * parent) | ||||||
| { | { | ||||||
| 	if (m_pParent) | 	if (m_pParent) | ||||||
|  |  | ||||||
|  | @ -2,18 +2,23 @@ | ||||||
| #include "..\Win\winbase.h" | #include "..\Win\winbase.h" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | e2d::ERectangle::ERectangle() | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::EColor::Enum e2d::ERectangle::getColor() const | ||||||
|  | { | ||||||
|  | 	return m_Color; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void e2d::ERectangle::setColor(EColor::Enum color) | ||||||
|  | { | ||||||
|  | 	m_Color = color; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::ERectangle::_onRender() | void e2d::ERectangle::_onRender() | ||||||
| { | { | ||||||
| 	static D2D1_RECT_F rectangle = D2D1::RectF( | 	D2D1_RECT_F rectangle = D2D1::RectF(0, 0, m_fWidth, m_fHeight); | ||||||
| 		m_Rect.left, | 	GetSolidColorBrush()->SetColor(D2D1::ColorF(m_Color, m_fDisplayOpacity)); | ||||||
| 		m_Rect.top, | 	GetRenderTarget()->FillRectangle(&rectangle, GetSolidColorBrush()); | ||||||
| 		m_Rect.right, |  | ||||||
| 		m_Rect.bottom |  | ||||||
| 	); |  | ||||||
| 	GetRenderTarget()->FillRectangle(&rectangle, GetSolidColorBrush(D2D1::ColorF(D2D1::ColorF::LightSlateGray))); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::ERectangle::_onTransfrom() |  | ||||||
| { |  | ||||||
| 	 |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,4 @@ | ||||||
| #include "winbase.h" | #include "winbase.h" | ||||||
| #include "..\emacros.h" |  | ||||||
| 
 | 
 | ||||||
| HWND hwnd = nullptr; | HWND hwnd = nullptr; | ||||||
| ID2D1Factory * pDirect2dFactory = nullptr; | ID2D1Factory * pDirect2dFactory = nullptr; | ||||||
|  | @ -22,9 +21,12 @@ ID2D1HwndRenderTarget * &GetRenderTarget() | ||||||
| 	return pRenderTarget; | 	return pRenderTarget; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ID2D1SolidColorBrush *& GetSolidColorBrush(D2D1_COLOR_F & color) | ID2D1SolidColorBrush *& GetSolidColorBrush() | ||||||
| { | { | ||||||
| 	pRenderTarget->CreateSolidColorBrush(color, &m_pSolidBrush); | 	if (!m_pSolidBrush) | ||||||
|  | 	{ | ||||||
|  | 		pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White), &m_pSolidBrush); | ||||||
|  | 	} | ||||||
| 	return m_pSolidBrush; | 	return m_pSolidBrush; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,6 +5,8 @@ | ||||||
| #include <dwrite.h> | #include <dwrite.h> | ||||||
| #include <wincodec.h> | #include <wincodec.h> | ||||||
| #pragma comment(lib, "d2d1.lib") | #pragma comment(lib, "d2d1.lib") | ||||||
|  | #pragma comment(lib, "dwrite.lib") | ||||||
|  | //#pragma comment(lib, "wincodec.lib")
 | ||||||
| 
 | 
 | ||||||
| HWND &GetHWnd(); | HWND &GetHWnd(); | ||||||
| 
 | 
 | ||||||
|  | @ -12,7 +14,7 @@ ID2D1Factory * &GetFactory(); | ||||||
| 
 | 
 | ||||||
| ID2D1HwndRenderTarget * &GetRenderTarget(); | ID2D1HwndRenderTarget * &GetRenderTarget(); | ||||||
| 
 | 
 | ||||||
| ID2D1SolidColorBrush * &GetSolidColorBrush(D2D1_COLOR_F &color); | ID2D1SolidColorBrush * &GetSolidColorBrush(); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| template<class Interface> | template<class Interface> | ||||||
|  |  | ||||||
							
								
								
									
										160
									
								
								Easy2D/enodes.h
								
								
								
								
							
							
						
						
									
										160
									
								
								Easy2D/enodes.h
								
								
								
								
							|  | @ -1,5 +1,6 @@ | ||||||
| #pragma once | #pragma once | ||||||
| #include "ebase.h" | #include "ebase.h" | ||||||
|  | #include "Win\winbase.h" | ||||||
| 
 | 
 | ||||||
| namespace e2d  | namespace e2d  | ||||||
| { | { | ||||||
|  | @ -23,25 +24,34 @@ public: | ||||||
| 	virtual int getOrder() const; | 	virtual int getOrder() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取节点横坐标
 | 	// 获取节点横坐标
 | ||||||
| 	virtual int getX() const; | 	virtual float getX() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取节点纵坐标
 | 	// 获取节点纵坐标
 | ||||||
| 	virtual int getY() const; | 	virtual float getY() const; | ||||||
| 
 |  | ||||||
| 	// 获取节点坐标
 |  | ||||||
| 	virtual EPoint getPos() const; |  | ||||||
| 
 | 
 | ||||||
| 	// 获取节点宽度
 | 	// 获取节点宽度
 | ||||||
| 	virtual UINT32 getWidth() const; | 	virtual float getWidth() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取节点高度
 | 	// 获取节点高度
 | ||||||
| 	virtual UINT32 getHeight() const; | 	virtual float getHeight() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取节点大小
 | 	// 获取节点横向缩放倍数
 | ||||||
| 	virtual ESize getSize() const; | 	virtual float getScaleX() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取节点所在的矩形
 | 	// 获取节点纵向缩放倍数
 | ||||||
| 	virtual ERect getRect() const; | 	virtual float getScaleY() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取节点横向倾斜角度
 | ||||||
|  | 	virtual float getSkewX() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取节点纵向倾斜角度
 | ||||||
|  | 	virtual float getSkewY() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取节点旋转角度
 | ||||||
|  | 	virtual float getRotation() const; | ||||||
|  | 
 | ||||||
|  | 	// 获取节点透明度
 | ||||||
|  | 	virtual float getOpacity() const; | ||||||
| 
 | 
 | ||||||
| 	// 获取父节点
 | 	// 获取父节点
 | ||||||
| 	virtual ENode * getParent() const; | 	virtual ENode * getParent() const; | ||||||
|  | @ -78,74 +88,40 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// 设置节点横坐标
 | 	// 设置节点横坐标
 | ||||||
| 	virtual void setX( | 	virtual void setX( | ||||||
| 		int x | 		float x | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点纵坐标
 | 	// 设置节点纵坐标
 | ||||||
| 	virtual void setY( | 	virtual void setY( | ||||||
| 		int y | 		float y | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点坐标
 | 	// 设置节点坐标
 | ||||||
| 	virtual void setPos( | 	virtual void setPos( | ||||||
| 		int x,  | 		float x, | ||||||
| 		int y | 		float y | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置节点坐标
 |  | ||||||
| 	virtual void setPos( |  | ||||||
| 		EPoint p |  | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 移动节点
 | 	// 移动节点
 | ||||||
| 	virtual void move( | 	virtual void move( | ||||||
| 		int x,  | 		float x, | ||||||
| 		int y | 		float y | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 移动节点
 |  | ||||||
| 	virtual void move( |  | ||||||
| 		EVector v |  | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点宽度
 | 	// 设置节点宽度
 | ||||||
| 	virtual void setWidth( | 	virtual void setWidth( | ||||||
| 		UINT32 width | 		float width | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点高度
 | 	// 设置节点高度
 | ||||||
| 	virtual void setHeight( | 	virtual void setHeight( | ||||||
| 		UINT32 height | 		float height | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点大小
 | 	// 设置节点大小
 | ||||||
| 	virtual void setSize( | 	virtual void setSize( | ||||||
| 		UINT32 width,  | 		float width, | ||||||
| 		UINT32 height | 		float height | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置节点大小
 |  | ||||||
| 	virtual void setSize( |  | ||||||
| 		ESize size |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置节点所在的矩形
 |  | ||||||
| 	virtual void setRect( |  | ||||||
| 		int x1,  |  | ||||||
| 		int y1,  |  | ||||||
| 		int x2,  |  | ||||||
| 		int y2 |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置节点所在的矩形
 |  | ||||||
| 	virtual void setRect( |  | ||||||
| 		EPoint leftTop,  |  | ||||||
| 		EPoint rightBottom |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	// 设置节点所在的矩形
 |  | ||||||
| 	virtual void setRect( |  | ||||||
| 		ERect rect |  | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 设置节点绘图顺序
 | 	// 设置节点绘图顺序
 | ||||||
|  | @ -153,6 +129,53 @@ public: | ||||||
| 		int order | 		int order | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
|  | 	// 设置横向缩放
 | ||||||
|  | 	virtual void setScaleX( | ||||||
|  | 		float scaleX | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置纵向缩放
 | ||||||
|  | 	virtual void setScaleY( | ||||||
|  | 		float scaleY | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置缩放
 | ||||||
|  | 	virtual void setScale( | ||||||
|  | 		float scaleX, | ||||||
|  | 		float scaleY | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置缩放
 | ||||||
|  | 	virtual void setScale( | ||||||
|  | 		float scale | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置横向倾斜角度
 | ||||||
|  | 	virtual void setSkewX( | ||||||
|  | 		float angleX | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置纵向倾斜角度
 | ||||||
|  | 	virtual void setSkewY( | ||||||
|  | 		float angleY | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置倾斜角度
 | ||||||
|  | 	virtual void setSkew( | ||||||
|  | 		float angleX, | ||||||
|  | 		float angleY | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置旋转角度
 | ||||||
|  | 	virtual void setRotation( | ||||||
|  | 		float rotation | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	// 设置透明度
 | ||||||
|  | 	virtual void setOpacity( | ||||||
|  | 		float opacity | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
| 	// 设置节点所在场景
 | 	// 设置节点所在场景
 | ||||||
| 	virtual void setParentScene( | 	virtual void setParentScene( | ||||||
| 		EScene * scene | 		EScene * scene | ||||||
|  | @ -193,9 +216,6 @@ protected: | ||||||
| 	// 渲染节点
 | 	// 渲染节点
 | ||||||
| 	virtual void _onRender(); | 	virtual void _onRender(); | ||||||
| 
 | 
 | ||||||
| 	// 节点状态转换
 |  | ||||||
| 	virtual void _onTransfrom(); |  | ||||||
| 
 |  | ||||||
| 	// 子节点排序
 | 	// 子节点排序
 | ||||||
| 	void _sortChildren(); | 	void _sortChildren(); | ||||||
| 
 | 
 | ||||||
|  | @ -205,12 +225,22 @@ protected: | ||||||
| protected: | protected: | ||||||
| 	EString		m_sName; | 	EString		m_sName; | ||||||
| 	size_t		m_nHashName; | 	size_t		m_nHashName; | ||||||
|  | 	float		m_fPosX; | ||||||
|  | 	float		m_fPosY; | ||||||
|  | 	float		m_fWidth; | ||||||
|  | 	float		m_fHeight; | ||||||
|  | 	float		m_fScaleX; | ||||||
|  | 	float		m_fScaleY; | ||||||
|  | 	float		m_fRotation; | ||||||
|  | 	float		m_fSkewAngleX; | ||||||
|  | 	float		m_fSkewAngleY; | ||||||
|  | 	float		m_fDisplayOpacity; | ||||||
|  | 	float		m_fRealOpacity; | ||||||
|  | 	D2D1::Matrix3x2F m_Matri; | ||||||
| 	int			m_nOrder; | 	int			m_nOrder; | ||||||
| 	bool		m_bVisiable; | 	bool		m_bVisiable; | ||||||
| 	bool		m_bSortNeeded; | 	bool		m_bSortNeeded; | ||||||
| 	bool		m_bTransformNeeded; | 	bool		m_bTransformNeeded; | ||||||
| 	ERect		m_Rect; |  | ||||||
| 	EPoint		m_Pos; |  | ||||||
| 	EScene *	m_pParentScene; | 	EScene *	m_pParentScene; | ||||||
| 	ENode *		m_pParent; | 	ENode *		m_pParent; | ||||||
| 	std::vector<ENode*> m_vChildren; | 	std::vector<ENode*> m_vChildren; | ||||||
|  | @ -220,10 +250,18 @@ protected: | ||||||
| class ERectangle : | class ERectangle : | ||||||
| 	public ENode | 	public ENode | ||||||
| { | { | ||||||
|  | public: | ||||||
|  | 	ERectangle(); | ||||||
|  | 
 | ||||||
|  | 	EColor::Enum getColor() const; | ||||||
|  | 
 | ||||||
|  | 	void setColor(EColor::Enum color); | ||||||
|  | 
 | ||||||
| protected: | protected: | ||||||
| 	virtual void _onRender() override; | 	virtual void _onRender() override; | ||||||
| 
 | 
 | ||||||
| 	virtual void _onTransfrom() override; | protected: | ||||||
|  | 	EColor::Enum m_Color; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
		Loading…
	
		Reference in New Issue