// Copyright 2018 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include #include "Common/Flag.h" #include "Common/WindowSystemInfo.h" class Platform { public: virtual ~Platform(); bool IsRunning() const { return m_running.IsSet(); } bool IsWindowFocused() const { return m_window_focus; } bool IsWindowFullscreen() const { return m_window_fullscreen; } virtual bool Init(); virtual void SetTitle(const std::string& title); virtual void MainLoop() = 0; virtual WindowSystemInfo GetWindowSystemInfo() const = 0; // Requests a graceful shutdown, from SIGINT/SIGTERM. void RequestShutdown(); // Request an immediate shutdown. void Stop(); static std::unique_ptr CreateHeadlessPlatform(); #ifdef HAVE_X11 static std::unique_ptr CreateX11Platform(); #endif #ifdef __linux__ static std::unique_ptr CreateFBDevPlatform(); #endif #ifdef _WIN32 static std::unique_ptr CreateWin32Platform(); #endif protected: void UpdateRunningFlag(); Common::Flag m_running{true}; Common::Flag m_shutdown_requested{false}; Common::Flag m_tried_graceful_shutdown{false}; bool m_window_focus = true; // Should be made atomic if actually implemented bool m_window_fullscreen = false; };