diff --git a/rawterm/extras/border.h b/rawterm/extras/border.h index c837e20..53bfde5 100644 --- a/rawterm/extras/border.h +++ b/rawterm/extras/border.h @@ -79,7 +79,7 @@ namespace rawterm { // Top line const std::size_t post_title_len = - static_cast(longest_txt + border_padding + 2) - trunc_title.size() - 1; + static_cast(size.width() - border_padding) - trunc_title.size(); if (border_char.has_value()) { render.at(0) = border_char.value() + trunc_title; render.at(0) += std::string(post_title_len, border_char.value()); @@ -104,7 +104,8 @@ namespace rawterm { if (line.size() > static_cast(longest_txt)) { drawable_text = line.substr(0, static_cast(longest_txt)); } - const std::size_t line_buffer = longest_txt - drawable_text.size(); + const std::size_t line_buffer = + size.width() - drawable_text.size() - border_padding - 2; rendered_line += std::string(border_padding, ' ') + drawable_text + std::string(border_padding + line_buffer, ' '); @@ -123,7 +124,7 @@ namespace rawterm { btm = std::string(render.at(0).size(), border_char.value()); } else { btm = CORNER_BL; - for (std::size_t i = 0; i <= longest_txt + border_padding; i++) { + for (std::size_t i = 0; i <= size.width() - border_padding - 1; i++) { btm += HORIZONTAL_BAR; } btm += CORNER_BR; diff --git a/tests/border_test.cpp b/tests/border_test.cpp index db0ce70..7755e87 100644 --- a/tests/border_test.cpp +++ b/tests/border_test.cpp @@ -16,8 +16,8 @@ boost::ut::suite<"Border"> border_suite = [] { "placerat quam finibus sollicitudin. Nullam condimentum tellus ante"}; "render without settings"_test = [&b, &text] { - std::vector expected = {"┌────────┐", "│Lorem i│", "│consect│", - "│Morbi i│", "│placera│", "└────────┘"}; + std::vector expected = {"┌─────────┐", "│Lorem i│", "│consect│", + "│Morbi i│", "│placera│", "└─────────┘"}; auto rendered = b.render(&text); expect(rendered == expected); @@ -32,14 +32,14 @@ boost::ut::suite<"Border"> border_suite = [] { }; "render with padding"_test = [&b, &text] { - std::vector expected = {"┌─────────┐", "│ Lorem i │", "│ consect │", - "│ Morbi i │", "│ placera │", "└─────────┘"}; + std::vector expected = {"┌────────┐", "│ Lorem i│", "│ consect│", + "│ Morbi i│", "│ placera│", "└────────┘"}; auto rendered = b.render(&text); expect(rendered == expected); // either end is a box drawing char, which is 3 bytes - expect(rendered.at(1).size() == 15); + expect(rendered.at(1).size() == 14); }; "Set title"_test = [&b, &b2] { @@ -57,14 +57,14 @@ boost::ut::suite<"Border"> border_suite = [] { "render with padding and title"_test = [&b, &text] { auto rendered = b.render(&text); - std::string expected = "┌Super...─┐"; + std::string expected = "┌Super...┐"; expect(rendered.at(0) == expected); }; "render with title"_test = [&b2, &text] { auto rendered = b2.render(&text); - std::string expected = "#Test####"; + std::string expected = "#Test#####"; expect(rendered.at(0) == expected); }; @@ -81,7 +81,7 @@ boost::ut::suite<"Border"> border_suite = [] { "render with padding, title, color"_test = [&b, &text] { auto rendered = b.render(&text); - std::string expected = "┌Super...─┐"; + std::string expected = "┌Super...┐"; expect(rendered.at(0) == expected) << rendered.at(0); };