Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added abstract MakeColor and CreateColors to create the colors at once. #1972

Merged
merged 5 commits into from
Sep 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 4 additions & 41 deletions Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ public static Attribute MakeColor (short foreground, short background)
background: MapCursesColor (background));
}

static Attribute MakeColor (Color fore, Color back)
public override Attribute MakeColor (Color fore, Color back)
{
return MakeColor ((short)MapColor (fore), (short)MapColor (back));
}
Expand Down Expand Up @@ -889,51 +889,14 @@ public override void Init (Action terminalResized)
//UpArrow = Curses.ACS_UARROW;
//DownArrow = Curses.ACS_DARROW;

Colors.TopLevel = new ColorScheme ();
Colors.Base = new ColorScheme ();
Colors.Dialog = new ColorScheme ();
Colors.Menu = new ColorScheme ();
Colors.Error = new ColorScheme ();

if (Curses.HasColors) {
Curses.StartColor ();
Curses.UseDefaultColors ();

Colors.TopLevel.Normal = MakeColor (Color.Green, Color.Black);
Colors.TopLevel.Focus = MakeColor (Color.White, Color.Cyan);
Colors.TopLevel.HotNormal = MakeColor (Color.Brown, Color.Black);
Colors.TopLevel.HotFocus = MakeColor (Color.Blue, Color.Cyan);
Colors.TopLevel.Disabled = MakeColor (Color.DarkGray, Color.Black);

Colors.Base.Normal = MakeColor (Color.White, Color.Blue);
Colors.Base.Focus = MakeColor (Color.Black, Color.Gray);
Colors.Base.HotNormal = MakeColor (Color.BrightCyan, Color.Blue);
Colors.Base.HotFocus = MakeColor (Color.BrightBlue, Color.Gray);
Colors.Base.Disabled = MakeColor (Color.DarkGray, Color.Blue);

// Focused,
// Selected, Hot: Yellow on Black
// Selected, text: white on black
// Unselected, hot: yellow on cyan
// unselected, text: same as unfocused
Colors.Menu.Normal = MakeColor (Color.White, Color.DarkGray);
Colors.Menu.Focus = MakeColor (Color.White, Color.Black);
Colors.Menu.HotNormal = MakeColor (Color.BrightYellow, Color.DarkGray);
Colors.Menu.HotFocus = MakeColor (Color.BrightYellow, Color.Black);
Colors.Menu.Disabled = MakeColor (Color.Gray, Color.DarkGray);

Colors.Dialog.Normal = MakeColor (Color.Black, Color.Gray);
Colors.Dialog.Focus = MakeColor (Color.White, Color.DarkGray);
Colors.Dialog.HotNormal = MakeColor (Color.Blue, Color.Gray);
Colors.Dialog.HotFocus = MakeColor (Color.Blue, Color.DarkGray);
Colors.Dialog.Disabled = MakeColor (Color.DarkGray, Color.Gray);

Colors.Error.Normal = MakeColor (Color.Red, Color.White);
Colors.Error.Focus = MakeColor (Color.White, Color.Red);
Colors.Error.HotNormal = MakeColor (Color.Black, Color.White);
Colors.Error.HotFocus = MakeColor (Color.Black, Color.Red);
Colors.Error.Disabled = MakeColor (Color.DarkGray, Color.White);
CreateColors ();
} else {
CreateColors (false);

Colors.TopLevel.Normal = Curses.COLOR_GREEN;
Colors.TopLevel.Focus = Curses.COLOR_WHITE;
Colors.TopLevel.HotNormal = Curses.COLOR_YELLOW;
Expand Down
47 changes: 6 additions & 41 deletions Terminal.Gui/ConsoleDrivers/FakeDriver/FakeDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,11 @@ public override void End ()
FakeConsole.Clear ();
}

public override Attribute MakeColor (Color foreground, Color background)
{
return MakeColor ((ConsoleColor)foreground, (ConsoleColor)background);
}

