internal void ChildStateChanged(GObject child)
{
if (_buildingDisplayList)
return;
int cnt = _children.Count;
if (child is GGroup)
{
for (int i = 0; i < cnt; ++i)
{
GObject g = _children[i];
if (g.group == child)
ChildStateChanged(g);
}
return;
}
if (child.displayObject == null)
return;
if (child.finalVisible)
{
if (child.displayObject.parent == null)
{
if (_childrenRenderOrder == ChildrenRenderOrder.Ascent)
{
int index = 0;
for (int i = 0; i < cnt; i++)
{
GObject g = _children[i];
if (g == child)
break;
if (g.displayObject != null && g.displayObject.parent != null)
index++;
}
container.AddChildAt(child.displayObject, index);
}
else if (_childrenRenderOrder == ChildrenRenderOrder.Descent)
{
int index = 0;
for (int i = cnt - 1; i >= 0; i--)
{
GObject g = _children[i];
if (g == child)
break;
if (g.displayObject != null && g.displayObject.parent != null)
index++;
}
container.AddChildAt(child.displayObject, index);
}
else
{
container.AddChild(child.displayObject);
UpdateContext.OnBegin -= _buildDelegate;
UpdateContext.OnBegin += _buildDelegate;
}
}
}
else
{
if (child.displayObject.parent != null)
{
container.RemoveChild(child.displayObject);
if (_childrenRenderOrder == ChildrenRenderOrder.Arch)
{
UpdateContext.OnBegin -= _buildDelegate;
UpdateContext.OnBegin += _buildDelegate;
}
}
}
}