Fixes #1281. Fixed CursesDriver colors. Added BasicColors scenario. (#1282)

* Fixes #1281. Fixed CursesDriver colors. Added BasicColors scenario.

* Normalizing NetDriver too.

* Fixing others colors.
This commit is contained in:
BDisp
2021-05-06 18:29:50 +01:00
committed by GitHub
parent 41bd2052db
commit 4af48392cc
5 changed files with 99 additions and 46 deletions

View File

@@ -118,7 +118,7 @@ namespace Terminal.Gui {
public Curses.Window window;
static short last_color_pair = 16;
//static short last_color_pair = 16;
/// <summary>
/// Creates a curses color from the provided foreground and background colors
@@ -128,12 +128,15 @@ namespace Terminal.Gui {
/// <returns></returns>
public static Attribute MakeColor (short foreground, short background)
{
Curses.InitColorPair (++last_color_pair, foreground, background);
var v = (short)((int)foreground | background << 4);
//Curses.InitColorPair (++last_color_pair, foreground, background);
Curses.InitColorPair (v, foreground, background);
return new Attribute (
value: Curses.ColorPair (last_color_pair),
//value: Curses.ColorPair (last_color_pair),
value: Curses.ColorPair (v),
foreground: (Color)foreground,
background: (Color)background
);
background: (Color)background);
}
int [,] colorPairs = new int [16, 16];
@@ -144,9 +147,9 @@ namespace Terminal.Gui {
int b = (short)background;
var v = colorPairs [f, b];
if ((v & 0x10000) == 0) {
b = b & 0x7;
b &= 0x7;
bool bold = (f & 0x8) != 0;
f = f & 0x7;
f &= 0x7;
v = MakeColor ((short)f, (short)b) | (bold ? Curses.A_BOLD : 0);
colorPairs [(int)foreground, (int)background] = v | 0x1000;
@@ -157,7 +160,7 @@ namespace Terminal.Gui {
Dictionary<int, int> rawPairs = new Dictionary<int, int> ();
public override void SetColors (short foreColorId, short backgroundColorId)
{
int key = (((ushort)foreColorId << 16)) | (ushort)backgroundColorId;
int key = ((ushort)foreColorId << 16) | (ushort)backgroundColorId;
if (!rawPairs.TryGetValue (key, out var v)) {
v = MakeColor (foreColorId, backgroundColorId);
rawPairs [key] = v;
@@ -781,33 +784,33 @@ namespace Terminal.Gui {
Colors.TopLevel.Normal = MakeColor (Curses.COLOR_GREEN, Curses.COLOR_BLACK);
Colors.TopLevel.Focus = MakeColor (Curses.COLOR_WHITE, Curses.COLOR_CYAN);
Colors.TopLevel.HotNormal = MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_BLACK);
Colors.TopLevel.HotFocus = MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_CYAN);
Colors.TopLevel.HotFocus = MakeColor (Curses.COLOR_BLUE, Curses.COLOR_CYAN);
Colors.Base.Normal = MakeColor (Curses.COLOR_WHITE, Curses.COLOR_BLUE);
Colors.Base.Focus = MakeColor (Curses.COLOR_BLACK, Curses.COLOR_CYAN);
Colors.Base.HotNormal = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_BLUE);
Colors.Base.HotFocus = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_CYAN);
Colors.Base.Focus = MakeColor (Curses.COLOR_BLACK, Curses.COLOR_WHITE);
Colors.Base.HotNormal = MakeColor (Curses.COLOR_CYAN, Curses.COLOR_BLUE);
Colors.Base.HotFocus = Curses.A_BOLD | MakeColor (Curses.COLOR_BLUE, Curses.COLOR_GRAY);
// Focused,
// Selected, Hot: Yellow on Black
// Selected, text: white on black
// Unselected, hot: yellow on cyan
// unselected, text: same as unfocused
Colors.Menu.HotFocus = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_BLACK);
Colors.Menu.Normal = Curses.A_BOLD | MakeColor (Curses.COLOR_WHITE, Curses.COLOR_GRAY);
Colors.Menu.Focus = Curses.A_BOLD | MakeColor (Curses.COLOR_WHITE, Curses.COLOR_BLACK);
Colors.Menu.HotNormal = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_CYAN);
Colors.Menu.Normal = Curses.A_BOLD | MakeColor (Curses.COLOR_WHITE, Curses.COLOR_CYAN);
Colors.Menu.Disabled = MakeColor (Curses.COLOR_WHITE, Curses.COLOR_CYAN);
Colors.Menu.HotNormal = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_GRAY);
Colors.Menu.HotFocus = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_BLACK);
Colors.Menu.Disabled = MakeColor (Curses.COLOR_WHITE, Curses.COLOR_GRAY);
Colors.Dialog.Normal = MakeColor (Curses.COLOR_BLACK, Curses.COLOR_WHITE);
Colors.Dialog.Focus = MakeColor (Curses.COLOR_BLACK, Curses.COLOR_CYAN);
Colors.Dialog.Focus = MakeColor (Curses.COLOR_WHITE, Curses.COLOR_GRAY);
Colors.Dialog.HotNormal = MakeColor (Curses.COLOR_BLUE, Curses.COLOR_WHITE);
Colors.Dialog.HotFocus = MakeColor (Curses.COLOR_BLUE, Curses.COLOR_CYAN);
Colors.Dialog.HotFocus = MakeColor (Curses.COLOR_BLUE, Curses.COLOR_GRAY);
Colors.Error.Normal = Curses.A_BOLD | MakeColor (Curses.COLOR_WHITE, Curses.COLOR_RED);
Colors.Error.Focus = MakeColor (Curses.COLOR_BLACK, Curses.COLOR_WHITE);
Colors.Error.HotNormal = Curses.A_BOLD | MakeColor (Curses.COLOR_YELLOW, Curses.COLOR_RED);
Colors.Error.HotFocus = Colors.Error.HotNormal;
Colors.Error.Normal = MakeColor (Curses.COLOR_RED, Curses.COLOR_WHITE);
Colors.Error.Focus = Curses.A_BOLD | MakeColor (Curses.COLOR_WHITE, Curses.COLOR_RED);
Colors.Error.HotNormal = MakeColor (Curses.COLOR_BLACK, Curses.COLOR_WHITE);
Colors.Error.HotFocus = Curses.A_BOLD | MakeColor (Curses.COLOR_BLACK, Curses.COLOR_RED);
} else {
Colors.TopLevel.Normal = Curses.COLOR_GREEN;
Colors.TopLevel.Focus = Curses.COLOR_WHITE;
@@ -852,21 +855,22 @@ namespace Terminal.Gui {
case Color.Gray:
return Curses.COLOR_WHITE;
case Color.DarkGray:
return Curses.COLOR_BLACK | Curses.A_BOLD;
//return Curses.COLOR_BLACK | Curses.A_BOLD;
return Curses.COLOR_GRAY;
case Color.BrightBlue:
return Curses.COLOR_BLUE | Curses.A_BOLD;
return Curses.COLOR_BLUE | Curses.A_BOLD | Curses.COLOR_GRAY;
case Color.BrightGreen:
return Curses.COLOR_GREEN | Curses.A_BOLD;
return Curses.COLOR_GREEN | Curses.A_BOLD | Curses.COLOR_GRAY;
case Color.BrightCyan:
return Curses.COLOR_CYAN | Curses.A_BOLD;
return Curses.COLOR_CYAN | Curses.A_BOLD | Curses.COLOR_GRAY;
case Color.BrightRed:
return Curses.COLOR_RED | Curses.A_BOLD;
return Curses.COLOR_RED | Curses.A_BOLD | Curses.COLOR_GRAY;
case Color.BrightMagenta:
return Curses.COLOR_MAGENTA | Curses.A_BOLD;
return Curses.COLOR_MAGENTA | Curses.A_BOLD | Curses.COLOR_GRAY;
case Color.BrightYellow:
return Curses.COLOR_YELLOW | Curses.A_BOLD;
return Curses.COLOR_YELLOW | Curses.A_BOLD | Curses.COLOR_GRAY;
case Color.White:
return Curses.COLOR_WHITE | Curses.A_BOLD;
return Curses.COLOR_WHITE | Curses.A_BOLD | Curses.COLOR_GRAY;
}
throw new ArgumentException ("Invalid color code");
}

