initializer.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "initializer.h"
  2. using namespace simple::graphical;
  3. int initializer::screensaver_control::global_keep_alive_count = 0;
  4. bool initializer::screensaver_control::global_kept_alive() noexcept
  5. {
  6. return global_keep_alive_count > 0;
  7. }
  8. initializer::screensaver_control::screensaver_control() noexcept
  9. : keep_alive_count(0)
  10. {
  11. if(!global_kept_alive() && !SDL_IsScreenSaverEnabled())
  12. {
  13. SDL_EnableScreenSaver();
  14. }
  15. }
  16. void initializer::screensaver_control::keep_alive() noexcept
  17. {
  18. if(!global_kept_alive())
  19. {
  20. SDL_DisableScreenSaver();
  21. }
  22. ++global_keep_alive_count;
  23. ++keep_alive_count;
  24. }
  25. void initializer::screensaver_control::release_one() noexcept
  26. {
  27. if(kept_alive())
  28. {
  29. --keep_alive_count;
  30. --global_keep_alive_count;
  31. if(!global_kept_alive())
  32. {
  33. SDL_EnableScreenSaver();
  34. }
  35. }
  36. }
  37. void initializer::screensaver_control::release_all() noexcept
  38. {
  39. if(kept_alive())
  40. {
  41. global_keep_alive_count -= keep_alive_count;
  42. if(!global_kept_alive())
  43. {
  44. SDL_EnableScreenSaver();
  45. }
  46. keep_alive_count = 0;
  47. }
  48. }
  49. [[nodiscard]] bool initializer::screensaver_control::kept_alive() const noexcept
  50. {
  51. return keep_alive_count > 0;
  52. }
  53. initializer::screensaver_control::~screensaver_control() noexcept
  54. {
  55. release_all();
  56. }
  57. initializer::initializer() : sdlcore::initializer(sdlcore::system_flag::video), screensaver()
  58. {}
  59. display_list initializer::displays() const noexcept
  60. {
  61. auto count = SDL_GetNumVideoDisplays();
  62. if(count < 0)
  63. count = 0;
  64. return display_list(count);
  65. }