Browse Source

Fixes #1358. Attribute.Foreground / Attribute.Background now working with CursesDriver

BDisp 4 years ago
parent
commit
7c1083114d
1 changed files with 45 additions and 4 deletions
  1. 45 4
      Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

+ 45 - 4
Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs

@@ -137,9 +137,10 @@ namespace Terminal.Gui {
 			return new Attribute (
 			return new Attribute (
 				//value: Curses.ColorPair (last_color_pair),
 				//value: Curses.ColorPair (last_color_pair),
 				value: Curses.ColorPair (v),
 				value: Curses.ColorPair (v),
-				foreground: (Color)foreground,
-				background: (Color)background);
-
+				//foreground: (Color)foreground,
+				foreground: MapCursesColor (foreground),
+				//background: (Color)background);
+				background: MapCursesColor (background));
 		}
 		}
 
 
 		int [,] colorPairs = new int [16, 16];
 		int [,] colorPairs = new int [16, 16];
@@ -897,10 +898,50 @@ namespace Terminal.Gui {
 			throw new ArgumentException ("Invalid color code");
 			throw new ArgumentException ("Invalid color code");
 		}
 		}
 
 
+		static Color MapCursesColor (int color)
+		{
+			switch (color) {
+			case Curses.COLOR_BLACK:
+				return Color.Black;
+			case Curses.COLOR_BLUE:
+				return Color.Blue;
+			case Curses.COLOR_GREEN:
+				return Color.Green;
+			case Curses.COLOR_CYAN:
+				return Color.Cyan;
+			case Curses.COLOR_RED:
+				return Color.Red;
+			case Curses.COLOR_MAGENTA:
+				return Color.Magenta;
+			case Curses.COLOR_YELLOW:
+				return Color.Brown;
+			case Curses.COLOR_WHITE:
+				return Color.Gray;
+			case Curses.COLOR_GRAY:
+				return Color.DarkGray;
+			case Curses.COLOR_BLUE | Curses.COLOR_GRAY:
+				return Color.BrightBlue;
+			case Curses.COLOR_GREEN | Curses.COLOR_GRAY:
+				return Color.BrightGreen;
+			case Curses.COLOR_CYAN | Curses.COLOR_GRAY:
+				return Color.BrightCyan;
+			case Curses.COLOR_RED | Curses.COLOR_GRAY:
+				return Color.BrightRed;
+			case Curses.COLOR_MAGENTA | Curses.COLOR_GRAY:
+				return Color.BrightMagenta;
+			case Curses.COLOR_YELLOW | Curses.COLOR_GRAY:
+				return Color.BrightYellow;
+			case Curses.COLOR_WHITE | Curses.COLOR_GRAY:
+				return Color.White;
+			}
+			throw new ArgumentException ("Invalid curses color code");
+		}
+
 		public override Attribute MakeAttribute (Color fore, Color back)
 		public override Attribute MakeAttribute (Color fore, Color back)
 		{
 		{
 			var f = MapColor (fore);
 			var f = MapColor (fore);
-			return MakeColor ((short)(f & 0xffff), (short)MapColor (back)) | ((f & Curses.A_BOLD) != 0 ? Curses.A_BOLD : 0);
+			//return MakeColor ((short)(f & 0xffff), (short)MapColor (back)) | ((f & Curses.A_BOLD) != 0 ? Curses.A_BOLD : 0);
+			return MakeColor ((short)(f & 0xffff), (short)MapColor (back));
 		}
 		}
 
 
 		public override void Suspend ()
 		public override void Suspend ()