mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-10-31 18:48:11 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			98 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 <ftxui/dom/linear_gradient.hpp>  // for LinearGradient
 | |
| #include <ftxui/screen/color.hpp>  // for Color, Color::White, Color::Red, Color::Blue, Color::Black, Color::GrayDark, ftxui
 | |
| #include <functional>              // for function
 | |
| #include <string>                  // for allocator, string
 | |
| #include <utility>                 // for move
 | |
| 
 | |
| #include "ftxui/component/component.hpp"  // for Input, Horizontal, Vertical, operator|
 | |
| #include "ftxui/component/component_base.hpp"     // for Component
 | |
| #include "ftxui/component/component_options.hpp"  // for InputState, InputOption
 | |
| #include "ftxui/component/screen_interactive.hpp"  // for ScreenInteractive
 | |
| #include "ftxui/dom/elements.hpp"  // for operator|=, Element, bgcolor, operator|, separatorEmpty, color, borderEmpty, separator, text, center, dim, hbox, vbox, border, borderDouble, borderRounded
 | |
| 
 | |
| int main() {
 | |
|   using namespace ftxui;
 | |
| 
 | |
|   InputOption style_1 = InputOption::Default();
 | |
| 
 | |
|   InputOption style_2 = InputOption::Spacious();
 | |
| 
 | |
|   InputOption style_3 = InputOption::Spacious();
 | |
|   style_3.transform = [](InputState state) {
 | |
|     state.element |= borderEmpty;
 | |
| 
 | |
|     if (state.is_placeholder) {
 | |
|       state.element |= dim;
 | |
|     }
 | |
| 
 | |
|     if (state.focused) {
 | |
|       state.element |= borderDouble;
 | |
|       state.element |= bgcolor(Color::White);
 | |
|       state.element |= color(Color::Black);
 | |
|     } else if (state.hovered) {
 | |
|       state.element |= borderRounded;
 | |
|       state.element |= bgcolor(LinearGradient(90, Color::Blue, Color::Red));
 | |
|       state.element |= color(Color::White);
 | |
|     } else {
 | |
|       state.element |= border;
 | |
|       state.element |= bgcolor(LinearGradient(0, Color::Blue, Color::Red));
 | |
|       state.element |= color(Color::White);
 | |
|     }
 | |
| 
 | |
|     return state.element;
 | |
|   };
 | |
| 
 | |
|   InputOption style_4 = InputOption::Spacious();
 | |
|   style_4.transform = [](InputState state) {
 | |
|     state.element = hbox({
 | |
|         text("Theorem") | center | borderEmpty | bgcolor(Color::Red),
 | |
|         separatorEmpty(),
 | |
|         separator() | color(Color::White),
 | |
|         separatorEmpty(),
 | |
|         std::move(state.element),
 | |
|     });
 | |
| 
 | |
|     state.element |= borderEmpty;
 | |
|     if (state.is_placeholder) {
 | |
|       state.element |= dim;
 | |
|     }
 | |
| 
 | |
|     if (state.focused) {
 | |
|       state.element |= bgcolor(Color::Black);
 | |
|     } else {
 | |
|       state.element |= bgcolor(Color::Blue);
 | |
|     }
 | |
| 
 | |
|     if (state.hovered) {
 | |
|       state.element |= bgcolor(Color::GrayDark);
 | |
|     }
 | |
| 
 | |
|     return vbox({state.element, separatorEmpty()});
 | |
|   };
 | |
| 
 | |
|   auto generateUiFromStyle = [&](InputOption style) {
 | |
|     auto first_name = new std::string();   // Leaked
 | |
|     auto middle_name = new std::string();  // Leaked
 | |
|     auto last_name = new std::string();    // Leaked
 | |
|     return Container::Vertical({
 | |
|                Input(first_name, "first name", style),
 | |
|                Input(middle_name, "middle name", style),
 | |
|                Input(last_name, "last name", style),
 | |
|            }) |
 | |
|            borderEmpty;
 | |
|   };
 | |
| 
 | |
|   auto ui = Container::Horizontal({
 | |
|       generateUiFromStyle(style_1),
 | |
|       generateUiFromStyle(style_2),
 | |
|       generateUiFromStyle(style_3),
 | |
|       generateUiFromStyle(style_4),
 | |
|   });
 | |
| 
 | |
|   auto screen = ScreenInteractive::TerminalOutput();
 | |
|   screen.Loop(ui);
 | |
| }
 | 
