From add5f40d313591cfca0289abbd8902e59e2c5ffc Mon Sep 17 00:00:00 2001 From: ArthurSonzogni Date: Fri, 2 May 2025 16:48:00 +0200 Subject: [PATCH] Restore `dbox` behavior from ftxui5.0.0 Bug:https://github.com/eclipse-ecal/ecal/pull/2095 --- CHANGELOG.md | 4 ++++ src/ftxui/dom/dbox.cpp | 53 ------------------------------------------ 2 files changed, 4 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ee985a3..8f5e22fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Changelog Future release ------------ +### dom +- Bugfix: Restore the `dbox` behavior from ftxui 5.0.0. To apply bgcolor + blending between the two layers, a new `dboxBlend` will be added. + 6.1.8 (2025-05-01) ------------------ diff --git a/src/ftxui/dom/dbox.cpp b/src/ftxui/dom/dbox.cpp index 2fd6fe11..0160e019 100644 --- a/src/ftxui/dom/dbox.cpp +++ b/src/ftxui/dom/dbox.cpp @@ -45,59 +45,6 @@ class DBox : public Node { child->SetBox(box); } } - - void Render(Screen& screen) override { - if (children_.size() <= 1) { - Node::Render(screen); - return; - } - - const int width = box_.x_max - box_.x_min + 1; - const int height = box_.y_max - box_.y_min + 1; - std::vector pixels(std::size_t(width * height)); - - for (auto& child : children_) { - child->Render(screen); - - // Accumulate the pixels - Pixel* acc = pixels.data(); - for (int x = 0; x < width; ++x) { - for (int y = 0; y < height; ++y) { - auto& pixel = screen.PixelAt(x + box_.x_min, y + box_.y_min); - acc->background_color = - Color::Blend(acc->background_color, pixel.background_color); - acc->automerge = pixel.automerge || acc->automerge; - if (pixel.character.empty()) { - acc->foreground_color = - Color::Blend(acc->foreground_color, pixel.background_color); - } else { - acc->blink = pixel.blink; - acc->bold = pixel.bold; - acc->dim = pixel.dim; - acc->inverted = pixel.inverted; - acc->italic = pixel.italic; - acc->underlined = pixel.underlined; - acc->underlined_double = pixel.underlined_double; - acc->strikethrough = pixel.strikethrough; - acc->hyperlink = pixel.hyperlink; - acc->character = pixel.character; - acc->foreground_color = pixel.foreground_color; - } - ++acc; // NOLINT - - pixel = Pixel(); - } - } - } - - // Render the accumulated pixels: - Pixel* acc = pixels.data(); - for (int x = 0; x < width; ++x) { - for (int y = 0; y < height; ++y) { - screen.PixelAt(x + box_.x_min, y + box_.y_min) = *acc++; // NOLINT - } - } - } }; } // namespace