提交修改
This commit is contained in:
@@ -1,179 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FairyGUI.Utils
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class HtmlPageContext : IHtmlPageContext
|
||||
{
|
||||
Stack<IHtmlObject> _imagePool;
|
||||
Stack<IHtmlObject> _inputPool;
|
||||
Stack<IHtmlObject> _buttonPool;
|
||||
Stack<IHtmlObject> _selectPool;
|
||||
Stack<IHtmlObject> _linkPool;
|
||||
|
||||
static HtmlPageContext _inst;
|
||||
|
||||
public static HtmlPageContext inst
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_inst == null)
|
||||
_inst = new HtmlPageContext();
|
||||
return _inst;
|
||||
}
|
||||
}
|
||||
|
||||
static Transform _poolManager;
|
||||
|
||||
#if UNITY_2019_3_OR_NEWER
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
static void InitializeOnLoad()
|
||||
{
|
||||
_inst = null;
|
||||
_poolManager = null;
|
||||
}
|
||||
#endif
|
||||
|
||||
public HtmlPageContext()
|
||||
{
|
||||
_imagePool = new Stack<IHtmlObject>();
|
||||
_inputPool = new Stack<IHtmlObject>();
|
||||
_buttonPool = new Stack<IHtmlObject>();
|
||||
_selectPool = new Stack<IHtmlObject>();
|
||||
_linkPool = new Stack<IHtmlObject>();
|
||||
|
||||
if (Application.isPlaying && _poolManager == null)
|
||||
_poolManager = Stage.inst.CreatePoolManager("HtmlObjectPool");
|
||||
}
|
||||
|
||||
virtual public IHtmlObject CreateObject(RichTextField owner, HtmlElement element)
|
||||
{
|
||||
IHtmlObject ret = null;
|
||||
bool fromPool = false;
|
||||
if (element.type == HtmlElementType.Image)
|
||||
{
|
||||
if (_imagePool.Count > 0 && _poolManager != null)
|
||||
{
|
||||
ret = _imagePool.Pop();
|
||||
fromPool = true;
|
||||
}
|
||||
else
|
||||
ret = new HtmlImage();
|
||||
}
|
||||
else if (element.type == HtmlElementType.Link)
|
||||
{
|
||||
if (_linkPool.Count > 0 && _poolManager != null)
|
||||
{
|
||||
ret = _linkPool.Pop();
|
||||
fromPool = true;
|
||||
}
|
||||
else
|
||||
ret = new HtmlLink();
|
||||
}
|
||||
else if (element.type == HtmlElementType.Input)
|
||||
{
|
||||
string type = element.GetString("type");
|
||||
if (type != null)
|
||||
type = type.ToLower();
|
||||
if (type == "button" || type == "submit")
|
||||
{
|
||||
if (_buttonPool.Count > 0 && _poolManager != null)
|
||||
{
|
||||
ret = _buttonPool.Pop();
|
||||
fromPool = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (HtmlButton.resource != null)
|
||||
ret = new HtmlButton();
|
||||
else
|
||||
Debug.LogWarning("FairyGUI: Set HtmlButton.resource first");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_inputPool.Count > 0 && _poolManager != null)
|
||||
{
|
||||
ret = _inputPool.Pop();
|
||||
fromPool = true;
|
||||
}
|
||||
else
|
||||
ret = new HtmlInput();
|
||||
}
|
||||
}
|
||||
else if (element.type == HtmlElementType.Select)
|
||||
{
|
||||
if (_selectPool.Count > 0 && _poolManager != null)
|
||||
{
|
||||
ret = _selectPool.Pop();
|
||||
fromPool = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (HtmlSelect.resource != null)
|
||||
ret = new HtmlSelect();
|
||||
else
|
||||
Debug.LogWarning("FairyGUI: Set HtmlSelect.resource first");
|
||||
}
|
||||
}
|
||||
|
||||
//Debug.Log("from=" + fromPool);
|
||||
if (ret != null)
|
||||
{
|
||||
//可能已经被GameObject tree deleted了,不再使用
|
||||
if (fromPool && ret.displayObject != null && ret.displayObject.isDisposed)
|
||||
{
|
||||
ret.Dispose();
|
||||
return CreateObject(owner, element);
|
||||
|
||||
}
|
||||
ret.Create(owner, element);
|
||||
if (ret.displayObject != null)
|
||||
ret.displayObject.home = owner.cachedTransform;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
virtual public void FreeObject(IHtmlObject obj)
|
||||
{
|
||||
if (_poolManager == null)
|
||||
{
|
||||
obj.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
//可能已经被GameObject tree deleted了,不再回收
|
||||
if (obj.displayObject != null && obj.displayObject.isDisposed)
|
||||
{
|
||||
obj.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
obj.Release();
|
||||
if (obj is HtmlImage)
|
||||
_imagePool.Push(obj);
|
||||
else if (obj is HtmlInput)
|
||||
_inputPool.Push(obj);
|
||||
else if (obj is HtmlButton)
|
||||
_buttonPool.Push(obj);
|
||||
else if (obj is HtmlLink)
|
||||
_linkPool.Push(obj);
|
||||
|
||||
if (obj.displayObject != null)
|
||||
obj.displayObject.cachedTransform.SetParent(_poolManager, false);
|
||||
}
|
||||
|
||||
virtual public NTexture GetImageTexture(HtmlImage image)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
virtual public void FreeImageTexture(HtmlImage image, NTexture texture)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user