| 
									
										
										
										
											2023-08-19 13:56:36 +02:00
										 |  |  | // 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.
 | 
					
						
							| 
									
										
										
										
											2022-03-31 02:17:43 +02:00
										 |  |  | #ifndef FTXUI_SCREEN_SCREEN_HPP
 | 
					
						
							|  |  |  | #define FTXUI_SCREEN_SCREEN_HPP
 | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-27 15:45:13 +07:00
										 |  |  | #include <cstdint>     // for uint8_t
 | 
					
						
							|  |  |  | #include <functional>  // for function
 | 
					
						
							|  |  |  | #include <string>      // for string, basic_string, allocator
 | 
					
						
							|  |  |  | #include <vector>      // for vector
 | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-27 12:03:44 +03:00
										 |  |  | #include "ftxui/screen/image.hpp"     // for Pixel, Image
 | 
					
						
							| 
									
										
										
										
											2021-08-06 20:32:33 +02:00
										 |  |  | #include "ftxui/screen/terminal.hpp"  // for Dimensions
 | 
					
						
							| 
									
										
										
										
											2018-10-12 09:23:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-12 15:00:08 +01:00
										 |  |  | namespace ftxui { | 
					
						
							| 
									
										
										
										
											2019-01-06 17:10:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-25 01:34:13 +02:00
										 |  |  | /// @brief Define how the Screen's dimensions should look like.
 | 
					
						
							|  |  |  | /// @ingroup screen
 | 
					
						
							| 
									
										
										
										
											2021-08-03 02:49:29 +05:30
										 |  |  | namespace Dimension { | 
					
						
							|  |  |  | Dimensions Fixed(int); | 
					
						
							|  |  |  | Dimensions Full(); | 
					
						
							|  |  |  | }  // namespace Dimension
 | 
					
						
							| 
									
										
										
										
											2019-01-26 21:52:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-25 01:34:13 +02:00
										 |  |  | /// @brief A rectangular grid of Pixel.
 | 
					
						
							|  |  |  | /// @ingroup screen
 | 
					
						
							| 
									
										
										
										
											2024-04-27 12:03:44 +03:00
										 |  |  | class Screen : public Image { | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  |  public: | 
					
						
							| 
									
										
										
										
											2020-05-25 01:34:13 +02:00
										 |  |  |   // Constructors:
 | 
					
						
							| 
									
										
										
										
											2019-01-26 21:52:55 +01:00
										 |  |  |   Screen(int dimx, int dimy); | 
					
						
							| 
									
										
										
										
											2021-08-03 02:49:29 +05:30
										 |  |  |   static Screen Create(Dimensions dimension); | 
					
						
							|  |  |  |   static Screen Create(Dimensions width, Dimensions height); | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-16 18:40:50 +02:00
										 |  |  |   // Destructor:
 | 
					
						
							|  |  |  |   ~Screen() override = default; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-26 00:41:16 +02:00
										 |  |  |   std::string ToString() const; | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-26 00:41:16 +02:00
										 |  |  |   // Print the Screen on to the terminal.
 | 
					
						
							|  |  |  |   void Print() const; | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-28 15:17:54 +02:00
										 |  |  |   // Fill the screen with space and reset any screen state, like hyperlinks, and
 | 
					
						
							|  |  |  |   // cursor
 | 
					
						
							| 
									
										
										
										
											2024-04-27 12:03:44 +03:00
										 |  |  |   void Clear(); | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Move the terminal cursor n-lines up with n = dimy().
 | 
					
						
							| 
									
										
										
										
											2022-03-31 02:17:43 +02:00
										 |  |  |   std::string ResetPosition(bool clear = false) const; | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-19 00:20:29 +01:00
										 |  |  |   void ApplyShader(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-29 18:52:58 +02:00
										 |  |  |   struct Cursor { | 
					
						
							| 
									
										
										
										
											2019-07-01 00:43:00 +02:00
										 |  |  |     int x = 0; | 
					
						
							|  |  |  |     int y = 0; | 
					
						
							| 
									
										
										
										
											2022-11-11 14:09:53 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     enum Shape { | 
					
						
							|  |  |  |       Hidden = 0, | 
					
						
							|  |  |  |       BlockBlinking = 1, | 
					
						
							|  |  |  |       Block = 2, | 
					
						
							|  |  |  |       UnderlineBlinking = 3, | 
					
						
							|  |  |  |       Underline = 4, | 
					
						
							| 
									
										
										
										
											2022-12-28 13:17:56 +01:00
										 |  |  |       BarBlinking = 5, | 
					
						
							|  |  |  |       Bar = 6, | 
					
						
							| 
									
										
										
										
											2022-11-11 14:09:53 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  |     Shape shape; | 
					
						
							| 
									
										
										
										
											2019-06-29 18:52:58 +02:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2024-04-27 12:03:44 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-29 18:52:58 +02:00
										 |  |  |   Cursor cursor() const { return cursor_; } | 
					
						
							|  |  |  |   void SetCursor(Cursor cursor) { cursor_ = cursor; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-04 21:06:19 +02:00
										 |  |  |   // Store an hyperlink in the screen. Return the id of the hyperlink. The id is
 | 
					
						
							|  |  |  |   // used to identify the hyperlink when the user click on it.
 | 
					
						
							| 
									
										
										
										
											2023-06-25 17:22:05 +02:00
										 |  |  |   uint8_t RegisterHyperlink(const std::string& link); | 
					
						
							| 
									
										
										
										
											2023-06-04 21:06:19 +02:00
										 |  |  |   const std::string& Hyperlink(uint8_t id) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-27 15:45:13 +07:00
										 |  |  |   using SelectionStyle = std::function<void(Pixel&)>; | 
					
						
							|  |  |  |   const SelectionStyle& GetSelectionStyle() const; | 
					
						
							|  |  |  |   void SetSelectionStyle(SelectionStyle decorator); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-05 02:03:49 +01:00
										 |  |  |  protected: | 
					
						
							| 
									
										
										
										
											2019-06-29 18:52:58 +02:00
										 |  |  |   Cursor cursor_; | 
					
						
							| 
									
										
										
										
											2023-06-04 21:06:19 +02:00
										 |  |  |   std::vector<std::string> hyperlinks_ = {""}; | 
					
						
							| 
									
										
										
										
											2024-12-27 15:45:13 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // The current selection style. This is overridden by various dom elements.
 | 
					
						
							|  |  |  |   SelectionStyle selection_style_ = [](Pixel& pixel) { | 
					
						
							|  |  |  |     pixel.inverted ^= true; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-11 21:44:55 +01:00
										 |  |  | }  // namespace ftxui
 | 
					
						
							| 
									
										
										
										
											2018-10-09 19:06:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-31 02:17:43 +02:00
										 |  |  | #endif  // FTXUI_SCREEN_SCREEN_HPP
 |