FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
ftxui / screen

title-img

ftxui::screen 模組是低階基礎。它可以單獨使用,但主要設計為與 ftxui::domftxui::component 模組一起使用。

它提供了一個 ftxui::Screen。


ftxui::Screen

ftxui::Screen 類別表示一個 2D 樣式字元網格,可以渲染到終端機。 它提供了建立螢幕、存取像素和渲染元素的方法。

您可以使用 ftxui::Screen::PixelAt 方法存取螢幕的個別單元格 (ftxui::Pixel), 該方法會返回指定座標處像素的參考。

範例

void main() {
auto screen = ftxui::Screen::Create(
ftxui::Dimension::Full(), // 使用完整的終端機寬度
ftxui::Dimension::Fixed(10) // 固定高度為 10 行
);
// 存取 (10, 5) 處的特定像素
auto& pixel = screen.PixelAt(10, 5);
// 設定像素的屬性。
pixel.character = U'X';
pixel.foreground_color = ftxui::Color::Red;
pixel.background_color = ftxui::Color::RGB(0, 255, 0);
pixel.bold = true; // 設定粗體樣式
screen.Print(); // 將螢幕列印到終端機
}
static Screen Create(Dimensions dimension)
創建具有給定尺寸的螢幕。
Definition screen.cpp:395
static Color RGB(uint8_t red, uint8_t green, uint8_t blue)
從 RGB 表示建立一個顏色。 https://en.wikipedia.org/wiki/RGB_color_model
Note
如果座標超出範圍,則返回一個虛擬像素。

螢幕可以使用 ftxui::Screen::Print() 列印到終端機,或使用 ftxui::Screen::ToString() 轉換為 std::string。

  • Print()
    auto screen = ...;
    screen.Print();
  • ToString()
    auto screen = ...;
    std::cout << screen.ToString();

請注意,您可以在列印後透過呼叫 ftxui::Screen::ResetCursorPosition() 將游標位置重設為螢幕的左上角。

範例

auto screen = ...;
while(true) {
// 繪圖操作:
...
// 將螢幕列印到終端機。然後重設游標位置和螢幕內容。
std::cout << screen.ToString();
std::cout << screen.ResetCursorPosition(/*clear=*/true);
std::cout << std::flush;
// 睡眠一小段時間以控制刷新率。
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

ftxui::Dimension

ftxui::Dimension 工具控制螢幕尺寸:

  • Dimension::Full() — 使用完整的終端機寬度或高度
  • Dimension::Fit(element) — 大小以適應渲染的 ftxui::Element
  • Dimension::Fixed(n) — 精確使用 n 列或行

這些值將傳遞給 ftxui::Screen::Create()

ftxui::Screen::Create() 提供兩個重載:

  • Screen::Create(Dimension) 將寬度和高度都設定為相同類型的尺寸
  • Screen::Create(Dimension width, Dimension height) 允許按軸進行不同的控制
auto screen = ftxui::Screen::Create(
ftxui::Dimension::Full(), // 寬度
ftxui::Dimension::Fixed(10) // 高度
);

建立後,渲染一個元素並顯示結果:

ftxui::Render(screen, element);
screen.Print();
void Render(Screen &screen, const Element &element)

ftxui::Pixel

螢幕網格中的每個單元格都是一個 ftxui::Pixel,它包含:

  • Unicode 字碼點。
    • character
  • ftxui::Color:
    • foreground_color
    • background_color
  • 布林值:
    • blink
    • bold
    • dim
    • italic
    • inverted (交換前景和背景顏色)
    • underlined
    • underlined_double
    • strikethrough
auto screen = ftxui::Screen::Create(
ftxui::Dimension::Fixed(5),
ftxui::Dimension::Fixed(5),
);
auto& pixel = screen.PixelAt(3, 3);
pixel.character = U'X';
pixel.bold = true;
pixel.foreground_color = ftxui::Color::Red;
pixel.background_color = ftxui::Color::RGB(0, 255, 0);
screen.Print();
Note
PixelAt(x, y) 執行邊界檢查並返回指定座標處像素的參考。 如果超出邊界,則返回一個虛擬像素參考。

螢幕中的每個單元格都是一個 ftxui::Pixel。您可以使用以下方式修改它們:

auto& pixel = screen.PixelAt(x, y);
pixel.character = U'X';
pixel.bold = true;
pixel.foreground_color = Color::Red;

ftxui::Color

ftxui::Color 類別用於為每個 ftxui::Pixel 定義前景和背景顏色。

它支援各種色彩空間和預定義調色板。如果終端機不支援請求的顏色,FTXUI 將 動態回退到終端機中最接近的可用顏色。

色彩空間

Note
您可以使用 ftxui::Terminal::ColorSupport() 查詢終端機功能; 這可以透過 ftxui::Terminal::SetColorSupport() 手動設定。