TrueColors.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using Terminal.Gui;
  3. namespace UICatalog.Scenarios {
  4. [ScenarioMetadata (Name: "True Colors", Description: "Demonstration of true color support.")]
  5. [ScenarioCategory ("Colors")]
  6. public class TrueColors : Scenario {
  7. public override void Setup ()
  8. {
  9. var x = 2;
  10. var y = 1;
  11. var canTrueColor = Application.Driver.SupportsTrueColor;
  12. var lblDriverName = new Label ($"Current driver is {Application.Driver.GetType ().Name}") {
  13. X = x,
  14. Y = y++
  15. };
  16. Win.Add (lblDriverName);
  17. y++;
  18. var cbSupportsTrueColor = new CheckBox ("Driver supports true color ") {
  19. X = x,
  20. Y = y++,
  21. Checked = canTrueColor,
  22. CanFocus = false
  23. };
  24. Win.Add (cbSupportsTrueColor);
  25. var cbUseTrueColor = new CheckBox ("Force 16 colors") {
  26. X = x,
  27. Y = y++,
  28. Checked = Application.Driver.Force16Colors,
  29. Enabled = canTrueColor,
  30. };
  31. cbUseTrueColor.Toggled += (_, evt) => {
  32. Application.Driver.Force16Colors = evt.NewValue ?? false;
  33. };
  34. Win.Add (cbUseTrueColor);
  35. y += 2;
  36. SetupGradient ("Red gradient", x, ref y, (i) => new Color (i, 0, 0));
  37. SetupGradient ("Green gradient", x, ref y, (i) => new Color (0, i, 0));
  38. SetupGradient ("Blue gradient", x, ref y, (i) => new Color (0, 0, i));
  39. SetupGradient ("Yellow gradient", x, ref y, (i) => new Color (i, i, 0));
  40. SetupGradient ("Magenta gradient", x, ref y, (i) => new Color (i, 0, i));
  41. SetupGradient ("Cyan gradient", x, ref y, (i) => new Color (0, i, i));
  42. SetupGradient ("Gray gradient", x, ref y, (i) => new Color (i, i, i));
  43. Win.Add (new Label ("Mouse over to get the gradient view color:") {
  44. X = Pos.AnchorEnd (44),
  45. Y = 2
  46. });
  47. Win.Add (new Label ("Red:") {
  48. X = Pos.AnchorEnd (44),
  49. Y = 4
  50. });
  51. Win.Add (new Label ("Green:") {
  52. X = Pos.AnchorEnd (44),
  53. Y = 5
  54. });
  55. Win.Add (new Label ("Blue:") {
  56. X = Pos.AnchorEnd (44),
  57. Y = 6
  58. });
  59. var lblRed = new Label ("na") {
  60. X = Pos.AnchorEnd (32),
  61. Y = 4
  62. };
  63. Win.Add (lblRed);
  64. var lblGreen = new Label ("na") {
  65. X = Pos.AnchorEnd (32),
  66. Y = 5
  67. };
  68. Win.Add (lblGreen);
  69. var lblBlue = new Label ("na") {
  70. X = Pos.AnchorEnd (32),
  71. Y = 6
  72. };
  73. Win.Add (lblBlue);
  74. Application.RootMouseEvent = (e) => {
  75. if (e.View != null) {
  76. var normal = e.View.GetNormalColor ();
  77. lblRed.Text = normal.Foreground.R.ToString ();
  78. lblGreen.Text = normal.Foreground.G.ToString ();
  79. lblBlue.Text = normal.Foreground.B.ToString ();
  80. }
  81. };
  82. }
  83. private void SetupGradient (string name, int x, ref int y, Func<int, Color> colorFunc)
  84. {
  85. var gradient = new Label (name) {
  86. X = x,
  87. Y = y++,
  88. };
  89. Win.Add (gradient);
  90. for (int dx = x, i = 0; i <= 256; i += 4) {
  91. var l = new Label (" ") {
  92. X = dx++,
  93. Y = y,
  94. ColorScheme = new ColorScheme () {
  95. Normal = new Terminal.Gui.Attribute (
  96. colorFunc (i > 255 ? 255 : i),
  97. colorFunc (i > 255 ? 255 : i)
  98. )
  99. }
  100. };
  101. Win.Add (l);
  102. }
  103. y += 2;
  104. }
  105. }
  106. }