mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-10-31 18:48:11 +08:00 
			
		
		
		
	Feature: LinearGradient color decorator. (#592)
				
					
				
			Based on the existing color decorators, create new ones to apply a gradient effect on the DOM. Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
This commit is contained in:
		 Vinicius Moura Longaray
					Vinicius Moura Longaray
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							2991b0389e
						
					
				
				
					commit
					e83e90ced2
				
			| @@ -17,6 +17,7 @@ example(focus_cursor) | ||||
| example(gallery) | ||||
| example(homescreen) | ||||
| example(input) | ||||
| example(linear_gradient_gallery) | ||||
| example(maybe) | ||||
| example(menu) | ||||
| example(menu2) | ||||
|   | ||||
							
								
								
									
										56
									
								
								examples/component/linear_gradient_gallery.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								examples/component/linear_gradient_gallery.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| #include <ftxui/component/component_base.hpp>  // for ComponentBase, Component | ||||
| #include <ftxui/dom/elements.hpp>  // for operator|, Element, flex, bgcolor, text, vbox, center | ||||
| #include <ftxui/dom/linear_gradient.hpp>  // for LinearGradient | ||||
| #include <ftxui/screen/color.hpp>         // for Color, Color::Blue, Color::Red | ||||
| #include <memory>                         // for __shared_ptr_access, shared_ptr | ||||
| #include <string>  // for allocator, operator+, char_traits, string, to_string | ||||
|  | ||||
| #include "ftxui/component/captured_mouse.hpp"  // for ftxui | ||||
| #include "ftxui/component/component.hpp"       // for Slider, Renderer, Vertical | ||||
| #include "ftxui/component/screen_interactive.hpp"  // for ScreenInteractive | ||||
|  | ||||
| int main(int argc, const char* argv[]) { | ||||
|   using namespace ftxui; | ||||
|   auto screen = ScreenInteractive::Fullscreen(); | ||||
|  | ||||
|   int angle = 180.f; | ||||
|   float start = 0.f; | ||||
|   float end = 1.f; | ||||
|  | ||||
|   std::string slider_angle_text; | ||||
|   std::string slider_start_text; | ||||
|   std::string slider_end_text; | ||||
|  | ||||
|   auto slider_angle = Slider(&slider_angle_text, &angle, 0, 360); | ||||
|   auto slider_start = Slider(&slider_start_text, &start, 0.f, 1.f); | ||||
|   auto slider_end = Slider(&slider_end_text, &end, 0.f, 1.f); | ||||
|  | ||||
|   auto layout = Container::Vertical({ | ||||
|       slider_angle, | ||||
|       slider_start, | ||||
|       slider_end, | ||||
|   }); | ||||
|  | ||||
|   auto renderer = Renderer(layout, [&] { | ||||
|     slider_angle_text = "angle = " + std::to_string(angle) + "°"; | ||||
|     slider_start_text = "start = " + std::to_string(int(start * 100)) + "%"; | ||||
|     slider_end_text = "end   = " + std::to_string(int(end * 100)) + "%"; | ||||
|  | ||||
|     auto background = text("Gradient") | center | | ||||
|                       bgcolor(LinearGradient() | ||||
|                                   .Angle(angle) | ||||
|                                   .Stop(Color::Blue, start) | ||||
|                                   .Stop(Color::Red, end)); | ||||
|     return vbox({ | ||||
|                background | flex, | ||||
|                layout->Render(), | ||||
|            }) | | ||||
|            flex; | ||||
|   }); | ||||
|  | ||||
|   screen.Loop(renderer); | ||||
| } | ||||
|  | ||||
| // Copyright 2023 Arthur Sonzogni. All rights reserved. | ||||
| // Use of this source code is governed by the MIT license that can be found in | ||||
| // the LICENSE file. | ||||
| @@ -3,18 +3,19 @@ set(DIRECTORY_LIB dom) | ||||
| example(border) | ||||
| example(border_colored) | ||||
| example(border_style) | ||||
| example(canvas) | ||||
| example(color_gallery) | ||||
| example(color_info_palette256) | ||||
| example(color_truecolor_HSV) | ||||
| example(color_truecolor_RGB) | ||||
| example(dbox) | ||||
| example(canvas) | ||||
| example(gauge) | ||||
| example(gauge_direction) | ||||
| example(graph) | ||||
| example(gridbox) | ||||
| example(hflow) | ||||
| example(html_like) | ||||
| example(linear_gradient) | ||||
| example(package_manager) | ||||
| example(paragraph) | ||||
| example(separator) | ||||
|   | ||||
							
								
								
									
										26
									
								
								examples/dom/linear_gradient.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								examples/dom/linear_gradient.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| #include <ftxui/dom/elements.hpp>  // for bgcolor, operator|, operator|=, text, center, Element | ||||
| #include <ftxui/dom/linear_gradient.hpp>  // for LinearGradient::Stop, LinearGradient | ||||
| #include <ftxui/screen/screen.hpp>        // for Full, Screen | ||||
| #include <memory>                         // for allocator, shared_ptr | ||||
|  | ||||
| #include "ftxui/dom/node.hpp"  // for Render | ||||
| #include "ftxui/screen/color.hpp"  // for Color, Color::DeepPink1, Color::DeepSkyBlue1, Color::Yellow, ftxui | ||||
|  | ||||
| int main(int argc, const char* argv[]) { | ||||
|   using namespace ftxui; | ||||
|   auto document = text("gradient") | center; | ||||
|  | ||||
|   document |= bgcolor(LinearGradient() | ||||
|                           .Angle(45) | ||||
|                           .Stop(Color::DeepPink1) | ||||
|                           .Stop(Color::DeepSkyBlue1)); | ||||
|   auto screen = Screen::Create(Dimension::Full(), Dimension::Full()); | ||||
|   Render(screen, document); | ||||
|   screen.Print(); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| // Copyright 2023 Arthur Sonzogni. All rights reserved. | ||||
| // Use of this source code is governed by the MIT license that can be found in | ||||
| // the LICENSE file. | ||||
| @@ -1,59 +1,60 @@ | ||||
| #include <ftxui/screen/screen.hpp>  // for Full, Screen | ||||
| #include <memory>                   // for allocator | ||||
| #include <ftxui/dom/linear_gradient.hpp>  // for LinearGradient | ||||
| #include <ftxui/screen/screen.hpp>        // for Full, Screen | ||||
| #include <memory>                         // for allocator | ||||
|  | ||||
| #include "ftxui/dom/elements.hpp"  // for text, bgcolor, color, vbox, Fit, filler, hbox | ||||
| #include "ftxui/dom/elements.hpp"  // for text, bgcolor, color, vbox, filler, Fit, hbox | ||||
| #include "ftxui/dom/node.hpp"      // for Render | ||||
| #include "ftxui/screen/box.hpp"    // for ftxui | ||||
| #include "ftxui/screen/color.hpp"  // for Color, Color::Black, Color::Blue, Color::BlueLight, Color::Cyan, Color::CyanLight, Color::Default, Color::GrayDark, Color::GrayLight, Color::Green, Color::GreenLight, Color::Magenta, Color::MagentaLight, Color::Red, Color::RedLight, Color::White, Color::Yellow, Color::YellowLight | ||||
| #include "ftxui/screen/color.hpp"  // for Color, operator""_rgb, Color::Black, Color::Blue, Color::BlueLight, Color::Cyan, Color::CyanLight, Color::DeepSkyBlue4, Color::Default, Color::GrayDark, Color::GrayLight, Color::Green, Color::GreenLight, Color::Magenta, Color::MagentaLight, Color::Red, Color::RedLight, Color::SkyBlue1, Color::White, Color::Yellow, Color::YellowLight, ftxui | ||||
|  | ||||
| int main(int argc, const char* argv[]) { | ||||
|   using namespace ftxui; | ||||
|   // clang-format off | ||||
|   auto document = | ||||
|     hbox( | ||||
|       vbox( | ||||
|         color(Color::Default, text("Default")), | ||||
|         color(Color::Black, text("Black")), | ||||
|         color(Color::GrayDark, text("GrayDark")), | ||||
|         color(Color::GrayLight, text("GrayLight")), | ||||
|         color(Color::White, text("White")), | ||||
|         color(Color::Blue, text("Blue")), | ||||
|         color(Color::BlueLight, text("BlueLight")), | ||||
|         color(Color::Cyan, text("Cyan")), | ||||
|         color(Color::CyanLight, text("CyanLight")), | ||||
|         color(Color::Green, text("Green")), | ||||
|         color(Color::GreenLight, text("GreenLight")), | ||||
|         color(Color::Magenta, text("Magenta")), | ||||
|         color(Color::MagentaLight, text("MagentaLight")), | ||||
|         color(Color::Red, text("Red")), | ||||
|         color(Color::RedLight, text("RedLight")), | ||||
|         color(Color::Yellow, text("Yellow")), | ||||
|         color(Color::YellowLight, text("YellowLight")), | ||||
|         color(0x66ff66_rgb, text("Phosphor")) | ||||
|       ), | ||||
|       vbox( | ||||
|         bgcolor(Color::Default, text("Default")), | ||||
|         bgcolor(Color::Black, text("Black")), | ||||
|         bgcolor(Color::GrayDark, text("GrayDark")), | ||||
|         bgcolor(Color::GrayLight, text("GrayLight")), | ||||
|         bgcolor(Color::White, text("White")), | ||||
|         bgcolor(Color::Blue, text("Blue")), | ||||
|         bgcolor(Color::BlueLight, text("BlueLight")), | ||||
|         bgcolor(Color::Cyan, text("Cyan")), | ||||
|         bgcolor(Color::CyanLight, text("CyanLight")), | ||||
|         bgcolor(Color::Green, text("Green")), | ||||
|         bgcolor(Color::GreenLight, text("GreenLight")), | ||||
|         bgcolor(Color::Magenta, text("Magenta")), | ||||
|         bgcolor(Color::MagentaLight, text("MagentaLight")), | ||||
|         bgcolor(Color::Red, text("Red")), | ||||
|         bgcolor(Color::RedLight, text("RedLight")), | ||||
|         bgcolor(Color::Yellow, text("Yellow")), | ||||
|         bgcolor(Color::YellowLight, text("YellowLight")), | ||||
|         bgcolor(0x66ff66_rgb, text("Phosphor")) | ||||
|       ), | ||||
|       filler() | ||||
|     ); | ||||
|   // clang-format on | ||||
|   auto document = hbox({ | ||||
|       vbox({ | ||||
|           color(Color::Default, text("Default")), | ||||
|           color(Color::Black, text("Black")), | ||||
|           color(Color::GrayDark, text("GrayDark")), | ||||
|           color(Color::GrayLight, text("GrayLight")), | ||||
|           color(Color::White, text("White")), | ||||
|           color(Color::Blue, text("Blue")), | ||||
|           color(Color::BlueLight, text("BlueLight")), | ||||
|           color(Color::Cyan, text("Cyan")), | ||||
|           color(Color::CyanLight, text("CyanLight")), | ||||
|           color(Color::Green, text("Green")), | ||||
|           color(Color::GreenLight, text("GreenLight")), | ||||
|           color(Color::Magenta, text("Magenta")), | ||||
|           color(Color::MagentaLight, text("MagentaLight")), | ||||
|           color(Color::Red, text("Red")), | ||||
|           color(Color::RedLight, text("RedLight")), | ||||
|           color(Color::Yellow, text("Yellow")), | ||||
|           color(Color::YellowLight, text("YellowLight")), | ||||
|           color(0x66ff66_rgb, text("Phosphor")), | ||||
|           color(LinearGradient(Color::SkyBlue1, Color::DeepSkyBlue4), | ||||
|                 text("Skyblue to DeepSkyBlue")), | ||||
|       }), | ||||
|       vbox({ | ||||
|           bgcolor(Color::Default, text("Default")), | ||||
|           bgcolor(Color::Black, text("Black")), | ||||
|           bgcolor(Color::GrayDark, text("GrayDark")), | ||||
|           bgcolor(Color::GrayLight, text("GrayLight")), | ||||
|           bgcolor(Color::White, text("White")), | ||||
|           bgcolor(Color::Blue, text("Blue")), | ||||
|           bgcolor(Color::BlueLight, text("BlueLight")), | ||||
|           bgcolor(Color::Cyan, text("Cyan")), | ||||
|           bgcolor(Color::CyanLight, text("CyanLight")), | ||||
|           bgcolor(Color::Green, text("Green")), | ||||
|           bgcolor(Color::GreenLight, text("GreenLight")), | ||||
|           bgcolor(Color::Magenta, text("Magenta")), | ||||
|           bgcolor(Color::MagentaLight, text("MagentaLight")), | ||||
|           bgcolor(Color::Red, text("Red")), | ||||
|           bgcolor(Color::RedLight, text("RedLight")), | ||||
|           bgcolor(Color::Yellow, text("Yellow")), | ||||
|           bgcolor(Color::YellowLight, text("YellowLight")), | ||||
|           bgcolor(0x66ff66_rgb, text("Phosphor")), | ||||
|           bgcolor(LinearGradient(Color::SkyBlue1, Color::DeepSkyBlue4), | ||||
|                   text("Skyblue to DeepSkyBlue")), | ||||
|       }), | ||||
|       filler(), | ||||
|   }); | ||||
|  | ||||
|   auto screen = Screen::Create(Dimension::Full(), Dimension::Fit(document)); | ||||
|   Render(screen, document); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user