114 lines
2.9 KiB
C#
114 lines
2.9 KiB
C#
|
|
|||
|
namespace FairyGUI.Utils
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public class HtmlLink : IHtmlObject
|
|||
|
{
|
|||
|
RichTextField _owner;
|
|||
|
HtmlElement _element;
|
|||
|
SelectionShape _shape;
|
|||
|
|
|||
|
EventCallback1 _clickHandler;
|
|||
|
EventCallback1 _rolloverHandler;
|
|||
|
EventCallback0 _rolloutHandler;
|
|||
|
|
|||
|
public HtmlLink()
|
|||
|
{
|
|||
|
_shape = new SelectionShape();
|
|||
|
_shape.gameObject.name = "HtmlLink";
|
|||
|
_shape.cursor = "text-link";
|
|||
|
|
|||
|
_clickHandler = (EventContext context) =>
|
|||
|
{
|
|||
|
_owner.BubbleEvent("onClickLink", _element.GetString("href"));
|
|||
|
};
|
|||
|
_rolloverHandler = (EventContext context) =>
|
|||
|
{
|
|||
|
if (_owner.htmlParseOptions.linkHoverBgColor.a > 0)
|
|||
|
_shape.color = _owner.htmlParseOptions.linkHoverBgColor;
|
|||
|
};
|
|||
|
_rolloutHandler = () =>
|
|||
|
{
|
|||
|
if (_owner.htmlParseOptions.linkHoverBgColor.a > 0)
|
|||
|
_shape.color = _owner.htmlParseOptions.linkBgColor;
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
public DisplayObject displayObject
|
|||
|
{
|
|||
|
get { return _shape; }
|
|||
|
}
|
|||
|
|
|||
|
public HtmlElement element
|
|||
|
{
|
|||
|
get { return _element; }
|
|||
|
}
|
|||
|
|
|||
|
public float width
|
|||
|
{
|
|||
|
get { return 0; }
|
|||
|
}
|
|||
|
|
|||
|
public float height
|
|||
|
{
|
|||
|
get { return 0; }
|
|||
|
}
|
|||
|
|
|||
|
public void Create(RichTextField owner, HtmlElement element)
|
|||
|
{
|
|||
|
_owner = owner;
|
|||
|
_element = element;
|
|||
|
_shape.onClick.Add(_clickHandler);
|
|||
|
_shape.onRollOver.Add(_rolloverHandler);
|
|||
|
_shape.onRollOut.Add(_rolloutHandler);
|
|||
|
_shape.color = _owner.htmlParseOptions.linkBgColor;
|
|||
|
}
|
|||
|
|
|||
|
public void SetArea(int startLine, float startCharX, int endLine, float endCharX)
|
|||
|
{
|
|||
|
if (startLine == endLine && startCharX > endCharX)
|
|||
|
{
|
|||
|
float tmp = startCharX;
|
|||
|
startCharX = endCharX;
|
|||
|
endCharX = tmp;
|
|||
|
}
|
|||
|
_shape.rects.Clear();
|
|||
|
_owner.textField.GetLinesShape(startLine, startCharX, endLine, endCharX, true, _shape.rects);
|
|||
|
_shape.Refresh();
|
|||
|
}
|
|||
|
|
|||
|
public void SetPosition(float x, float y)
|
|||
|
{
|
|||
|
_shape.SetXY(x, y);
|
|||
|
}
|
|||
|
|
|||
|
public void Add()
|
|||
|
{
|
|||
|
//add below _shape
|
|||
|
_owner.AddChildAt(_shape, 0);
|
|||
|
}
|
|||
|
|
|||
|
public void Remove()
|
|||
|
{
|
|||
|
if (_shape.parent != null)
|
|||
|
_owner.RemoveChild(_shape);
|
|||
|
}
|
|||
|
|
|||
|
public void Release()
|
|||
|
{
|
|||
|
_shape.RemoveEventListeners();
|
|||
|
|
|||
|
_owner = null;
|
|||
|
_element = null;
|
|||
|
}
|
|||
|
|
|||
|
public void Dispose()
|
|||
|
{
|
|||
|
_shape.Dispose();
|
|||
|
_shape = null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|