port(2V0-b): EterPythonLib 窗口树实现 + EterLib 资源层
- port: PythonWindow/PythonSlotWindow/PythonGridSlotWindow/PythonWindowManager(布局/命中/事件/插槽渲染) - port: EterLib ReferenceObject/Resource/ResourceManager(资源引用与查找) - platform: EterLib Util、EterPythonLib PythonGraphic - tests: port.window_tree(需要解释器,不需要 40250 Client/pack) - 顺带补上 4 个缺失的 Godot .uid Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#include "StdAfx.h"
|
||||
#include "ReferenceObject.h"
|
||||
|
||||
CReferenceObject::CReferenceObject() : m_refCount(0), m_destructed(false)
|
||||
{
|
||||
}
|
||||
|
||||
CReferenceObject::~CReferenceObject()
|
||||
{
|
||||
}
|
||||
|
||||
void CReferenceObject::AddReference()
|
||||
{
|
||||
if (m_refCount == 0)
|
||||
OnConstruct();
|
||||
|
||||
++m_refCount;
|
||||
}
|
||||
|
||||
int CReferenceObject::GetReferenceCount()
|
||||
{
|
||||
return m_refCount;
|
||||
}
|
||||
|
||||
void CReferenceObject::AddReferenceOnly()
|
||||
{
|
||||
++m_refCount;
|
||||
}
|
||||
|
||||
void CReferenceObject::Release()
|
||||
{
|
||||
if (m_refCount > 1)
|
||||
{
|
||||
--m_refCount;
|
||||
return;
|
||||
}
|
||||
|
||||
assert(m_destructed == false);
|
||||
assert(m_refCount >= 0);
|
||||
m_refCount = 0;
|
||||
OnSelfDestruct();
|
||||
}
|
||||
|
||||
void CReferenceObject::OnConstruct()
|
||||
{
|
||||
m_destructed = false;
|
||||
}
|
||||
|
||||
void CReferenceObject::OnSelfDestruct()
|
||||
{
|
||||
m_destructed = true;
|
||||
delete this;
|
||||
}
|
||||
|
||||
bool CReferenceObject::canDestroy()
|
||||
{
|
||||
if (m_refCount > 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user