SdlWindowApi.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * author: Patrick-Christopher Mattulat
  3. * e-mail: webmaster@lynarstudios.com
  4. */
  5. #include <SDL3/SDL.h>
  6. #include <core/StatusCodeOk.hpp>
  7. #include <core/StatusCodeWindowApiLoadingFailed.hpp>
  8. #include <core/StatusCodeWindowCreationFailed.hpp>
  9. #include <ls-std/core/evaluator/NullPointerArgumentEvaluator.hpp>
  10. #include <window/SdlApi.hpp>
  11. #include <window/SdlWindowApi.hpp>
  12. using ls::atlantis::core::StatusCodeOk;
  13. using ls::atlantis::core::StatusCodeWindowApiLoadingFailed;
  14. using ls::atlantis::core::StatusCodeWindowCreationFailed;
  15. using ls::atlantis::interfaces::AStatusCode;
  16. using ls::atlantis::interfaces::ISdlApi;
  17. using ls::std::core::NullPointerArgumentEvaluator;
  18. using ls::atlantis::window::SdlApi;
  19. using ls::atlantis::window::SdlWindowApi;
  20. using ::std::make_shared;
  21. using ::std::shared_ptr;
  22. SdlWindowApi::SdlWindowApi() : SdlWindowApi(make_shared<SdlApi>())
  23. {}
  24. SdlWindowApi::SdlWindowApi(const shared_ptr<ISdlApi> &_sdlApi)
  25. : sdlApi(_sdlApi),
  26. window(nullptr, [this](SDL_Window *_window) { this->sdlApi->DestroyWindow(_window); })
  27. {
  28. NullPointerArgumentEvaluator(_sdlApi).evaluate();
  29. }
  30. SdlWindowApi::~SdlWindowApi()
  31. {
  32. sdlApi->Quit();
  33. }
  34. shared_ptr<AStatusCode> SdlWindowApi::init()
  35. {
  36. shared_ptr<AStatusCode> statusCode = this->_initApi();
  37. if (statusCode->getId() == StatusCodeOk{}.getId())
  38. {
  39. statusCode = this->_createWindow();
  40. }
  41. return statusCode;
  42. }
  43. shared_ptr<AStatusCode> SdlWindowApi::_createWindow()
  44. {
  45. shared_ptr<AStatusCode> statusCode = make_shared<StatusCodeOk>();
  46. window.reset(sdlApi->CreateWindow("", 0, 0, SDL_WINDOW_FULLSCREEN));
  47. if (window == nullptr)
  48. {
  49. statusCode = make_shared<StatusCodeWindowCreationFailed>();
  50. statusCode->addHint(sdlApi->GetError());
  51. }
  52. return statusCode;
  53. }
  54. shared_ptr<AStatusCode> SdlWindowApi::_initApi() const
  55. {
  56. shared_ptr<AStatusCode> statusCode = make_shared<StatusCodeOk>();
  57. if (!sdlApi->Init(SDL_INIT_VIDEO))
  58. {
  59. statusCode = make_shared<StatusCodeWindowApiLoadingFailed>();
  60. }
  61. return statusCode;
  62. }