127 lines
3.1 KiB
C#
Raw Normal View History

2025-06-07 17:43:34 +08:00
using System;
using System.Collections.Generic;
using System.Text;
namespace FairyGUI.Utils
{
/// <summary>
///
/// </summary>
public class HtmlImage : IHtmlObject
{
public GLoader loader { get; private set; }
RichTextField _owner;
HtmlElement _element;
bool _externalTexture;
public HtmlImage()
{
loader = (GLoader)UIObjectFactory.NewObject(ObjectType.Loader);
loader.gameObjectName = "HtmlImage";
loader.fill = FillType.ScaleFree;
loader.touchable = false;
}
public DisplayObject displayObject
{
get { return loader.displayObject; }
}
public HtmlElement element
{
get { return _element; }
}
public float width
{
get { return loader.width; }
}
public float height
{
get { return loader.height; }
}
public void Create(RichTextField owner, HtmlElement element)
{
_owner = owner;
_element = element;
int sourceWidth = 0;
int sourceHeight = 0;
NTexture texture = owner.htmlPageContext.GetImageTexture(this);
if (texture != null)
{
sourceWidth = texture.width;
sourceHeight = texture.height;
loader.texture = texture;
_externalTexture = true;
}
else
{
string src = element.GetString("src");
if (src != null)
{
PackageItem pi = UIPackage.GetItemByURL(src);
if (pi != null)
{
sourceWidth = pi.width;
sourceHeight = pi.height;
}
}
loader.url = src;
_externalTexture = false;
}
int width = element.GetInt("width", sourceWidth);
int height = element.GetInt("height", sourceHeight);
if (width == 0)
width = 5;
if (height == 0)
height = 10;
loader.SetSize(width, height);
}
public void SetPosition(float x, float y)
{
loader.SetXY(x, y);
}
public void Add()
{
_owner.AddChild(loader.displayObject);
}
public void Remove()
{
if (loader.displayObject.parent != null)
_owner.RemoveChild(loader.displayObject);
}
public void Release()
{
loader.RemoveEventListeners();
if (_externalTexture)
{
_owner.htmlPageContext.FreeImageTexture(this, loader.texture);
_externalTexture = false;
}
loader.url = null;
_owner = null;
_element = null;
}
public void Dispose()
{
if (_externalTexture)
_owner.htmlPageContext.FreeImageTexture(this, loader.texture);
loader.Dispose();
}
}
}