Files
sbox-public/engine/Sandbox.Tools/Qt/Window/WindowControlButton.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

70 lines
1.4 KiB
C#

using System;
namespace Editor;
internal class WindowControlButton : Widget
{
private static string SymbolFont = GetFont();
private static string GetFont()
{
// On Windows 11 we should be using 'Segoe Fluent Icons', but this isn't available on Windows 10.
// Version major and minor are 10.0 in both 10 and 11, confusingly, so we use the build number;
// Windows 11 starts at build number 22000, Windows 10 ends at 21390
if ( Environment.OSVersion.Version.Build >= 22000 )
return "Segoe Fluent Icons";
return "Segoe MDL2 Assets";
}
private Action _onClick;
private WindowControlIcon _icon;
public WindowControlIcon Icon
{
get => _icon;
set
{
if ( _icon == value )
return;
_icon = value;
Update();
}
}
public Color HighlightColor { get; set; } = Theme.Text.WithAlpha( 0.1f );
public WindowControlButton( WindowControlIcon icon, Action onClick = null )
{
_onClick = onClick;
Icon = icon;
FixedSize = new Vector2( 40, 32 );
}
protected override void OnMouseClick( MouseEvent e )
{
_onClick?.Invoke();
}
protected override void OnPaint()
{
Paint.ClearPen();
if ( Paint.HasMouseOver && Enabled )
{
Paint.SetBrush( HighlightColor );
Paint.DrawRect( LocalRect );
}
Paint.ClearBrush();
Paint.SetFont( SymbolFont, 7.0f );
Paint.SetPen( Theme.Text );
if ( !Enabled )
Paint.SetPen( Theme.Text.WithAlpha( 0.5f ) );
Paint.DrawText( LocalRect, new string( (char)Icon, 1 ) );
}
}