aboutsummaryrefslogtreecommitdiff
path: root/src/engine/user/cursor.cpp
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-03-03 19:41:23 +0100
committerHampusM <hampus@hampusmat.com>2022-06-13 17:56:54 +0200
commit93123e97251fc791c1cac193d675cce9a1ac2de6 (patch)
tree4486453695d6f715e767bd91bcee89c92f54f7ba /src/engine/user/cursor.cpp
parent70b21e90d7be4d892b7d17440d64630e7ee1a575 (diff)
feat: add moving cursor
Diffstat (limited to 'src/engine/user/cursor.cpp')
-rw-r--r--src/engine/user/cursor.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/engine/user/cursor.cpp b/src/engine/user/cursor.cpp
new file mode 100644
index 0000000..9d6e28c
--- /dev/null
+++ b/src/engine/user/cursor.cpp
@@ -0,0 +1,43 @@
+#include "cursor.hpp"
+
+#include "engine/escape.hpp"
+
+#include <cstdlib>
+#include <iostream>
+
+CursorController::CursorController(IVector2Factory vector2_factory)
+ : _vector2_factory(vector2_factory)
+{
+}
+
+void CursorController::move_to(const IVector2 &pos)
+{
+ fmt::print(MOVE_CURSOR_TO, fmt::arg("esc", ESC), fmt::arg("row", pos.y()),
+ fmt::arg("column", pos.x()));
+ std::cout.flush();
+}
+
+std::shared_ptr<IVector2> CursorController::where()
+{
+ fmt::print(REQUEST_CURSOR_POSITION, fmt::arg("esc", ESC));
+ std::cout.flush();
+
+ IVector2Options vector2_options = {};
+
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
+ scanf("\033[%u;%uR", &vector2_options.y, &vector2_options.x);
+
+ return _vector2_factory(vector2_options);
+}
+
+void CursorController::hide()
+{
+ fmt::print(CURSOR_INVISIBLE, fmt::arg("esc", ESC));
+ std::cout.flush();
+}
+
+void CursorController::show()
+{
+ fmt::print(CURSOR_VISIBLE, fmt::arg("esc", ESC));
+ std::cout.flush();
+}