using UnityEngine;
namespace FairyGUI
{
///
///
///
public class RectMesh : IMeshFactory, IHitTest
{
///
///
///
public Rect? drawRect;
///
///
///
public float lineWidth;
///
///
///
public Color32 lineColor;
///
///
///
public Color32? fillColor;
///
///
///
public Color32[] colors;
public RectMesh()
{
lineColor = Color.black;
}
public void OnPopulateMesh(VertexBuffer vb)
{
Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect;
Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor;
if (lineWidth == 0)
{
if (color.a != 0)//optimized
vb.AddQuad(rect, color);
}
else
{
Rect part;
//left,right
part = new Rect(rect.x, rect.y, lineWidth, rect.height);
vb.AddQuad(part, lineColor);
part = new Rect(rect.xMax - lineWidth, rect.y, lineWidth, rect.height);
vb.AddQuad(part, lineColor);
//top, bottom
part = new Rect(rect.x + lineWidth, rect.y, rect.width - lineWidth * 2, lineWidth);
vb.AddQuad(part, lineColor);
part = new Rect(rect.x + lineWidth, rect.yMax - lineWidth, rect.width - lineWidth * 2, lineWidth);
vb.AddQuad(part, lineColor);
//middle
if (color.a != 0)//optimized
{
part = Rect.MinMaxRect(rect.x + lineWidth, rect.y + lineWidth, rect.xMax - lineWidth, rect.yMax - lineWidth);
if (part.width > 0 && part.height > 0)
vb.AddQuad(part, color);
}
}
if (colors != null)
vb.RepeatColors(colors, 0, vb.currentVertCount);
vb.AddTriangles();
}
public bool HitTest(Rect contentRect, Vector2 point)
{
return contentRect.Contains(point);
}
}
}