123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using System;
- using Terminal.Gui;
- namespace UICatalog.Scenarios;
- [ScenarioMetadata ("True Colors", "Demonstration of true color support.")]
- [ScenarioCategory ("Colors")]
- public class TrueColors : Scenario
- {
- public override void Main ()
- {
- Application.Init ();
- Window app = new ()
- {
- Title = GetQuitKeyAndName ()
- };
- var x = 2;
- var y = 1;
- bool canTrueColor = Application.Driver?.SupportsTrueColor ?? false;
- var lblDriverName = new Label
- {
- X = x, Y = y++, Text = $"Current driver is {Application.Driver?.GetType ().Name}"
- };
- app.Add (lblDriverName);
- y++;
- var cbSupportsTrueColor = new CheckBox
- {
- X = x,
- Y = y++,
- State = canTrueColor ? CheckState.Checked : CheckState.UnChecked,
- CanFocus = false,
- Enabled = false,
- Text = "Driver supports true color "
- };
- app.Add (cbSupportsTrueColor);
- var cbUseTrueColor = new CheckBox
- {
- X = x,
- Y = y++,
- State = Application.Force16Colors ? CheckState.Checked : CheckState.UnChecked,
- Enabled = canTrueColor,
- Text = "Force 16 colors"
- };
- cbUseTrueColor.Toggle += (_, evt) => { Application.Force16Colors = evt.NewValue == CheckState.Checked; };
- app.Add (cbUseTrueColor);
- y += 2;
- SetupGradient ("Red gradient", x, ref y, i => new (i, 0));
- SetupGradient ("Green gradient", x, ref y, i => new (0, i));
- SetupGradient ("Blue gradient", x, ref y, i => new (0, 0, i));
- SetupGradient ("Yellow gradient", x, ref y, i => new (i, i));
- SetupGradient ("Magenta gradient", x, ref y, i => new (i, 0, i));
- SetupGradient ("Cyan gradient", x, ref y, i => new (0, i, i));
- SetupGradient ("Gray gradient", x, ref y, i => new (i, i, i));
- app.Add (
- new Label { X = Pos.AnchorEnd (44), Y = 2, Text = "Mouse over to get the gradient view color:" }
- );
- app.Add (
- new Label { X = Pos.AnchorEnd (44), Y = 4, Text = "Red:" }
- );
- app.Add (
- new Label { X = Pos.AnchorEnd (44), Y = 5, Text = "Green:" }
- );
- app.Add (
- new Label { X = Pos.AnchorEnd (44), Y = 6, Text = "Blue:" }
- );
- app.Add (
- new Label { X = Pos.AnchorEnd (44), Y = 8, Text = "Darker:" }
- );
- app.Add (
- new Label { X = Pos.AnchorEnd (44), Y = 9, Text = "Lighter:" }
- );
- var lblRed = new Label { X = Pos.AnchorEnd (32), Y = 4, Text = "na" };
- app.Add (lblRed);
- var lblGreen = new Label { X = Pos.AnchorEnd (32), Y = 5, Text = "na" };
- app.Add (lblGreen);
- var lblBlue = new Label { X = Pos.AnchorEnd (32), Y = 6, Text = "na" };
- app.Add (lblBlue);
- var lblDarker = new Label { X = Pos.AnchorEnd (32), Y = 8, Text = " " };
- app.Add (lblDarker);
- var lblLighter = new Label { X = Pos.AnchorEnd (32), Y = 9, Text = " " };
- app.Add (lblLighter);
- Application.MouseEvent += (s, e) =>
- {
- if (e.View == null)
- {
- return;
- }
- if (e.Flags == MouseFlags.Button1Clicked)
- {
- Attribute normal = e.View.GetNormalColor ();
- lblLighter.ColorScheme = new (e.View.ColorScheme)
- {
- Normal = new (
- normal.Foreground,
- normal.Background.GetHighlightColor ()
- )
- };
- }
- else
- {
- Attribute normal = e.View.GetNormalColor ();
- lblRed.Text = normal.Foreground.R.ToString ();
- lblGreen.Text = normal.Foreground.G.ToString ();
- lblBlue.Text = normal.Foreground.B.ToString ();
- }
- };
- Application.Run (app);
- app.Dispose ();
- Application.Shutdown ();
- return;
- void SetupGradient (string name, int x, ref int y, Func<int, Color> colorFunc)
- {
- var gradient = new Label { X = x, Y = y++, Text = name };
- app.Add (gradient);
- for (int dx = x, i = 0; i <= 256; i += 4)
- {
- var l = new Label
- {
- X = dx++,
- Y = y,
- ColorScheme = new()
- {
- Normal = new (
- colorFunc (Math.Clamp (i, 0, 255)),
- colorFunc (Math.Clamp (i, 0, 255))
- )
- },
- Text = " "
- };
- app.Add (l);
- }
- y += 2;
- }
- }
- }
|