mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-11-04 13:38:14 +08:00 
			
		
		
		
	Fix automerge at border (#515)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							121bd0d046
						
					
				
				
					commit
					55b9706cfd
				
			@@ -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.
 | 
			
		||||
 
 | 
			
		||||
@@ -501,26 +501,29 @@ 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;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (x > 0) {
 | 
			
		||||
        Pixel& left = pixels_[y][x-1];
 | 
			
		||||
      Pixel& top = pixels_[y-1][x];
 | 
			
		||||
 | 
			
		||||
        if (ShouldAttemptAutoMerge(left)) {
 | 
			
		||||
          UpgradeLeftRight(left.character, cur.character);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (y > 0) {
 | 
			
		||||
        Pixel& top = pixels_[y-1][x];
 | 
			
		||||
        if (ShouldAttemptAutoMerge(top)) {
 | 
			
		||||
          UpgradeTopDown(top.character, cur.character);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user