diff --git a/src/ftxui/dom/table_test.cpp b/src/ftxui/dom/table_test.cpp index 3313923e..1e13776c 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 2f7b1240..6d19f790 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); + } } } }