Program Listing for File Window.hpp

Return to documentation for file (engine/include/Cacao/Window.hpp)

#pragma once

#include "DllHelper.hpp"

#include <memory>
#include <string>

#include "glm/vec2.hpp"

namespace Cacao {
    class CACAO_API Window {
      public:
        static Window& Get();

        Window(const Window&) = delete;
        Window(Window&&) = delete;
        Window& operator=(const Window&) = delete;
        Window& operator=(Window&&) = delete;

        enum class Mode {
            Windowed,
            Borderless,
            Fullscreen
        };

        //======================= WINDOW CONTROL =======================

        void Open(const std::string& title, glm::uvec2 size, bool visible, Mode mode);

        void Close();

        void HandleOSEvents();

        //======================= PROPERTY SETTERS =======================

        void Show();

        void Hide();

        void SetTitle(const std::string& newTitle);

        void Resize(const glm::uvec2& newSize);

        void SetMode(Mode newMode);

        //======================= PROPERTY GETTERS =======================

        bool IsOpen() const;

        bool IsVisible() const;

        bool IsMinimized() const;

        const std::string GetTitle() const;

        const glm::uvec2 GetSize() const;

        const glm::uvec2 GetContentAreaSize() const;

        Mode GetMode() const;

        class Impl;

      private:
        std::unique_ptr<Impl> impl;
        friend class ImplAccessor;

        Window();
        ~Window();
    };
}