SdlWindowApi.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. window.reset(sdlApi->CreateWindow("", 0, 0, SDL_WINDOW_FULLSCREEN));
  46. if (window == nullptr)
  47. {
  48. return make_shared<StatusCodeWindowCreationFailed>();
  49. }
  50. return make_shared<StatusCodeOk>();
  51. }
  52. shared_ptr<AStatusCode> SdlWindowApi::_initApi() const
  53. {
  54. shared_ptr<AStatusCode> statusCode = make_shared<StatusCodeOk>();
  55. if (!sdlApi->Init(SDL_INIT_VIDEO))
  56. {
  57. statusCode = make_shared<StatusCodeWindowApiLoadingFailed>();
  58. }
  59. return statusCode;
  60. }