diff --git a/include/ftxui/component/screen_interactive.hpp b/include/ftxui/component/screen_interactive.hpp index f3460917..8b90a2be 100644 --- a/include/ftxui/component/screen_interactive.hpp +++ b/include/ftxui/component/screen_interactive.hpp @@ -107,9 +107,12 @@ class ScreenInteractive : public Screen { }; Dimension dimension_ = Dimension::Fixed; bool use_alternative_screen_ = false; - ScreenInteractive(int dimx, + + ScreenInteractive(Dimension dimension, + bool use_alternative_screen); + ScreenInteractive(Dimension dimension, + int dimx, int dimy, - Dimension dimension, bool use_alternative_screen); bool track_mouse_ = true; @@ -126,6 +129,8 @@ class ScreenInteractive : public Screen { bool animation_requested_ = false; animation::TimePoint previous_animation_time_; + int fixed_dimx_ = 0; + int fixed_dimy_ = 0; int cursor_x_ = 1; int cursor_y_ = 1; diff --git a/src/ftxui/component/screen_interactive.cpp b/src/ftxui/component/screen_interactive.cpp index 83ff4049..bce10aeb 100644 --- a/src/ftxui/component/screen_interactive.cpp +++ b/src/ftxui/component/screen_interactive.cpp @@ -346,22 +346,31 @@ void AnimationListener(std::atomic* quit, Sender out) { } // namespace -ScreenInteractive::ScreenInteractive(int dimx, - int dimy, - Dimension dimension, +ScreenInteractive::ScreenInteractive(Dimension dimension, bool use_alternative_screen) - : Screen(dimx, dimy), + : Screen(0, 0), dimension_(dimension), use_alternative_screen_(use_alternative_screen) { task_receiver_ = MakeReceiver(); } +ScreenInteractive::ScreenInteractive(Dimension dimension, + int dimx, + int dimy, + bool use_alternative_screen) + : Screen(0, 0), + dimension_(dimension), + fixed_dimx_(dimx), fixed_dimy_(dimy), + use_alternative_screen_(use_alternative_screen) { + task_receiver_ = MakeReceiver(); +} + // static ScreenInteractive ScreenInteractive::FixedSize(int dimx, int dimy) { return { + Dimension::Fixed, dimx, dimy, - Dimension::Fixed, false, }; } @@ -380,8 +389,6 @@ ScreenInteractive ScreenInteractive::Fullscreen() { // static ScreenInteractive ScreenInteractive::FullscreenPrimaryScreen() { return { - 0, - 0, Dimension::Fullscreen, false, }; @@ -392,8 +399,6 @@ ScreenInteractive ScreenInteractive::FullscreenPrimaryScreen() { // static ScreenInteractive ScreenInteractive::FullscreenAlternateScreen() { return { - 0, - 0, Dimension::Fullscreen, true, }; @@ -402,8 +407,6 @@ ScreenInteractive ScreenInteractive::FullscreenAlternateScreen() { // static ScreenInteractive ScreenInteractive::TerminalOutput() { return { - 0, - 0, Dimension::TerminalOutput, false, }; @@ -412,8 +415,6 @@ ScreenInteractive ScreenInteractive::TerminalOutput() { // static ScreenInteractive ScreenInteractive::FitComponent() { return { - 0, - 0, Dimension::FitComponent, false, }; @@ -904,8 +905,8 @@ void ScreenInteractive::Draw(Component component) { document->ComputeRequirement(); switch (dimension_) { case Dimension::Fixed: - dimx = dimx_; - dimy = dimy_; + dimx = fixed_dimx_; + dimy = fixed_dimy_; break; case Dimension::TerminalOutput: dimx = terminal.dimx;