diff options
Diffstat (limited to 'src/engine/components/statusline.cpp')
-rw-r--r-- | src/engine/components/statusline.cpp | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/src/engine/components/statusline.cpp b/src/engine/components/statusline.cpp deleted file mode 100644 index 5b59a53..0000000 --- a/src/engine/components/statusline.cpp +++ /dev/null @@ -1,119 +0,0 @@ -#include "statusline.hpp" - -#include "engine/data/bounds.hpp" -#include "engine/data/vector2.hpp" -#include "util/color.hpp" - -#include <fmt/color.h> - -#include <utility> - -StatusLine::StatusLine(std::shared_ptr<ComponentMatrix> component_matrix) noexcept - : _component_matrix(std::move(component_matrix)), _need_render(false) -{ - _component_matrix->fill(' '); -} - -auto StatusLine::get() const noexcept -> const std::shared_ptr<ComponentMatrix> & -{ - return _component_matrix; -} - -auto StatusLine::get_need_render() const noexcept -> bool -{ - return _need_render; -} - -void StatusLine::set_need_render(bool need_render) noexcept -{ - _need_render = need_render; -} - -auto StatusLine::get_foreground_color() const noexcept -> uint32_t -{ - return static_cast<uint32_t>(fmt::color::white); -} - -auto StatusLine::get_background_color() const noexcept -> uint32_t -{ - return STATUSLINE_COLOR; -} - -void StatusLine::set_status( - StatusLineSection section, - const std::string_view &status, - int32_t start) noexcept -{ - _clear_section(section, start); - - auto section_start = _get_section_start_x(section); - - auto pos = Vector2({.x = section_start + start, .y = 0}); - - const auto column_cnt = static_cast<int32_t>(_component_matrix->get_column_cnt()); - - const auto section_length = _section_lengths[section]; - - const auto status_len = static_cast<int32_t>(status.length()); - - _matrix_write_string( - pos, - status_len <= section_length - ? status - : status.substr(0U, static_cast<uint32_t>(section_length))); - - set_need_render(true); -} - -void StatusLine::set_section_length(StatusLineSection section, int32_t length) noexcept -{ - _section_lengths[section] = length; -} - -void StatusLine::_matrix_write_string( - const Vector2 &position, - const std::string_view &str) noexcept -{ - auto working_pos = position; - - for (const auto &character : str) - { - _component_matrix->set(working_pos, character); - - working_pos += Vector2::right(); - } -} - -auto StatusLine::_get_section_start_x(StatusLineSection section) const noexcept -> int32_t -{ - int32_t section_start = 0; - - auto section_index = static_cast<int32_t>(section); - - while (section_index > 0) - { - const auto prev_section = static_cast<StatusLineSection>(section_index - 1); - - section_start += static_cast<int32_t>(_section_lengths.at(prev_section)); - - section_index--; - } - - return section_start; -} - -void StatusLine::_clear_section(StatusLineSection section, int32_t start) noexcept -{ - auto section_start = _get_section_start_x(section); - - auto pos = Vector2({.x = section_start + start, .y = 0}); - - auto section_length = _section_lengths[section]; - - for (auto index = 0; index < section_length - start; index++) - { - _component_matrix->set(pos, ' '); - - pos += Vector2::right(); - } -} |