using Godot;
using ImGuiNET;
using System;
using Vector2 = System.Numerics.Vector2;
using Vector4 = System.Numerics.Vector4;
namespace ImGuiGodot;
public static partial class ImGuiGD
{
///
/// Display an interactable SubViewport
///
///
/// Be sure to change the SubViewport's to
///
///
/// True if active (mouse hovered)
///
public static bool SubViewport(SubViewport svp)
{
return _backend.SubViewportWidget(svp);
}
public static void Image(Texture2D tex, Vector2 size)
{
Image(tex, size, Vector2.Zero, Vector2.One, Vector4.One, Vector4.Zero);
}
public static void Image(Texture2D tex, Vector2 size, Vector2 uv0)
{
Image(tex, size, uv0, Vector2.One, Vector4.One, Vector4.Zero);
}
public static void Image(Texture2D tex, Vector2 size, Vector2 uv0, Vector2 uv1)
{
Image(tex, size, uv0, uv1, Vector4.One, Vector4.Zero);
}
public static void Image(
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 tint_col)
{
Image(tex, size, uv0, uv1, tint_col, Vector4.Zero);
}
public static void Image(
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 tint_col,
Vector4 border_col)
{
ImGuiNative.igImage((IntPtr)tex.GetRid().Id, size, uv0, uv1, tint_col, border_col);
}
public static void Image(AtlasTexture tex, Vector2 size)
{
Image(tex, size, Vector4.One, Vector4.Zero);
}
public static void Image(AtlasTexture tex, Vector2 size, Vector4 tint_col)
{
Image(tex, size, tint_col, Vector4.Zero);
}
public static void Image(AtlasTexture tex, Vector2 size, Vector4 tint_col, Vector4 border_col)
{
(Vector2 uv0, Vector2 uv1) = GetAtlasUVs(tex);
ImGuiNative.igImage((IntPtr)tex.GetRid().Id, size, uv0, uv1, tint_col, border_col);
}
public static bool ImageButton(string str_id, Texture2D tex, Vector2 size)
{
return ImageButton(str_id, tex, size, Vector2.Zero, Vector2.One, Vector4.Zero, Vector4.One);
}
public static bool ImageButton(string str_id, Texture2D tex, Vector2 size, Vector2 uv0)
{
return ImageButton(str_id, tex, size, uv0, Vector2.One, Vector4.Zero, Vector4.One);
}
public static bool ImageButton(
string str_id,
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1)
{
return ImageButton(str_id, tex, size, uv0, uv1, Vector4.Zero, Vector4.One);
}
public static bool ImageButton(
string str_id,
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 bg_col)
{
return ImageButton(str_id, tex, size, uv0, uv1, bg_col, Vector4.One);
}
public static bool ImageButton(
string str_id,
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 bg_col,
Vector4 tint_col)
{
return ImGui.ImageButton(str_id, (IntPtr)tex.GetRid().Id, size, uv0, uv1, bg_col, tint_col);
}
public static bool ImageButton(string str_id, AtlasTexture tex, Vector2 size)
{
return ImageButton(str_id, tex, size, Vector4.Zero, Vector4.One);
}
public static bool ImageButton(string str_id, AtlasTexture tex, Vector2 size, Vector4 bg_col)
{
return ImageButton(str_id, tex, size, bg_col, Vector4.One);
}
public static bool ImageButton(
string str_id,
AtlasTexture tex,
Vector2 size,
Vector4 bg_col,
Vector4 tint_col)
{
var (uv0, uv1) = GetAtlasUVs(tex);
return ImGui.ImageButton(str_id, (IntPtr)tex.GetRid().Id, size, uv0, uv1, bg_col, tint_col);
}
private static (Vector2 uv0, Vector2 uv1) GetAtlasUVs(AtlasTexture tex)
{
Godot.Vector2 atlasSize = tex.Atlas.GetSize();
Godot.Vector2 guv0 = tex.Region.Position / atlasSize;
Godot.Vector2 guv1 = tex.Region.End / atlasSize;
#pragma warning disable IDE0004 // Remove Unnecessary Cast
return (new((float)guv0.X, (float)guv0.Y), new((float)guv1.X, (float)guv1.Y));
#pragma warning restore IDE0004 // Remove Unnecessary Cast
}
}
///
/// for backward compatibility
///
///
/// will eventually add [Obsolete("Use ImGuiGD instead")]
///
public static class Widgets
{
public static bool SubViewport(SubViewport svp) => ImGuiGD.SubViewport(svp);
public static void Image(Texture2D tex, Vector2 size) => ImGuiGD.Image(tex, size);
public static void Image(Texture2D tex, Vector2 size, Vector2 uv0)
=> ImGuiGD.Image(tex, size, uv0);
public static void Image(Texture2D tex, Vector2 size, Vector2 uv0, Vector2 uv1)
=> ImGuiGD.Image(tex, size, uv0, uv1);
public static void Image(
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 tint_col) => ImGuiGD.Image(tex, size, uv0, uv1, tint_col);
public static void Image(
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 tint_col,
Vector4 border_col) => ImGuiGD.Image(tex, size, uv0, uv1, tint_col, border_col);
public static void Image(AtlasTexture tex, Vector2 size) => ImGuiGD.Image(tex, size);
public static void Image(AtlasTexture tex, Vector2 size, Vector4 tint_col)
=> ImGuiGD.Image(tex, size, tint_col);
public static void Image(AtlasTexture tex, Vector2 size, Vector4 tint_col, Vector4 border_col)
=> ImGuiGD.Image(tex, size, tint_col, border_col);
public static bool ImageButton(string str_id, Texture2D tex, Vector2 size)
=> ImGuiGD.ImageButton(str_id, tex, size);
public static bool ImageButton(string str_id, Texture2D tex, Vector2 size, Vector2 uv0)
=> ImGuiGD.ImageButton(str_id, tex, size, uv0);
public static bool ImageButton(
string str_id,
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1) => ImGuiGD.ImageButton(str_id, tex, size, uv0, uv1);
public static bool ImageButton(
string str_id,
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 bg_col) => ImGuiGD.ImageButton(str_id, tex, size, uv0, uv1, bg_col);
public static bool ImageButton(
string str_id,
Texture2D tex,
Vector2 size,
Vector2 uv0,
Vector2 uv1,
Vector4 bg_col,
Vector4 tint_col) => ImGuiGD.ImageButton(str_id, tex, size, uv0, uv1, bg_col, tint_col);
public static bool ImageButton(string str_id, AtlasTexture tex, Vector2 size)
=> ImGuiGD.ImageButton(str_id, tex, size);
public static bool ImageButton(string str_id, AtlasTexture tex, Vector2 size, Vector4 bg_col)
=> ImGuiGD.ImageButton(str_id, tex, size, bg_col);
public static bool ImageButton(
string str_id,
AtlasTexture tex,
Vector2 size,
Vector4 bg_col,
Vector4 tint_col) => ImGuiGD.ImageButton(str_id, tex, size, bg_col, tint_col);
}
#if NET10_0_OR_GREATER
// TODO: implicit extension GodotWidgets for ImGui
#endif