diff --git a/UICatalog/Scenarios/TextEffectsScenario.cs b/UICatalog/Scenarios/TextEffectsScenario.cs new file mode 100644 index 000000000..00cb4cb5f --- /dev/null +++ b/UICatalog/Scenarios/TextEffectsScenario.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Terminal.Gui; +using Terminal.Gui.TextEffects; +using static UICatalog.Scenario; + + +using Color = Terminal.Gui.TextEffects.Color; + +namespace UICatalog.Scenarios; + + + +[ScenarioMetadata ("Text Effects", "Text Effects.")] +[ScenarioCategory ("Colors")] +public class TextEffectsScenario : Scenario +{ + public override void Main () + { + Application.Init (); + var top = Application.Top; + + // Creates a window that occupies the entire terminal with a title. + var window = new Window () + { + X = 0, + Y = 1, // Leaves one row for the toplevel menu + + // By using Dim.Fill(), it will automatically resize without manual intervention + Width = Dim.Fill (), + Height = Dim.Fill (), + Title = "Text Effects Scenario" + }; + + // Create a large empty view. + var emptyView = new TextEffectsExampleView () + { + X = 0, + Y = 0, + Width = Dim.Fill (), + Height = Dim.Fill () , + }; + + window.Add (emptyView); + + // Create a label in the center of the window. + var label = new Label () + { + X = Pos.Center (), + Y = Pos.Center (), + Width = 10, + Height = 1, + Title = "Hello" + }; + window.Add (label); + + Application.Run (window); + Application.Shutdown (); + } +} + +internal class TextEffectsExampleView : View +{ + public override void OnDrawContent (Rectangle viewport) + { + base.OnDrawContent (viewport); + + // Define the colors of the rainbow + var stops = new List + { + Color.FromRgb(255, 0, 0), // Red + Color.FromRgb(255, 165, 0), // Orange + Color.FromRgb(255, 255, 0), // Yellow + Color.FromRgb(0, 128, 0), // Green + Color.FromRgb(0, 0, 255), // Blue + Color.FromRgb(75, 0, 130), // Indigo + Color.FromRgb(238, 130, 238) // Violet + }; + + // Define the number of steps between each color + var steps = new List + { + 20, // between Red and Orange + 20, // between Orange and Yellow + 20, // between Yellow and Green + 20, // between Green and Blue + 20, // between Blue and Indigo + 20 // between Indigo and Violet + }; + + // Create the gradient + var rainbowGradient = new Gradient (stops, steps, loop: true); + + + for (int x = 0 ; x < viewport.Width; x++) + { + double fraction = (double)x / (viewport.Width - 1); + Color color = rainbowGradient.GetColorAtFraction (fraction); + + // Assuming AddRune is a method you have for drawing at specific positions + Application.Driver.SetAttribute ( + + new Attribute ( + new Terminal.Gui.Color(color.R, color.G, color.B), + new Terminal.Gui.Color (color.R, color.G, color.B) + )); // Setting color based on RGB + + + AddRune (x, 0, new Rune ('█')); + } + } +} \ No newline at end of file