static Attribute MakeColor (ConsoleColor f, ConsoleColor b)
{
// Encode the colors into the int value.
Expand All @@ -177,47 +182,7 @@ public override void Init (Action terminalResized)
ResizeScreen ();
UpdateOffScreen ();

Colors.TopLevel = new ColorScheme ();
Colors.Base = new ColorScheme ();
Colors.Dialog = new ColorScheme ();
Colors.Menu = new ColorScheme ();
Colors.Error = new ColorScheme ();
Clip = new Rect (0, 0, Cols, Rows);

Colors.TopLevel.Normal = MakeColor (ConsoleColor.Green, ConsoleColor.Black);
Colors.TopLevel.Focus = MakeColor (ConsoleColor.White, ConsoleColor.DarkCyan);
Colors.TopLevel.HotNormal = MakeColor (ConsoleColor.DarkYellow, ConsoleColor.Black);
Colors.TopLevel.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkCyan);
Colors.TopLevel.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Black);

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.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.DarkBlue);

// 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.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.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.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Gray);

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.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.White);
CreateColors ();

//MockConsole.Clear ();
}
Expand Down
46 changes: 6 additions & 40 deletions Terminal.Gui/ConsoleDrivers/NetDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1309,6 +1309,11 @@ void Clear ()
}
}

public override Attribute MakeColor (Color foreground, Color background)
{
return MakeColor ((ConsoleColor)foreground, (ConsoleColor)background);
}

static Attribute MakeColor (ConsoleColor f, ConsoleColor b)
{
// Encode the colors into the int value.
Expand Down Expand Up @@ -1337,46 +1342,7 @@ public override void Init (Action terminalResized)

StartReportingMouseMoves ();

Colors.TopLevel = new ColorScheme ();
Colors.Base = new ColorScheme ();
Colors.Dialog = new ColorScheme ();
Colors.Menu = new ColorScheme ();
Colors.Error = new ColorScheme ();

Colors.TopLevel.Normal = MakeColor (ConsoleColor.Green, ConsoleColor.Black);
Colors.TopLevel.Focus = MakeColor (ConsoleColor.White, ConsoleColor.DarkCyan);
Colors.TopLevel.HotNormal = MakeColor (ConsoleColor.DarkYellow, ConsoleColor.Black);
Colors.TopLevel.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkCyan);
Colors.TopLevel.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Black);

Colors.Base.Normal = MakeColor (ConsoleColor.White, ConsoleColor.DarkBlue);
Colors.Base.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.Gray);
Colors.Base.HotNormal = MakeColor (ConsoleColor.Cyan, ConsoleColor.DarkBlue);
Colors.Base.HotFocus = MakeColor (ConsoleColor.Blue, ConsoleColor.Gray);
Colors.Base.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.DarkBlue);

// Focused,
// Selected, Hot: Yellow on Black
// Selected, text: white on black
// Unselected, hot: yellow on cyan
// unselected, text: same as unfocused
Colors.Menu.Normal = MakeColor (ConsoleColor.White, ConsoleColor.DarkGray);
Colors.Menu.Focus = MakeColor (ConsoleColor.White, ConsoleColor.Black);
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.White, ConsoleColor.DarkGray);
Colors.Dialog.HotNormal = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.Gray);
Colors.Dialog.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkGray);
Colors.Dialog.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Gray);

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);
Colors.Error.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.White);
CreateColors ();

Clear ();
}
Expand Down
41 changes: 6 additions & 35 deletions Terminal.Gui/ConsoleDrivers/WindowsDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1397,41 +1397,7 @@ public override void Init (Action terminalResized)
ResizeScreen ();
UpdateOffScreen ();

Colors.TopLevel = new ColorScheme ();
Colors.Base = new ColorScheme ();
Colors.Dialog = new ColorScheme ();
Colors.Menu = new ColorScheme ();
Colors.Error = new ColorScheme ();

Colors.TopLevel.Normal = MakeColor (ConsoleColor.Green, ConsoleColor.Black);
Colors.TopLevel.Focus = MakeColor (ConsoleColor.White, ConsoleColor.DarkCyan);
Colors.TopLevel.HotNormal = MakeColor (ConsoleColor.DarkYellow, ConsoleColor.Black);
Colors.TopLevel.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkCyan);
Colors.TopLevel.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Black);

