From c5ee8d58bbe3f7927bfcb9a05aac888d5f627bb9 Mon Sep 17 00:00:00 2001 From: ArthurSonzogni Date: Sat, 11 Nov 2023 17:48:02 +0100 Subject: [PATCH] Add ::Fullscreen and ::FullscreenPrimaryScreen --- CHANGELOG.md | 3 ++ .../ftxui/component/screen_interactive.hpp | 1 + src/ftxui/component/screen_interactive.cpp | 28 +++++++++++++++---- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3cefa5a..53d128f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,9 @@ current (development) ``` A couple of components are now activated when the mouse is pressed, as opposed to released. +- Feature: Add `ScreenInteractive::FullscreenPrimaryScreen()`. This allows + displaying a fullscreen component on the primary screen, as opposed to the + alternate screen. - Bugfix: `Input` `onchange` was not called on backspace or delete key. Fixed by @chrysante in chrysante in PR #776. diff --git a/include/ftxui/component/screen_interactive.hpp b/include/ftxui/component/screen_interactive.hpp index 1b008cc9..7629f031 100644 --- a/include/ftxui/component/screen_interactive.hpp +++ b/include/ftxui/component/screen_interactive.hpp @@ -32,6 +32,7 @@ class ScreenInteractive : public Screen { static ScreenInteractive FixedSize(int dimx, int dimy); static ScreenInteractive Fullscreen(); static ScreenInteractive FullscreenPrimaryScreen(); + static ScreenInteractive FullscreenAlternateScreen(); static ScreenInteractive FitComponent(); static ScreenInteractive TerminalOutput(); diff --git a/src/ftxui/component/screen_interactive.cpp b/src/ftxui/component/screen_interactive.cpp index d99bf3c4..a71ecbf2 100644 --- a/src/ftxui/component/screen_interactive.cpp +++ b/src/ftxui/component/screen_interactive.cpp @@ -352,16 +352,19 @@ ScreenInteractive ScreenInteractive::FixedSize(int dimx, int dimy) { }; } +/// @ingroup component +/// Create a ScreenInteractive taking the full terminal size. This is using the +/// alternate screen buffer to avoid messing with the terminal content. +/// @note This is the same as `ScreenInteractive::FullscreenAlternateScreen()` // static ScreenInteractive ScreenInteractive::Fullscreen() { - return { - 0, - 0, - Dimension::Fullscreen, - true, - }; + return FullscreenPrimaryScreen(); } +/// @ingroup component +/// Create a ScreenInteractive taking the full terminal size. The primary screen +/// buffer is being used. It means if the terminal is resized, the previous +/// content might mess up with the terminal content. // static ScreenInteractive ScreenInteractive::FullscreenPrimaryScreen() { return { @@ -372,6 +375,19 @@ ScreenInteractive ScreenInteractive::FullscreenPrimaryScreen() { }; } +/// @ingroup component +/// Create a ScreenInteractive taking the full terminal size. This is using the +/// alternate screen buffer to avoid messing with the terminal content. +// static +ScreenInteractive ScreenInteractive::FullscreenAlternateScreen() { + return { + 0, + 0, + Dimension::Fullscreen, + true, + }; +} + // static ScreenInteractive ScreenInteractive::TerminalOutput() { return {