mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-10-31 18:48:11 +08:00 
			
		
		
		
	 40e1fac3d4
			
		
	
	40e1fac3d4
	
	
	
		
			
			Warn users they have defined the min/max macros which is not compatible with other code from the standard library or FTXUI. Co-authored-by: Sylko Olzscher <sylko.olzscher@solostec.ch> Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
		
			
				
	
	
		
			95 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2020 Arthur Sonzogni. All rights reserved.
 | |
| // Use of this source code is governed by the MIT license that can be found in
 | |
| // the LICENSE file.
 | |
| #include <chrono>  // for operator""ms, literals
 | |
| #include <memory>  // for allocator, shared_ptr, __shared_ptr_access
 | |
| #include <string>  // for string, operator+, to_string, basic_string
 | |
| #include <vector>  // for vector
 | |
| 
 | |
| #include "ftxui/component/animation.hpp"       // for BackOut, Duration
 | |
| #include "ftxui/component/component.hpp"       // for Menu, Renderer, Vertical
 | |
| #include "ftxui/component/component_base.hpp"  // for ComponentBase
 | |
| #include "ftxui/component/component_options.hpp"  // for MenuOption, UnderlineOption
 | |
| #include "ftxui/component/mouse.hpp"              // for ftxui
 | |
| #include "ftxui/component/screen_interactive.hpp"  // for Component, ScreenInteractive
 | |
| #include "ftxui/dom/elements.hpp"  // for text, Element, operator|, borderEmpty, inverted
 | |
| #include "ftxui/screen/color.hpp"  // for Color, Color::Blue, Color::Red
 | |
| 
 | |
| using namespace ftxui;
 | |
| 
 | |
| Component DummyComponent(int id) {
 | |
|   return Renderer([id](bool focused) {
 | |
|     auto t = text("component " + std::to_string(id));
 | |
|     if (focused) {
 | |
|       t = t | inverted;
 | |
|     }
 | |
|     return t;
 | |
|   });
 | |
| }
 | |
| 
 | |
| Component Text(const std::string& t) {
 | |
|   return Renderer([t] { return text(t) | borderEmpty; });
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|   using namespace std::literals;
 | |
|   std::vector<std::string> tab_values{
 | |
|       "Tab 1", "Tab 2", "Tab 3", "A very very long tab", "탭",
 | |
|   };
 | |
|   int tab_selected = 0;
 | |
| 
 | |
|   auto container = Container::Vertical({});
 | |
| 
 | |
|   int frame_count = 0;
 | |
|   container->Add(Renderer(
 | |
|       [&] { return text("Frame count: " + std::to_string(frame_count++)); }));
 | |
| 
 | |
|   {
 | |
|     auto option = MenuOption::HorizontalAnimated();
 | |
|     container->Add(Text("This demonstrate the Menu component"));
 | |
|     container->Add(Menu(&tab_values, &tab_selected, option));
 | |
|   }
 | |
| 
 | |
|   {
 | |
|     container->Add(Text("Set underline color to blue"));
 | |
|     auto option = MenuOption::HorizontalAnimated();
 | |
|     option.underline.color_inactive = Color::Blue;
 | |
|     container->Add(Menu(&tab_values, &tab_selected, option));
 | |
|   }
 | |
| 
 | |
|   {
 | |
|     container->Add(Text("Set underline active color to red"));
 | |
|     auto option = MenuOption::HorizontalAnimated();
 | |
|     option.underline.color_active = Color::Red;
 | |
|     container->Add(Menu(&tab_values, &tab_selected, option));
 | |
|   }
 | |
| 
 | |
|   {
 | |
|     container->Add(Text("Set animation duration to 0ms"));
 | |
|     auto option = MenuOption::HorizontalAnimated();
 | |
|     option.underline.SetAnimationDuration(0ms);
 | |
|     container->Add(Menu(&tab_values, &tab_selected, option));
 | |
|   }
 | |
| 
 | |
|   {
 | |
|     container->Add(Text("Set animation easing function to back-out"));
 | |
|     auto option = MenuOption::HorizontalAnimated();
 | |
|     option.underline.SetAnimationFunction(animation::easing::BackOut);
 | |
|     option.underline.SetAnimationDuration(350ms);
 | |
|     container->Add(Menu(&tab_values, &tab_selected, option));
 | |
|   }
 | |
| 
 | |
|   // option.underline_animation_follower_delay = 250ms
 | |
|   {
 | |
|     container->Add(Text("Add delay to desynchronize animation"));
 | |
|     auto option = MenuOption::HorizontalAnimated();
 | |
|     option.underline.follower_delay = 250ms;
 | |
|     container->Add(Menu(&tab_values, &tab_selected, option));
 | |
|   }
 | |
| 
 | |
|   container->SetActiveChild(container->ChildAt(2));
 | |
| 
 | |
|   auto screen = ScreenInteractive::TerminalOutput();
 | |
|   screen.Loop(container);
 | |
| }
 |