UI/Inspector/ColorPicker.razor
@using Sandbox
@using Sandbox.UI
@using System
@namespace HC3.UI
@inherits Window
<root class="color-picker-ui">
<div class="color-picker-type">
<button class="@(CustomPicker? "" : "selected" )" onclick=@(() => CustomPicker = false)><i>palette</i></button>
<button class="@(CustomPicker? "selected" : "" )" onclick=@(() => CustomPicker = true)><i>gradient</i></button>
</div>
@if (!CustomPicker)
{
<div class="color-palette">
<div class="palette-container">
@foreach (var color in TycoonColor.PaletteColors)
{
<div class="color-swatch @(SelectedColor.Hex == color.Hex ? "selected" : "")" style=@($"background-color: {color.Hex}") onclick=@(() => SetColor(color))></div>
}
</div>
</div>
}
else
{
<div class="slider-row">
<label>R</label>
<SliderControl Min=@(0) Max=@(255) Step=@(1) Value:bind="@Red" />
<span>@((int)Red)</span>
</div>
<div class="slider-row">
<label>G</label>
<SliderControl Min=@(0) Max=@(255) Step=@(1) Value:bind="@Green" />
<span>@((int)Green)</span>
</div>
<div class="slider-row">
<label>B</label>
<SliderControl Min=@(0) Max=@(255) Step=@(1) Value:bind="@Blue" />
<span>@((int)Blue)</span>
</div>
<div class="preview">
<div class="preview-box" style=@($"background-color: {SelectedColor.Hex}")></div>
<TextEntry @ref=field Value=@("#" + SelectedColor.Hex.ToString()) onsubmit="@HexToSelectedColor"/>
</div>
}
</root>
@code {
bool CustomPicker = false;
public Action<Color> OnSubmit;
public override string Icon => "palette";
private float Red = 255f;
private float Green = 255f;
private float Blue = 255f;
public Color SelectedColor => new Color(Red / 255f, Green / 255f, Blue / 255f);
private TextEntry field;
public ColorPicker(Color initial, Action<Color> onSubmit)
{
SetTitle( "Color Picker" );
OnSubmit = onSubmit;
Red = initial.r * 255f;
Green = initial.g * 255f;
Blue = initial.b * 255f;
}
public void SetColor(Color color)
{
Red = color.r * 255f;
Green = color.g * 255f;
Blue = color.b * 255f;
}
void HexToSelectedColor()
{
if (field.IsValid())
{
try
{
var parsed = Color.Parse("#"+field.Text);
SetColor(parsed.Value);
}
catch (Exception ex)
{
Log.Warning($"Invalid hex: {field.Text} - {ex.Message}");
}
}
}
public override void Tick()
{
base.Tick();
var color = SelectedColor;
OnSubmit?.Invoke( color );
}
protected override int BuildHash() => System.HashCode.Combine(Red, Green, Blue);
}