#pragma once #include "engine/data/bounds.hpp" #include "engine/data/vector2.hpp" #include enum class CursorStyle { BlinkingBlock = 0, BlinkingBlockDefault = 1, SteadyBlock = 2, BlinkingUnderline = 3, SteadyUnderline = 4, BlinkingBar = 5, SteadyBar = 6 }; // NOLINTNEXTLINE(cppcoreguidelines-special-member-functions) class ICursorController { public: virtual ~ICursorController() noexcept = default; virtual void move( const Vector2 &direction, const uint32_t &amount, bool flush_cout = false) noexcept = 0; virtual void move_to(const Vector2 &position, bool flush_cout = false) noexcept = 0; [[nodiscard]] virtual auto where() const noexcept -> Vector2 = 0; virtual void ensure_position() noexcept = 0; /** * Updates the stored cursor position. * * This will NOT change the position of the actual cursor! */ virtual void update_position(const Vector2 &position) noexcept = 0; virtual void hide(bool flush_cout = false) noexcept = 0; virtual void show(bool flush_cout = false) noexcept = 0; virtual void set_cursor_style(CursorStyle cursor_style, bool flush_cout = false) noexcept = 0; virtual void set_bounds(const Bounds &bounds) noexcept = 0; };