parent
76e5049023
commit
c97b4f8a99
|
@ -23,6 +23,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
private readonly List<Image> m_ImagesPool = new List<Image>();
|
private readonly List<Image> m_ImagesPool = new List<Image>();
|
||||||
private readonly List<GameObject> culled_ImagesPool = new List<GameObject>();
|
private readonly List<GameObject> culled_ImagesPool = new List<GameObject>();
|
||||||
private bool clearImages = false;
|
private bool clearImages = false;
|
||||||
|
private Object thisLock = new Object();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vertex Index
|
/// Vertex Index
|
||||||
|
@ -103,7 +104,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
iconList.Add(icon.name, icon.sprite);
|
iconList.Add(icon.name, icon.sprite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reset_m_HrefInfos();
|
Reset_m_HrefInfos ();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void UpdateQuadImage()
|
protected void UpdateQuadImage()
|
||||||
|
@ -133,12 +134,8 @@ namespace UnityEngine.UI.Extensions
|
||||||
var go = DefaultControls.CreateImage(resources);
|
var go = DefaultControls.CreateImage(resources);
|
||||||
go.layer = gameObject.layer;
|
go.layer = gameObject.layer;
|
||||||
var rt = go.transform as RectTransform;
|
var rt = go.transform as RectTransform;
|
||||||
|
|
||||||
if (rt)
|
if (rt)
|
||||||
{
|
{
|
||||||
rt.anchorMin = new Vector2(0, 1);
|
|
||||||
rt.anchorMax = new Vector2(0, 1);
|
|
||||||
rt.pivot = new Vector2(0.5f, 0.5f);
|
|
||||||
rt.SetParent(rectTransform);
|
rt.SetParent(rectTransform);
|
||||||
rt.localPosition = Vector3.zero;
|
rt.localPosition = Vector3.zero;
|
||||||
rt.localRotation = Quaternion.identity;
|
rt.localRotation = Quaternion.identity;
|
||||||
|
@ -150,7 +147,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
var spriteName = match.Groups[1].Value;
|
var spriteName = match.Groups[1].Value;
|
||||||
//var size = float.Parse(match.Groups[2].Value);
|
//var size = float.Parse(match.Groups[2].Value);
|
||||||
var img = m_ImagesPool[m_ImagesVertexIndex.Count - 1];
|
var img = m_ImagesPool[m_ImagesVertexIndex.Count - 1];
|
||||||
|
|
||||||
if (img.sprite == null || img.sprite.name != spriteName)
|
if (img.sprite == null || img.sprite.name != spriteName)
|
||||||
{
|
{
|
||||||
// img.sprite = Resources.Load<Sprite>(spriteName);
|
// img.sprite = Resources.Load<Sprite>(spriteName);
|
||||||
|
@ -186,8 +182,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
m_ImagesPool.Remove(m_ImagesPool[i]);
|
m_ImagesPool.Remove(m_ImagesPool[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (culled_ImagesPool.Count > 1)
|
if (culled_ImagesPool.Count > 1) {
|
||||||
{
|
|
||||||
clearImages = true;
|
clearImages = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -201,13 +196,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
positions.Clear();
|
positions.Clear();
|
||||||
|
|
||||||
UIVertex vert = new UIVertex();
|
UIVertex vert = new UIVertex();
|
||||||
|
|
||||||
for (var i = 0; i < m_ImagesVertexIndex.Count; i++)
|
for (var i = 0; i < m_ImagesVertexIndex.Count; i++)
|
||||||
{
|
{
|
||||||
var endIndex = m_ImagesVertexIndex[i];
|
var endIndex = m_ImagesVertexIndex[i];
|
||||||
var rt = m_ImagesPool[i].rectTransform;
|
var rt = m_ImagesPool[i].rectTransform;
|
||||||
var size = rt.sizeDelta;
|
var size = rt.sizeDelta;
|
||||||
|
|
||||||
if (endIndex < toFill.currentVertCount)
|
if (endIndex < toFill.currentVertCount)
|
||||||
{
|
{
|
||||||
toFill.PopulateUIVertex(ref vert, endIndex);
|
toFill.PopulateUIVertex(ref vert, endIndex);
|
||||||
|
@ -215,9 +208,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
// Erase the lower left corner of the black specks
|
// Erase the lower left corner of the black specks
|
||||||
toFill.PopulateUIVertex(ref vert, endIndex - 3);
|
toFill.PopulateUIVertex(ref vert, endIndex - 3);
|
||||||
|
|
||||||
var pos = vert.position;
|
var pos = vert.position;
|
||||||
|
|
||||||
for (int j = endIndex, m = endIndex - 3; j > m; j--)
|
for (int j = endIndex, m = endIndex - 3; j > m; j--)
|
||||||
{
|
{
|
||||||
toFill.PopulateUIVertex(ref vert, endIndex);
|
toFill.PopulateUIVertex(ref vert, endIndex);
|
||||||
|
@ -243,10 +234,8 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
// Hyperlink inside the text is added to surround the vertex index coordinate frame
|
// Hyperlink inside the text is added to surround the vertex index coordinate frame
|
||||||
toFill.PopulateUIVertex(ref vert, hrefInfo.startIndex);
|
toFill.PopulateUIVertex(ref vert, hrefInfo.startIndex);
|
||||||
|
|
||||||
var pos = vert.position;
|
var pos = vert.position;
|
||||||
var bounds = new Bounds(pos, Vector3.zero);
|
var bounds = new Bounds(pos, Vector3.zero);
|
||||||
|
|
||||||
for (int i = hrefInfo.startIndex, m = hrefInfo.endIndex; i < m; i++)
|
for (int i = hrefInfo.startIndex, m = hrefInfo.endIndex; i < m; i++)
|
||||||
{
|
{
|
||||||
if (i >= toFill.currentVertCount)
|
if (i >= toFill.currentVertCount)
|
||||||
|
@ -323,16 +312,13 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
foreach (Match match in s_HrefRegex.Matches(fixedString))
|
foreach (Match match in s_HrefRegex.Matches(fixedString))
|
||||||
{
|
{
|
||||||
s_TextBuilder.Append(fixedString.Substring(indexText, match.Index - indexText));
|
s_TextBuilder.Append(fixedString.Substring(indexText, match.Index - indexText));
|
||||||
s_TextBuilder.Append("<color=" + hyperlinkColor + ">"); // Hyperlink color
|
s_TextBuilder.Append("<color=" + hyperlinkColor + ">"); // Hyperlink color
|
||||||
|
|
||||||
var group = match.Groups[1];
|
var group = match.Groups[1];
|
||||||
|
if(isCreating_m_HrefInfos) {
|
||||||
if (isCreating_m_HrefInfos)
|
|
||||||
{
|
|
||||||
var hrefInfo = new HrefInfo
|
var hrefInfo = new HrefInfo
|
||||||
{
|
{
|
||||||
startIndex = s_TextBuilder.Length * 4, // Hyperlinks in text starting vertex indices
|
startIndex = s_TextBuilder.Length * 4, // Hyperlinks in text starting vertex indices
|
||||||
|
@ -340,10 +326,8 @@ namespace UnityEngine.UI.Extensions
|
||||||
name = group.Value
|
name = group.Value
|
||||||
};
|
};
|
||||||
m_HrefInfos.Add(hrefInfo);
|
m_HrefInfos.Add(hrefInfo);
|
||||||
}
|
} else {
|
||||||
else {
|
if(m_HrefInfos.Count > 0) {
|
||||||
if (m_HrefInfos.Count > 0)
|
|
||||||
{
|
|
||||||
m_HrefInfos[count].startIndex = s_TextBuilder.Length * 4; // Hyperlinks in text starting vertex indices;
|
m_HrefInfos[count].startIndex = s_TextBuilder.Length * 4; // Hyperlinks in text starting vertex indices;
|
||||||
m_HrefInfos[count].endIndex = (s_TextBuilder.Length + match.Groups[2].Length - 1) * 4 + 3;
|
m_HrefInfos[count].endIndex = (s_TextBuilder.Length + match.Groups[2].Length - 1) * 4 + 3;
|
||||||
count++;
|
count++;
|
||||||
|
@ -355,7 +339,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
indexText = match.Index + match.Length;
|
indexText = match.Index + match.Length;
|
||||||
}
|
}
|
||||||
// we should create array only once or if there is any change in the text
|
// we should create array only once or if there is any change in the text
|
||||||
if (isCreating_m_HrefInfos)
|
if(isCreating_m_HrefInfos)
|
||||||
isCreating_m_HrefInfos = false;
|
isCreating_m_HrefInfos = false;
|
||||||
|
|
||||||
s_TextBuilder.Append(fixedString.Substring(indexText, fixedString.Length - indexText));
|
s_TextBuilder.Append(fixedString.Substring(indexText, fixedString.Length - indexText));
|
||||||
|
@ -376,7 +360,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
foreach (var hrefInfo in m_HrefInfos)
|
foreach (var hrefInfo in m_HrefInfos)
|
||||||
{
|
{
|
||||||
var boxes = hrefInfo.boxes;
|
var boxes = hrefInfo.boxes;
|
||||||
|
|
||||||
for (var i = 0; i < boxes.Count; ++i)
|
for (var i = 0; i < boxes.Count; ++i)
|
||||||
{
|
{
|
||||||
if (boxes[i].Contains(lp))
|
if (boxes[i].Contains(lp))
|
||||||
|
@ -406,6 +389,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
public void OnPointerExit(PointerEventData eventData)
|
public void OnPointerExit(PointerEventData eventData)
|
||||||
{
|
{
|
||||||
|
|
||||||
//do your stuff when highlighted
|
//do your stuff when highlighted
|
||||||
//selected = false;
|
//selected = false;
|
||||||
if (m_ImagesPool.Count >= 1)
|
if (m_ImagesPool.Count >= 1)
|
||||||
|
@ -423,7 +407,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSelect(BaseEventData eventData)
|
public void OnSelect(BaseEventData eventData)
|
||||||
{
|
{
|
||||||
//do your stuff when selected
|
//do your stuff when selected
|
||||||
|
@ -455,24 +438,22 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TEMPORARY FIX REMOVE IMAGES FROM POOL DELETE LATER SINCE CANNOT DESTROY */
|
/* TEMPORARY FIX REMOVE IMAGES FROM POOL DELETE LATER SINCE CANNOT DESTROY */
|
||||||
void Update()
|
void Update() {
|
||||||
{
|
lock (thisLock) {
|
||||||
if (clearImages)
|
if (clearImages) {
|
||||||
{
|
for (int i = 0; i < culled_ImagesPool.Count; i++){
|
||||||
for (int i = 0; i < culled_ImagesPool.Count; i++)
|
DestroyImmediate(culled_ImagesPool[i]);
|
||||||
{
|
}
|
||||||
DestroyImmediate(culled_ImagesPool[i]);
|
culled_ImagesPool.Clear();
|
||||||
}
|
clearImages = false;
|
||||||
culled_ImagesPool.Clear();
|
}
|
||||||
clearImages = false;
|
}
|
||||||
}
|
if( previousText != text)
|
||||||
if (previousText != text)
|
Reset_m_HrefInfos ();
|
||||||
Reset_m_HrefInfos();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reseting m_HrefInfos array if there is any change in text
|
// Reseting m_HrefInfos array if there is any change in text
|
||||||
void Reset_m_HrefInfos()
|
void Reset_m_HrefInfos () {
|
||||||
{
|
|
||||||
previousText = text;
|
previousText = text;
|
||||||
m_HrefInfos.Clear();
|
m_HrefInfos.Clear();
|
||||||
isCreating_m_HrefInfos = true;
|
isCreating_m_HrefInfos = true;
|
||||||
|
|
Loading…
Reference in New Issue