mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-28 08:47:59 +01:00
* Fixes #1281. Fixed CursesDriver colors. Added BasicColors scenario. * Normalizing NetDriver too. * Fixing others colors.
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 ()
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
48
UICatalog/Scenarios/BasicColors.cs
Normal file
48
UICatalog/Scenarios/BasicColors.cs
Normal 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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user