Editor/Tileset/TilesetTools/Preview/Preview.cs
using Editor;
using Sandbox;

namespace SpriteTools.TilesetTool.Preview;

public class Preview { }

[CustomEditor( typeof( Preview ) )]
public class PreviewWidget : ControlWidget
{
	public static PreviewWidget Current { get; private set; }

	public TilesetToolInspector Inspector { get; }
	private readonly RenderingWidget Rendering;

	internal Vector2 TextureSize => Rendering.TextureSize;

	public PreviewWidget ( SerializedProperty prop ) : base( prop )
	{
		Current = this;
		Inspector = TilesetToolInspector.Active;

		Name = "Preview";
		WindowTitle = "Preview";
		SetWindowIcon( "emoji_emotions" );

		MinimumSize = new Vector2( 256, 512 );
		HorizontalSizeMode = SizeMode.Flexible;
		VerticalSizeMode = SizeMode.CanGrow;

		Layout = Layout.Column();

		Rendering = new RenderingWidget( Inspector, this );
		Layout.Add( Rendering );

		SetSizeMode( SizeMode.Default, SizeMode.CanShrink );

		var tileset = TilesetTool.Active?.SelectedLayer?.TilesetResource;
		if ( tileset is not null && !string.IsNullOrEmpty( tileset.FilePath ) )
		{
			UpdateTexture( tileset.FilePath );
		}

		Inspector.Moved += DoLayout;
	}

	protected override void OnPaint ()
	{
		base.OnPaint();

		Paint.SetBrush( Theme.Blue );
		Paint.DrawRect( LocalRect );
	}

	public override void OnDestroyed ()
	{
		base.OnDestroyed();

		Inspector.Moved -= DoLayout;
	}

	internal void UpdateTexture ( string filePath )
	{
		var texture = Texture.LoadFromFileSystem( filePath, Sandbox.FileSystem.Mounted );
		if ( texture is null ) return;
		Rendering.SetTexture( texture );
	}
}