79 lines
1.8 KiB
C#
79 lines
1.8 KiB
C#
using System.Numerics;
|
|
using ImGuiNET;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace skyscraper8.UI.MonoGame.Bridge;
|
|
|
|
public class TextureDisplayWindow : ImGuiRenderable
|
|
{
|
|
protected Texture2D _texture;
|
|
protected string _name;
|
|
protected bool open;
|
|
private bool closeable;
|
|
protected ImGuiRenderer _renderer;
|
|
|
|
public TextureDisplayWindow(ImGuiRenderer renderer, Texture2D texture, string name = null, bool closeable = false)
|
|
{
|
|
if (renderer == null)
|
|
throw new ArgumentNullException(nameof(renderer));
|
|
_renderer = renderer;
|
|
|
|
this._texture = texture;
|
|
this._name = name;
|
|
if (string.IsNullOrEmpty(name))
|
|
{
|
|
this._name = texture.ToString();
|
|
}
|
|
|
|
this.open = true;
|
|
this.closeable = closeable;
|
|
}
|
|
|
|
private bool bound;
|
|
private IntPtr _texturePointer;
|
|
protected System.Numerics.Vector2 windowSize;
|
|
public virtual void Update()
|
|
{
|
|
if (_texture == null)
|
|
return;
|
|
|
|
if (!bound)
|
|
{
|
|
_texturePointer = _renderer.BindTexture(_texture);
|
|
windowSize = new Vector2(_texture.Width, _texture.Height);
|
|
bound = true;
|
|
}
|
|
}
|
|
|
|
public void Render()
|
|
{
|
|
if (!bound)
|
|
return;
|
|
|
|
ImGui.SetNextWindowSize(windowSize);
|
|
if (closeable)
|
|
ImGui.Begin(_name, ref open);
|
|
else
|
|
ImGui.Begin(_name);
|
|
|
|
ImGui.Image(_texturePointer, windowSize);
|
|
|
|
ImGui.End();
|
|
}
|
|
|
|
public bool WasClosed()
|
|
{
|
|
return !open;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (bound)
|
|
{
|
|
_renderer.UnbindTexture(_texturePointer);
|
|
bound = false;
|
|
}
|
|
|
|
_texture.Dispose();
|
|
}
|
|
} |