/src/Core_WindowEvents/Win32OpenGL/DisplayModeManagerPimpl_WINDOWS.cpp

http://github.com/Akranar/daguerreo · C++ · 49 lines · 41 code · 8 blank · 0 comment · 6 complexity · adad65c2c697d84095b7292f1e71a309 MD5 · raw file

  1. #include "DisplayModeManagerPimpl_WINDOWS.h"
  2. #include <vector>
  3. #include <set>
  4. #include <algorithm>
  5. #include <iostream>
  6. DisplayModeManagerPimpl::DisplayModeManagerPimpl()
  7. {
  8. std::set<std::pair<int, int> > unique_resolutions;
  9. std::vector<std::pair<int, int> > sorted_modes;
  10. DEVMODE display_setting;
  11. display_setting.dmSize = sizeof(DEVMODE);
  12. EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &display_setting);
  13. int i = 0;
  14. int bpp;
  15. bpp = display_setting.dmBitsPerPel;
  16. sorted_modes.push_back(std::make_pair(display_setting.dmPelsWidth, display_setting.dmPelsHeight));
  17. while (EnumDisplaySettings(NULL, i, &display_setting))
  18. {
  19. if (display_setting.dmBitsPerPel == bpp)
  20. {
  21. unique_resolutions.insert(std::make_pair(display_setting.dmPelsWidth, display_setting.dmPelsHeight));
  22. }
  23. ++i;
  24. }
  25. for (std::set<std::pair<int, int> >::iterator it = unique_resolutions.begin(); it != unique_resolutions.end(); ++it)
  26. {
  27. sorted_modes.push_back(*it);
  28. }
  29. std::sort(sorted_modes.begin()+1, sorted_modes.end());
  30. mode_count = sorted_modes.size();
  31. modes = new DisplayMode[mode_count];
  32. for (unsigned int i = 0; i < sorted_modes.size(); ++i)
  33. {
  34. modes[i].width = sorted_modes[i].first;
  35. modes[i].height = sorted_modes[i].second;
  36. }
  37. }
  38. DisplayModeManagerPimpl::~DisplayModeManagerPimpl()
  39. {
  40. delete [] modes;
  41. }