/* * author: Patrick-Christopher Mattulat * e-mail: webmaster@lynarstudios.com */ #include #include #include #include #include #include #include using ls::atlantis::glossary::WindowApiTypes; using ls::atlantis::interfaces::AStatusCode; using ls::atlantis::interfaces::ISdlApi; using ls::atlantis::messaging::StatusCodeOk; using ls::atlantis::messaging::StatusCodeWindowApiLoadingFailed; using ls::atlantis::messaging::StatusCodeWindowCreationFailed; using ls::atlantis::window::SdlApi; using ls::atlantis::window::SdlWindowApi; using ls::std::core::NullPointerArgumentEvaluator; using ::std::make_shared; using ::std::shared_ptr; SdlWindowApi::SdlWindowApi() : SdlWindowApi(make_shared()) {} SdlWindowApi::SdlWindowApi(const shared_ptr &_sdlApi) : sdlApi(_sdlApi), window(nullptr, [this](SDL_Window *_window) { this->sdlApi->DestroyWindow(_window); }), windowApiType(WindowApiTypes::SDL_WINDOW_API) { NullPointerArgumentEvaluator(_sdlApi).evaluate(); } SdlWindowApi::~SdlWindowApi() { sdlApi->Quit(); } WindowApiTypes SdlWindowApi::getWindowApiType() { return this->windowApiType; } AStatusCode SdlWindowApi::init() { AStatusCode statusCode = this->_initApi(); if (statusCode.getCode() == StatusCodeOk{}.getCode()) { statusCode = this->_createWindow(); } return statusCode; } AStatusCode SdlWindowApi::_createWindow() { AStatusCode statusCode = StatusCodeOk{}; window.reset(sdlApi->CreateWindow("", 0, 0, SDL_WINDOW_FULLSCREEN)); if (window == nullptr) { statusCode = StatusCodeWindowCreationFailed{}; statusCode.addHint(sdlApi->GetError()); } return statusCode; } AStatusCode SdlWindowApi::_initApi() const { AStatusCode statusCode = StatusCodeOk{}; if (!sdlApi->Init(SDL_INIT_VIDEO)) { statusCode = StatusCodeWindowApiLoadingFailed{}; statusCode.addHint(sdlApi->GetError()); } return statusCode; }