// Copyright (C) 2017 Jérôme Leclercq // This file is part of the "Nazara Engine - Platform module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_CURSOR_HPP #define NAZARA_CURSOR_HPP #include #include #include #include #include #include #include namespace Nz { class CursorImpl; class Cursor; using CursorConstRef = ObjectRef; using CursorRef = ObjectRef; class NAZARA_PLATFORM_API Cursor : public RefCounted { friend class Platform; friend class WindowImpl; public: inline Cursor(); inline Cursor(const Image& cursor, const Vector2i& hotSpot, SystemCursor placeholder); Cursor(const Cursor&) = delete; Cursor(Cursor&&) = delete; inline ~Cursor(); bool Create(const Image& cursor, const Vector2i& hotSpot, SystemCursor placeholder); void Destroy(); inline const Image& GetImage() const; inline SystemCursor GetSystemCursor() const; inline bool IsValid() const; Cursor& operator=(const Cursor&) = delete; Cursor& operator=(Cursor&&) = delete; static inline Cursor* Get(SystemCursor cursor); template static CursorRef New(Args&&... args); private: inline explicit Cursor(SystemCursor systemCursor); bool Create(SystemCursor cursor); static bool Initialize(); static void Uninitialize(); Image m_cursorImage; SystemCursor m_systemCursor; CursorImpl* m_impl; static std::array s_systemCursors; }; } #include #endif // NAZARA_CURSOR_HPP