Add default background and foreground color as possible colors
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
[*]
|
||||
tab_width = 4
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
|
||||
[*.cs]
|
||||
dotnet_diagnostic.RCS1196.severity = none
|
||||
csharp_style_namespace_declarations = file_scoped:error
|
||||
|
||||
@@ -60,7 +60,7 @@ public static class Startup
|
||||
DefaultForegroundColor: null,
|
||||
DefaultForegroundAccentColor: colorProvider.RedForeground,
|
||||
DefaultBackgroundColor: null,
|
||||
ElementColor: colorProvider.GrayForeground,
|
||||
ElementColor: colorProvider.DefaultForeground,
|
||||
ContainerColor: colorProvider.BlueForeground,
|
||||
MarkedItemForegroundColor: colorProvider.YellowForeground,
|
||||
MarkedItemBackgroundColor: null,
|
||||
|
||||
@@ -25,6 +25,7 @@ public class AnsiColorProvider : ColorProviderBase
|
||||
|
||||
public override IColor FromRgb(Rgb rgb, ColorType type) => new ColorRgb(rgb.R, rgb.G, rgb.B, type);
|
||||
|
||||
public override IColor DefaultForeground { get; } = Color256.DefaultForeground;
|
||||
public override IColor BlackForeground { get; } = new Color256(0, ColorType.Foreground);
|
||||
public override IColor BlueForeground { get; } = new Color256(12, ColorType.Foreground);
|
||||
public override IColor CyanForeground { get; } = new Color256(14, ColorType.Foreground);
|
||||
@@ -42,6 +43,7 @@ public class AnsiColorProvider : ColorProviderBase
|
||||
public override IColor WhiteForeground { get; } = new Color256(15, ColorType.Foreground);
|
||||
public override IColor YellowForeground { get; } = new Color256(11, ColorType.Foreground);
|
||||
|
||||
public override IColor DefaultBackground { get; } = Color256.DefaultBackground;
|
||||
public override IColor BlackBackground { get; } = new Color256(0, ColorType.Background);
|
||||
public override IColor BlueBackground { get; } = new Color256(12, ColorType.Background);
|
||||
public override IColor CyanBackground { get; } = new Color256(14, ColorType.Background);
|
||||
|
||||
@@ -2,17 +2,42 @@
|
||||
|
||||
namespace TerminalUI.Color;
|
||||
|
||||
public readonly record struct Color256(byte Color, ColorType Type) : IColor
|
||||
public readonly record struct Color256(byte? Color, ColorType Type) : IColor
|
||||
{
|
||||
public string ToConsoleColor()
|
||||
=> Type switch
|
||||
{
|
||||
if (Color is null)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return Type switch
|
||||
{
|
||||
ColorType.Foreground => $"\x1b[38;5;{Color}m",
|
||||
ColorType.Background => $"\x1b[48;5;{Color}m",
|
||||
_ => throw new InvalidEnumArgumentException(nameof(Type), (int) Type, typeof(ColorType))
|
||||
_ => throw new InvalidEnumArgumentException(nameof(Type), (int)Type, typeof(ColorType))
|
||||
};
|
||||
}
|
||||
|
||||
public static Color256 DefaultForeground { get; } = new(null, ColorType.Foreground);
|
||||
public static Color256 DefaultBackground { get; } = new(null, ColorType.Background);
|
||||
private static Color256 DefaultForegroundAsBackground { get; } = new(7, ColorType.Background);
|
||||
private static Color256 DefaultBackgroundAsForeground { get; } = new(0, ColorType.Foreground);
|
||||
|
||||
private static Dictionary<Color256, Color256> _defaultColorMapping = new()
|
||||
{
|
||||
{ DefaultForeground, DefaultForegroundAsBackground },
|
||||
{ DefaultBackground, DefaultBackgroundAsForeground },
|
||||
{ DefaultForegroundAsBackground, DefaultForeground },
|
||||
{ DefaultBackgroundAsForeground, DefaultBackground },
|
||||
};
|
||||
|
||||
public IColor AsForeground() => this with {Type = ColorType.Foreground};
|
||||
public IColor AsForeground()
|
||||
=> _defaultColorMapping.TryGetValue(this, out var color)
|
||||
? color
|
||||
: this with { Type = ColorType.Foreground };
|
||||
|
||||
public IColor AsBackground() => this with {Type = ColorType.Background};
|
||||
public IColor AsBackground()
|
||||
=> _defaultColorMapping.TryGetValue(this, out var color)
|
||||
? color
|
||||
: this with { Type = ColorType.Background };
|
||||
}
|
||||
@@ -82,6 +82,7 @@ public abstract class ColorProviderBase : IColorProvider
|
||||
_ => null
|
||||
};
|
||||
|
||||
public abstract IColor DefaultForeground { get; }
|
||||
public abstract IColor BlackForeground { get; }
|
||||
public abstract IColor BlueForeground { get; }
|
||||
public abstract IColor CyanForeground { get; }
|
||||
@@ -99,6 +100,7 @@ public abstract class ColorProviderBase : IColorProvider
|
||||
public abstract IColor WhiteForeground { get; }
|
||||
public abstract IColor YellowForeground { get; }
|
||||
|
||||
public abstract IColor DefaultBackground { get; }
|
||||
public abstract IColor BlackBackground { get; }
|
||||
public abstract IColor BlueBackground { get; }
|
||||
public abstract IColor CyanBackground { get; }
|
||||
|
||||
@@ -73,6 +73,7 @@ public class ConsoleColorProvider : ColorProviderBase
|
||||
protected IColor ApproximateColor(Rgb rgb, IEnumerable<(Rgb, IColor)> colors)
|
||||
=> colors.MinBy(c => c.Item1 - rgb).Item2;
|
||||
|
||||
public override IColor DefaultForeground => _blackForeground;
|
||||
public override IColor BlackForeground => _blackForeground;
|
||||
public override IColor BlueForeground => _blueForeground;
|
||||
public override IColor CyanForeground => _cyanForeground;
|
||||
@@ -90,6 +91,7 @@ public class ConsoleColorProvider : ColorProviderBase
|
||||
public override IColor WhiteForeground => _whiteForeground;
|
||||
public override IColor YellowForeground => _yellowForeground;
|
||||
|
||||
public override IColor DefaultBackground => _blackBackground;
|
||||
public override IColor BlackBackground => _blackBackground;
|
||||
public override IColor BlueBackground => _blueBackground;
|
||||
public override IColor CyanBackground => _cyanBackground;
|
||||
|
||||
@@ -5,6 +5,7 @@ public interface IColorProvider
|
||||
IColor Parse(string color, ColorType type);
|
||||
IColor FromRgb(Rgb rgb, ColorType type);
|
||||
|
||||
IColor DefaultForeground { get; }
|
||||
IColor BlackForeground { get; }
|
||||
IColor BlueForeground { get; }
|
||||
IColor CyanForeground { get; }
|
||||
@@ -22,7 +23,7 @@ public interface IColorProvider
|
||||
IColor WhiteForeground { get; }
|
||||
IColor YellowForeground { get; }
|
||||
|
||||
|
||||
IColor DefaultBackground { get; }
|
||||
IColor BlackBackground { get; }
|
||||
IColor BlueBackground { get; }
|
||||
IColor CyanBackground { get; }
|
||||
|
||||
Reference in New Issue
Block a user