View File

@@ -51,6 +51,7 @@ namespace Unix.Terminal {
public const int COLOR_MAGENTA = unchecked((int)0x5);
public const int COLOR_CYAN = unchecked((int)0x6);
public const int COLOR_WHITE = unchecked((int)0x7);
public const int COLOR_GRAY = unchecked((int)0x8);
public const int KEY_CODE_YES = unchecked((int)0x100);
public const int KEY_CODE_SEQ = unchecked((int)0x5b);
public const int ERR = unchecked((int)0xffffffff);

View File

@@ -1210,31 +1210,31 @@ namespace Terminal.Gui {
Colors.TopLevel.HotNormal = MakeColor (ConsoleColor.DarkYellow, ConsoleColor.Black);
Colors.TopLevel.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkCyan);
Colors.Base.Normal = MakeColor (ConsoleColor.White, ConsoleColor.Blue);
Colors.Base.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.Cyan);
Colors.Base.HotNormal = MakeColor (ConsoleColor.Yellow, ConsoleColor.Blue);
Colors.Base.HotFocus = MakeColor (ConsoleColor.Yellow, ConsoleColor.Cyan);
Colors.Base.Normal = MakeColor (ConsoleColor.White, ConsoleColor.DarkBlue);
Colors.Base.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.Gray);
Colors.Base.HotNormal = MakeColor (ConsoleColor.DarkCyan, ConsoleColor.DarkBlue);
Colors.Base.HotFocus = MakeColor (ConsoleColor.Blue, ConsoleColor.Gray);
// Focused,
// Selected, Hot: Yellow on Black
// Selected, text: white on black
// Unselected, hot: yellow on cyan
// unselected, text: same as unfocused
Colors.Menu.HotFocus = MakeColor (ConsoleColor.Yellow, ConsoleColor.Black);
Colors.Menu.Normal = MakeColor (ConsoleColor.White, ConsoleColor.DarkGray);
Colors.Menu.Focus = MakeColor (ConsoleColor.White, ConsoleColor.Black);
Colors.Menu.HotNormal = MakeColor (ConsoleColor.Yellow, ConsoleColor.Cyan);
Colors.Menu.Normal = MakeColor (ConsoleColor.White, ConsoleColor.Cyan);
Colors.Menu.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Cyan);
Colors.Menu.HotNormal = MakeColor (ConsoleColor.Yellow, ConsoleColor.DarkGray);
Colors.Menu.HotFocus = MakeColor (ConsoleColor.Yellow, ConsoleColor.Black);
Colors.Menu.Disabled = MakeColor (ConsoleColor.Gray, ConsoleColor.DarkGray);
Colors.Dialog.Normal = MakeColor (ConsoleColor.Black, ConsoleColor.Gray);
Colors.Dialog.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.Cyan);
Colors.Dialog.HotNormal = MakeColor (ConsoleColor.Blue, ConsoleColor.Gray);
Colors.Dialog.HotFocus = MakeColor (ConsoleColor.Blue, ConsoleColor.Cyan);
Colors.Dialog.Focus = MakeColor (ConsoleColor.White, ConsoleColor.DarkGray);
Colors.Dialog.HotNormal = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.Gray);
Colors.Dialog.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkGray);
Colors.Error.Normal = MakeColor (ConsoleColor.White, ConsoleColor.Red);
Colors.Error.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.Gray);
Colors.Error.HotNormal = MakeColor (ConsoleColor.Yellow, ConsoleColor.Red);
Colors.Error.HotFocus = Colors.Error.HotNormal;
Colors.Error.Normal = MakeColor (ConsoleColor.DarkRed, ConsoleColor.White);
Colors.Error.Focus = MakeColor (ConsoleColor.White, ConsoleColor.DarkRed);
Colors.Error.HotNormal = MakeColor (ConsoleColor.Black, ConsoleColor.White);
Colors.Error.HotFocus = MakeColor (ConsoleColor.Black, ConsoleColor.DarkRed);
}
void ResizeScreen ()

