aboutsummaryrefslogtreecommitdiff
path: root/src/engine/graphics/statusline.hpp
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-05-02 22:57:51 +0200
committerHampusM <hampus@hampusmat.com>2022-06-13 17:56:59 +0200
commit741a6008e806abb8e5aaa8f8fb91827fa97ece9d (patch)
tree05edce915b6cd56abefeedfa723d83cc1b936566 /src/engine/graphics/statusline.hpp
parent73290d21d996c7e596ef3c71d55a506f1aa38f2c (diff)
refactor: move statusline to engine graphics folder
Diffstat (limited to 'src/engine/graphics/statusline.hpp')
-rw-r--r--src/engine/graphics/statusline.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/engine/graphics/statusline.hpp b/src/engine/graphics/statusline.hpp
new file mode 100644
index 0000000..181090d
--- /dev/null
+++ b/src/engine/graphics/statusline.hpp
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "interfaces/cursor.hpp"
+#include "interfaces/statusline.hpp"
+#include "interfaces/window.hpp"
+
+#include "engine/data/vector2.hpp"
+
+#include <fmt/core.h>
+
+#include <memory>
+#include <string_view>
+#include <unordered_map>
+
+constexpr uint32_t STATUSBAR_COLOR = 0x1A1A1AU;
+
+class StatusLine : public IStatusLine
+{
+public:
+ StatusLine(
+ std::shared_ptr<ICursorController> cursor_controller,
+ std::shared_ptr<IWindow> window
+ ) noexcept;
+
+ void initialize_background() noexcept override;
+
+ void set_status(
+ const StatusLineSection &section,
+ const std::string_view &status,
+ std::size_t start
+ ) noexcept override;
+
+ void set_section_length(const StatusLineSection &section, uint32_t length) noexcept
+ override;
+
+private:
+ std::unordered_map<StatusLineSection, uint32_t> _sections_lengths;
+
+ std::shared_ptr<ICursorController> _cursor_controller;
+ std::shared_ptr<IWindow> _window;
+
+ auto _move_to_statusline(int32_t x) noexcept -> Vector2;
+
+ void _move_back(Vector2 previous_position) noexcept;
+
+ [[nodiscard]] auto _get_section_start_x(const StatusLineSection &section
+ ) const noexcept -> int32_t;
+
+ void _clear_section(const StatusLineSection &section, std::size_t start) noexcept;
+};