Editor/Tileset/TilesetEditor/Preview/Preview.cs
using Editor;
using Sandbox;
namespace SpriteTools.TilesetEditor.Preview;
public class Preview : Widget
{
public MainWindow MainWindow { get; }
private readonly RenderingWidget Rendering;
internal Vector2 TextureSize => Rendering.TextureSize;
Widget Overlay;
WidgetWindow overlayWindowZoom;
public Preview ( MainWindow mainWindow ) : base( null )
{
MainWindow = mainWindow;
Name = "Preview";
WindowTitle = "Preview";
SetWindowIcon( "emoji_emotions" );
MinimumSize = new Vector2( 256, 256 );
Layout = Layout.Column();
Rendering = new RenderingWidget( MainWindow, this );
Layout.Add( Rendering );
Overlay = new Widget( this )
{
Layout = Layout.Row(),
TranslucentBackground = true,
NoSystemBackground = true,
WindowFlags = WindowFlags.FramelessWindowHint | WindowFlags.Tool
};
overlayWindowZoom = new WidgetWindow( this );
overlayWindowZoom.Parent = Overlay;
overlayWindowZoom.Layout = Layout.Row();
overlayWindowZoom.Layout.Spacing = 4;
overlayWindowZoom.Layout.Margin = 4;
var btnZoomOut = overlayWindowZoom.Layout.Add( new IconButton( "zoom_out" ) );
btnZoomOut.OnClick = () =>
{
Rendering.Zoom( -250 );
};
btnZoomOut.ToolTip = "Zoom Out";
btnZoomOut.StatusTip = "Zoom Out View";
var btnZoomIn = overlayWindowZoom.Layout.Add( new IconButton( "zoom_in" ) );
btnZoomIn.OnClick = () =>
{
Rendering.Zoom( 250 );
};
btnZoomIn.ToolTip = "Zoom In";
btnZoomIn.StatusTip = "Zoom In View";
overlayWindowZoom.Layout.AddSeparator();
var btnFit = overlayWindowZoom.Layout.Add( new IconButton( "zoom_out_map" ) );
btnFit.OnClick = () =>
{
Rendering.Fit();
};
btnFit.ToolTip = "Fit to Screen";
btnFit.StatusTip = "Fit View to Screen";
overlayWindowZoom.WindowTitle = "Zoom Controls";
Overlay.Layout.Add( overlayWindowZoom );
Overlay.Show();
SetSizeMode( SizeMode.Default, SizeMode.CanShrink );
MainWindow.Moved += DoLayout;
}
public override void OnDestroyed ()
{
base.OnDestroyed();
MainWindow.Moved -= DoLayout;
}
internal void UpdateTexture ( string filePath )
{
var texture = Texture.LoadFromFileSystem( filePath, Sandbox.FileSystem.Mounted );
if ( texture is null ) return;
Rendering.SetTexture( texture );
}
protected override void DoLayout ()
{
base.DoLayout();
if ( Overlay.IsValid() && Rendering.IsValid() )
{
Overlay.Position = Rendering.ScreenPosition;
Overlay.Size = Rendering.Size + 1;
overlayWindowZoom.AdjustSize();
overlayWindowZoom.AlignToParent( TextFlag.RightTop, 4 );
}
}
protected override void OnVisibilityChanged ( bool visible )
{
base.OnVisibilityChanged( visible );
if ( Overlay is not null )
{
Overlay.Visible = visible;
}
}
}