View File

@@ -1210,7 +1210,7 @@ namespace Terminal.Gui {
Colors.Menu.Disabled = MakeColor (ConsoleColor.Gray, ConsoleColor.DarkGray);
Colors.Dialog.Normal = MakeColor (ConsoleColor.Black, ConsoleColor.Gray);
Colors.Dialog.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.DarkGray);
Colors.Dialog.Focus = MakeColor (ConsoleColor.White, ConsoleColor.DarkGray);
Colors.Dialog.HotNormal = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.Gray);
Colors.Dialog.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkGray);

View File

@@ -0,0 +1,48 @@
using Terminal.Gui;
namespace UICatalog {
[ScenarioMetadata (Name: "Basic Colors", Description: "Show all basic colors.")]
[ScenarioCategory ("Colors")]
class BasicColors : Scenario {
public override void Setup ()
{
var vx = 30;
var x = 30;
var y = 14;
var colors = System.Enum.GetValues (typeof (Color));
foreach (Color bg in colors) {
var vl = new Label (bg.ToString (), TextDirection.TopBottom_LeftRight) {
X = vx,
Y = 0,
Width = 1,
Height = 13,
VerticalTextAlignment = VerticalTextAlignment.Bottom,
ColorScheme = new ColorScheme () { Normal = new Attribute (bg, colors.Length - 1 - bg) }
};
Win.Add (vl);
var hl = new Label (bg.ToString ()) {
X = 15,
Y = y,
Width = 13,
Height = 1,
TextAlignment = TextAlignment.Right,
ColorScheme = new ColorScheme () { Normal = new Attribute (bg, colors.Length - 1 - bg) }
};
Win.Add (hl);
vx++;
foreach (Color fg in colors) {
var c = new Attribute (fg, bg);
var t = x.ToString ();
var l = new Label (x, y, t [t.Length - 1].ToString ()) {
ColorScheme = new ColorScheme () { Normal = c }
};
Win.Add (l);
x++;
}
x = 30;
y++;
}
}
}
}