diff --git a/CMakeLists.txt b/CMakeLists.txt index 571efa3..17dae83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) include(cmake/color.cmake) -set(BLT_VERSION 5.2.12) +set(BLT_VERSION 5.2.13) set(BLT_TARGET BLT) diff --git a/include/blt/logging/status.h b/include/blt/logging/status.h index 5366add..0e8201a 100644 --- a/include/blt/logging/status.h +++ b/include/blt/logging/status.h @@ -22,6 +22,7 @@ #include #include #include +#include namespace blt::logging { @@ -36,7 +37,7 @@ namespace blt::logging return 1; } - virtual std::string print(); + virtual std::string print() = 0; }; class status_bar_t final : public injector_t @@ -46,10 +47,13 @@ namespace blt::logging injector_output_t inject(const std::string& input) override; - virtual ~status_bar_t() override; + void redraw(); + + ~status_bar_t() override; private: i32 m_status_size; - i32 m_last_position[2]; + vec2i m_last_log_position; + vec2i m_begin_position; }; } diff --git a/libraries/parallel-hashmap b/libraries/parallel-hashmap index 7ef2e73..93201da 160000 --- a/libraries/parallel-hashmap +++ b/libraries/parallel-hashmap @@ -1 +1 @@ -Subproject commit 7ef2e733416953b222851f9a360d7fc72d068ee5 +Subproject commit 93201da2ba5a6aba0a6e57ada64973555629b3e3 diff --git a/src/blt/logging/status.cpp b/src/blt/logging/status.cpp index aa73d26..ecd5d02 100644 --- a/src/blt/logging/status.cpp +++ b/src/blt/logging/status.cpp @@ -21,8 +21,10 @@ #include #include #include +#include #include #include +#include namespace blt::logging { @@ -78,34 +80,43 @@ namespace blt::logging status_bar_t::status_bar_t(const i32 status_size): m_status_size(status_size) { + std::cout << ansi::cursor::home << std::flush; + std::cout << ansi::erase::entire_screen << std::flush; + m_begin_position = m_last_log_position = get_cursor_position(); std::cout << ansi::cursor::hide_cursor; } - std::string status_item_t::print() - {} - injector_output_t status_bar_t::inject(const std::string& input) { injector_output_t output{input, false, false}; + if (output.new_logging_output.back() != '\n') + output.new_logging_output += '\n'; - std::cout << ansi::cursor::lower_left_corner; - std::cout << ansi::scroll::scroll_up(1); - for (int i = 0; i < m_status_size; i++) - std::cout << ansi::erase::entire_line << ansi::cursor::move_begin_up(1); - std::cout << output.new_logging_output; - std::cout << ansi::erase::entire_line; - std::cout << "[----status----]"; - std::cout << ansi::cursor::move_begin_down(1) << ansi::erase::entire_line; - std::cout << "[----Second Line----]"; - std::cout << std::flush; + if (get_cursor_position() != m_begin_position) + { + for (int i = 0; i < m_status_size; i++) + std::cout << ansi::erase::entire_line << ansi::cursor::move_begin_up(1) << std::flush; + } + std::cout << ansi::erase::entire_line << std::flush; + std::cout << output.new_logging_output << std::flush; + m_last_log_position = get_cursor_position(); + redraw(); return output; } + void status_bar_t::redraw() + { + std::cout << ansi::cursor::move_to(m_last_log_position.x(), m_last_log_position.y()); + std::cout << ansi::erase::entire_line << std::flush; + std::cout << "[----status----]" << std::endl; + std::cout << ansi::erase::entire_line << std::flush; + std::cout << "[----Second Line----]" << std::endl; + std::cout << std::flush; + } + status_bar_t::~status_bar_t() { - // std::cout << "\033[" << m_scrolling_region + 1 << ";1H"; - std::cout << ansi::cursor::lower_left_corner; std::cout << ansi::cursor::show_cursor; } } diff --git a/test.txt b/test.txt index e69de29..8416185 100644 --- a/test.txt +++ b/test.txt @@ -0,0 +1,3 @@ +This is a println with a stream +This is a mixed print 25 with multiple types 34.233400 +What about just a new line character? diff --git a/tests/logger_tests.cpp b/tests/logger_tests.cpp index 319d3cb..d18ef60 100644 --- a/tests/logger_tests.cpp +++ b/tests/logger_tests.cpp @@ -170,7 +170,6 @@ int main() writer.write(std::to_string(34.23340)); writer.write('\n'); writer.write("What about just a new line character?\n"); - size_t charCount = 0; // blt::logging::println("Logged {} characters", charCount); //