diff --git a/libs/app/include/psemek/app/app.hpp b/libs/app/include/psemek/app/app.hpp index 1fb962c1..51de8b43 100644 --- a/libs/app/include/psemek/app/app.hpp +++ b/libs/app/include/psemek/app/app.hpp @@ -1,13 +1,13 @@ #pragma once #include -#include + +#include namespace psemek::app { struct app - : util::pimpl::dynamic { app(std::string const & name); virtual ~app(); @@ -39,6 +39,12 @@ namespace psemek::app void run(); void show_cursor(bool show); + + private: + struct impl; + std::unique_ptr pimpl_; + struct impl & impl() { return *pimpl_; } + struct impl const & impl() const { return *pimpl_; } }; } diff --git a/libs/app/source/app.cpp b/libs/app/source/app.cpp index 1bbaeb52..8cfccf47 100644 --- a/libs/app/source/app.cpp +++ b/libs/app/source/app.cpp @@ -4,35 +4,34 @@ #include -namespace +namespace psemek::app { - [[noreturn]] void sdl_fail(std::string const & message) + namespace { - throw std::runtime_error(message + SDL_GetError()); + + [[noreturn]] void sdl_fail(std::string const & message) + { + throw std::runtime_error(message + SDL_GetError()); + } + + struct sdl_initializer + { + sdl_initializer() + { + if (SDL_Init(SDL_INIT_VIDEO) != 0) + sdl_fail("Failed to initialize SDL2: "); + } + + ~sdl_initializer() + { + SDL_Quit(); + } + }; + } - struct sdl_initializer - { - sdl_initializer() - { - if (SDL_Init(SDL_INIT_VIDEO) != 0) - sdl_fail("Failed to initialize SDL2: "); - } - - ~sdl_initializer() - { - SDL_Quit(); - } - }; - -} - -namespace psemek::util::pimpl -{ - - template <> - struct impl + struct app::impl { sdl_initializer init; SDL_Window * window = nullptr; @@ -47,13 +46,8 @@ namespace psemek::util::pimpl } }; -} - -namespace psemek::app -{ - - app::app(std::string const & name) + : pimpl_{std::make_unique()} { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, gl::sys::GetLeastMajorVersion());