diff --git a/src/ftxui/dom/table_test.cpp b/src/ftxui/dom/table_test.cpp index 3313923ebb8352f5c20669c7a60d2685c639c0d0..1e13776c5015b402d803622f31930fb2fff5abc5 100644 --- a/src/ftxui/dom/table_test.cpp +++ b/src/ftxui/dom/table_test.cpp @@ -708,6 +708,28 @@ TEST(TableTest, RowFlexTwo) { screen.ToString()); } +TEST(TableTest, Merge) { + auto table = Table({ + {"a", "b", "c"}, + {"d", "e", "f"}, + {"g", "h", "i"}, + }); + table.SelectAll().Border(LIGHT); + table.SelectColumn(1).Border(HEAVY); + table.SelectRow(1).Border(HEAVY); + Screen screen(7, 7); + Render(screen, table.Render()); + EXPECT_EQ( + "┌─┲━┱─┐\r\n" + "│a┃b┃c│\r\n" + "┢━╋━╋━┪\r\n" + "┃d┃e┃f┃\r\n" + "┡━╋━╋━┩\r\n" + "│g┃h┃i│\r\n" + "└─┺━┹─┘", + screen.ToString()); +} + } // namespace ftxui // Copyright 2021 Arthur Sonzogni. All rights reserved. diff --git a/src/ftxui/screen/screen.cpp b/src/ftxui/screen/screen.cpp index 2f7b1240e3cec34cab6fd2aa5266fc0ff127acd8..6d19f790b41dc4a5181f9f701d0f3e27c820a896 100644 --- a/src/ftxui/screen/screen.cpp +++ b/src/ftxui/screen/screen.cpp @@ -501,22 +501,25 @@ void Screen::Clear() { // clang-format off void Screen::ApplyShader() { // Merge box characters togethers. - for (int y = 1; y < dimy_; ++y) { - for (int x = 1; x < dimx_; ++x) { + for (int y = 0; y < dimy_; ++y) { + for (int x = 0; x < dimx_; ++x) { // Box drawing character uses exactly 3 byte. Pixel& cur = pixels_[y][x]; if (!ShouldAttemptAutoMerge(cur)) { continue; } - Pixel& left = pixels_[y][x-1]; - Pixel& top = pixels_[y-1][x]; - - if (ShouldAttemptAutoMerge(left)) { - UpgradeLeftRight(left.character, cur.character); + if (x > 0) { + Pixel& left = pixels_[y][x-1]; + if (ShouldAttemptAutoMerge(left)) { + UpgradeLeftRight(left.character, cur.character); + } } - if (ShouldAttemptAutoMerge(top)) { - UpgradeTopDown(top.character, cur.character); + if (y > 0) { + Pixel& top = pixels_[y-1][x]; + if (ShouldAttemptAutoMerge(top)) { + UpgradeTopDown(top.character, cur.character); + } } } }