Editor/Widgets/SuiCanvasMiniToolbar.cs
using System;
using Editor;
using Sandbox;
namespace SboxUiDesigner.EditorUi.Widgets;
/// <summary>
/// Mini-toolbar that lives directly under the Designer/Preview/Code tab strip.
/// Holds canvas-scoped controls (Screen / Zoom / Snap dropdowns).
///
/// Reuses <see cref="SuiTopBarDropdown"/> for visual consistency with the
/// top toolbar — same pill style, same chevron, same paint-only widget.
///
/// Alignment / cursor / marquee / fit / lock buttons (yellow-marked in the
/// mockup) are V2 — left out for now.
/// </summary>
public sealed class SuiCanvasMiniToolbar : Widget
{
public SuiCanvasMiniToolbar( Widget parent = null ) : base( parent )
{
FixedHeight = 44;
Layout = Layout.Row();
Layout.Margin = new Sandbox.UI.Margin( 12, 6, 12, 6 );
Layout.Spacing = 4;
}
public SuiTopBarDropdown AddDropdown( string icon, string label, string value, Action<Widget> onOpen, string tooltip = null )
{
var dd = new SuiTopBarDropdown( icon, label, value );
dd.ToolTip = tooltip;
dd.Clicked += () => onOpen?.Invoke( dd );
Layout.Add( dd );
return dd;
}
public SuiTopBarButton AddButton( string label, string icon, Action onClick, string tooltip = null )
{
var btn = new SuiTopBarButton( label, icon, hasChevron: false );
btn.ToolTip = tooltip ?? label;
btn.Clicked += onClick;
Layout.Add( btn );
return btn;
}
/// <summary>Button styled like a dropdown — chevron on the right, click
/// opens a context menu. Used for grouped ops (e.g. Align, Distribute).</summary>
public SuiTopBarButton AddMenuButton( string label, string icon, Action<Widget> onOpen, string tooltip = null )
{
var btn = new SuiTopBarButton( label, icon, hasChevron: true );
btn.ToolTip = tooltip ?? label;
btn.Clicked += () => onOpen?.Invoke( btn );
Layout.Add( btn );
return btn;
}
public void AddSeparator()
{
var sep = new SuiTopBarSeparator();
Layout.Add( sep );
}
public void AddGap( int px = 12 )
{
var spacer = new Widget( this );
spacer.FixedWidth = px;
spacer.SetStyles( "background-color: transparent;" );
Layout.Add( spacer );
}
public void AddStretch() => Layout.AddStretchCell();
protected override void OnPaint()
{
// Mini-toolbar background — #1E1F1E (rgba 30,31,30) per user spec.
Paint.SetBrushAndPen( new Color( 30 / 255f, 31 / 255f, 30 / 255f ) );
Paint.DrawRect( LocalRect );
// Subtle 1px bottom border to visually separate from canvas viewport.
Paint.SetPen( Color.White.WithAlpha( 0.06f ) );
Paint.DrawLine( new Vector2( 0, Height - 1 ), new Vector2( Width, Height - 1 ) );
}
}