Colors.Base.Normal = MakeColor (ConsoleColor.White, ConsoleColor.DarkBlue);
Colors.Base.Focus = MakeColor (ConsoleColor.Black, ConsoleColor.Gray);
Colors.Base.HotNormal = MakeColor (ConsoleColor.Cyan, ConsoleColor.DarkBlue);
Colors.Base.HotFocus = MakeColor (ConsoleColor.Blue, ConsoleColor.Gray);
Colors.Base.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.DarkBlue);

Colors.Menu.Normal = MakeColor (ConsoleColor.White, ConsoleColor.DarkGray);
Colors.Menu.Focus = MakeColor (ConsoleColor.White, ConsoleColor.Black);
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.White, ConsoleColor.DarkGray);
Colors.Dialog.HotNormal = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.Gray);
Colors.Dialog.HotFocus = MakeColor (ConsoleColor.DarkBlue, ConsoleColor.DarkGray);
Colors.Dialog.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.Gray);

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);
Colors.Error.Disabled = MakeColor (ConsoleColor.DarkGray, ConsoleColor.White);
CreateColors ();
}

public override void ResizeScreen ()
Expand Down Expand Up @@ -1537,6 +1503,11 @@ public override void SetAttribute (Attribute c)
currentAttribute = c;
}

public override Attribute MakeColor (Color foreground, Color background)
{
return MakeColor ((ConsoleColor)foreground, (ConsoleColor)background);
}

Attribute MakeColor (ConsoleColor f, ConsoleColor b)
{
// Encode the colors into the int value.
Expand Down
55 changes: 55 additions & 0 deletions Terminal.Gui/Core/ConsoleDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1338,5 +1338,60 @@ public Rect Clip {
/// </summary>
/// <returns>The current attribute.</returns>
public abstract Attribute GetAttribute ();

/// <summary>
/// Make the <see cref="Colors"/> for the <see cref="ColorScheme"/>.
/// </summary>
/// <param name="foreground">The foreground color.</param>
/// <param name="background">The background color.</param>
/// <returns>The attribute for the foreground and background colors.</returns>
public abstract Attribute MakeColor (Color foreground, Color background);

/// <summary>
/// Create all <see cref="Colors"/> with the <see cref="ColorScheme"/> for the console driver.
/// </summary>
/// <param name="hasColors">Flag indicating if colors are supported.</param>
public void CreateColors (bool hasColors = true)
{
Colors.TopLevel = new ColorScheme ();
Colors.Base = new ColorScheme ();
Colors.Dialog = new ColorScheme ();
Colors.Menu = new ColorScheme ();
Colors.Error = new ColorScheme ();

if (!hasColors) {
return;
}

Colors.TopLevel.Normal = MakeColor (Color.BrightGreen, Color.Black);
Colors.TopLevel.Focus = MakeColor (Color.White, Color.Cyan);
Colors.TopLevel.HotNormal = MakeColor (Color.Brown, Color.Black);
Colors.TopLevel.HotFocus = MakeColor (Color.Blue, Color.Cyan);
Colors.TopLevel.Disabled = MakeColor (Color.DarkGray, Color.Black);

Colors.Base.Normal = MakeColor (Color.White, Color.Blue);
Colors.Base.Focus = MakeColor (Color.Black, Color.Gray);
Colors.Base.HotNormal = MakeColor (Color.BrightCyan, Color.Blue);
Colors.Base.HotFocus = MakeColor (Color.BrightBlue, Color.Gray);
Colors.Base.Disabled = MakeColor (Color.DarkGray, Color.Blue);

Colors.Dialog.Normal = MakeColor (Color.Black, Color.Gray);
Colors.Dialog.Focus = MakeColor (Color.White, Color.DarkGray);
Colors.Dialog.HotNormal = MakeColor (Color.Blue, Color.Gray);
Colors.Dialog.HotFocus = MakeColor (Color.BrightYellow, Color.DarkGray);
Colors.Dialog.Disabled = MakeColor (Color.Gray, Color.DarkGray);

Colors.Menu.Normal = MakeColor (Color.White, Color.DarkGray);
Colors.Menu.Focus = MakeColor (Color.White, Color.Black);
Colors.Menu.HotNormal = MakeColor (Color.BrightYellow, Color.DarkGray);
Colors.Menu.HotFocus = MakeColor (Color.BrightYellow, Color.Black);
Colors.Menu.Disabled = MakeColor (Color.Gray, Color.DarkGray);

Colors.Error.Normal = MakeColor (Color.Red, Color.White);
Colors.Error.Focus = MakeColor (Color.Black, Color.BrightRed);
Colors.Error.HotNormal = MakeColor (Color.Black, Color.White);
Colors.Error.HotFocus = MakeColor (Color.BrightRed, Color.Gray);
Colors.Error.Disabled = MakeColor (Color.DarkGray, Color.White);
}
}
}
29 changes: 11 additions & 18 deletions UICatalog/Scenarios/GraphViewExample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ private void MultiBarGraph ()

