mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-19 05:48:07 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
91 lines
1.7 KiB
C#
91 lines
1.7 KiB
C#
namespace Editor;
|
|
|
|
public class ToggleSwitch : Widget
|
|
{
|
|
private bool _value;
|
|
|
|
public bool Value
|
|
{
|
|
get => _value;
|
|
set
|
|
{
|
|
_value = value;
|
|
AnimateCircle();
|
|
}
|
|
}
|
|
|
|
public string Text { get; set; }
|
|
|
|
public ToggleSwitch( string text, Widget parent = null ) : base( parent )
|
|
{
|
|
Text = text;
|
|
}
|
|
|
|
protected override Vector2 SizeHint()
|
|
{
|
|
return new Vector2( 40, 20 );
|
|
}
|
|
|
|
private float CirclePos = 0.0f; // 0 to 1
|
|
|
|
protected override void OnPaint()
|
|
{
|
|
Paint.ClearPen();
|
|
Paint.ClearBrush();
|
|
Paint.SetDefaultFont();
|
|
Paint.Antialiasing = true;
|
|
|
|
var r = LocalRect;
|
|
r.Size = new Vector2( 40, 20 );
|
|
|
|
if ( Value )
|
|
Paint.SetBrush( Theme.Primary );
|
|
else
|
|
Paint.SetBrush( Theme.ButtonBackground );
|
|
|
|
Paint.SetPen( Theme.Text.WithAlpha( 0.25f ), 1.0f );
|
|
Paint.DrawRect( r, 10.0f );
|
|
Paint.ClearPen();
|
|
|
|
if ( Paint.HasMouseOver )
|
|
{
|
|
Paint.SetBrush( Color.White.WithAlpha( 0.2f ) );
|
|
Paint.DrawRect( r, 10.0f );
|
|
}
|
|
|
|
r = r.Shrink( 4.0f );
|
|
|
|
{
|
|
var circle = r;
|
|
circle.Size = circle.Size.WithX( circle.Size.y );
|
|
|
|
circle.Position = circle.Position.WithX( r.Left.LerpTo( r.Right - 12.0f, CirclePos ) );
|
|
|
|
Paint.SetBrush( Color.White.WithAlpha( 0.5f ) );
|
|
Paint.DrawRect( circle, 16.0f );
|
|
}
|
|
|
|
// Draw label
|
|
if ( !string.IsNullOrEmpty( Text ) )
|
|
{
|
|
r = LocalRect + new Vector2( 40 + 8, 0 );
|
|
Paint.SetDefaultFont();
|
|
Paint.ClearBrush();
|
|
Paint.SetPen( Theme.TextControl );
|
|
Paint.DrawText( r, Text, TextFlag.LeftCenter );
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseClick( MouseEvent e )
|
|
{
|
|
Value = !Value;
|
|
|
|
base.OnMouseClick( e );
|
|
}
|
|
|
|
private void AnimateCircle()
|
|
{
|
|
Animate.Add( this, 0.1f, Value ? 0.0f : 1.0f, Value ? 1.0f : 0.0f, x => CirclePos = x, "ease-out" );
|
|
}
|
|
}
|