about.Text = "Housing Expenditures by income thirds 1996-2003";

var black = Application.Driver.MakeAttribute (graphView.ColorScheme.Normal.Foreground, Color.Black);
var fore = graphView.ColorScheme.Normal.Foreground == Color.Black ? Color.White : graphView.ColorScheme.Normal.Foreground;
var black = Application.Driver.MakeAttribute (fore, Color.Black);
var cyan = Application.Driver.MakeAttribute (Color.BrightCyan, Color.Black);
var magenta = Application.Driver.MakeAttribute (Color.BrightMagenta, Color.Black);
var red = Application.Driver.MakeAttribute (Color.BrightRed, Color.Black);
Expand Down Expand Up @@ -138,7 +139,7 @@ private void MultiBarGraph ()

graphView.AxisY.Minimum = 0;

var legend = new LegendAnnotation (new Rect (graphView.Bounds.Width - 20,0, 20, 5));
var legend = new LegendAnnotation (new Rect (graphView.Bounds.Width - 20, 0, 20, 5));
legend.AddEntry (new GraphCellToRender (stiple, series.SubSeries.ElementAt (0).OverrideBarColor), "Lower Third");
legend.AddEntry (new GraphCellToRender (stiple, series.SubSeries.ElementAt (1).OverrideBarColor), "Middle Third");
legend.AddEntry (new GraphCellToRender (stiple, series.SubSeries.ElementAt (2).OverrideBarColor), "Upper Third");
Expand Down Expand Up @@ -540,26 +541,19 @@ protected override void DrawBarLine (GraphView graph, Terminal.Gui.Point start,
var driver = Application.Driver;

int x = start.X;
for(int y = end.Y; y <= start.Y; y++) {
for (int y = end.Y; y <= start.Y; y++) {

var height = graph.ScreenToGraphSpace (x, y).Y;

if (height >= 85) {
driver.SetAttribute(red);
}
else
if (height >= 66) {
driver.SetAttribute (red);
} else if (height >= 66) {
driver.SetAttribute (brightred);
}
else
if (height >= 45) {
} else if (height >= 45) {
driver.SetAttribute (brightyellow);
}
else
if (height >= 25) {
} else if (height >= 25) {
driver.SetAttribute (brightgreen);
}
else{
} else {
driver.SetAttribute (green);
}

Expand Down Expand Up @@ -683,9 +677,8 @@ private void Zoom (float factor)
private void Margin (bool left, bool increase)
{
if (left) {
graphView.MarginLeft = (uint)Math.Max(0,graphView.MarginLeft + (increase ? 1 : -1));
}
else {
graphView.MarginLeft = (uint)Math.Max (0, graphView.MarginLeft + (increase ? 1 : -1));
} else {
graphView.MarginBottom = (uint)Math.Max (0, graphView.MarginBottom + (increase ? 1 : -1));
}

Expand Down