]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/windows/display.cpp
Split platform-specific parts into separate directories
[libs/gui.git] / source / graphics / windows / display.cpp
diff --git a/source/graphics/windows/display.cpp b/source/graphics/windows/display.cpp
new file mode 100644 (file)
index 0000000..5cc04c1
--- /dev/null
@@ -0,0 +1,69 @@
+#include <windows.h>
+#include "display.h"
+
+using namespace std;
+
+namespace Msp {
+namespace Graphics {
+
+Display::Display(const string &)
+{
+       for(unsigned i=0;; ++i)
+       {
+               DEVMODE info;
+               if(!EnumDisplaySettings(0, i, &info))
+                       break;
+
+               VideoMode mode(info.dmPelsWidth, info.dmPelsHeight);
+               mode.rate = info.dmDisplayFrequency;
+               modes.push_back(mode);
+       }
+       
+       DEVMODE info;
+       if(EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &info))
+       {
+               orig_mode = VideoMode(info.dmPelsWidth, info.dmPelsHeight);
+               orig_mode.rate = info.dmDisplayFrequency;
+       }
+}
+
+Display::~Display()
+{
+}
+
+void Display::set_mode(const VideoMode &mode)
+{
+       DEVMODE info;
+       info.dmSize = sizeof(DEVMODE);
+       info.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT;
+       info.dmPelsWidth = mode.width;
+       info.dmPelsHeight = mode.height;
+       if(mode.rate)
+       {
+               info.dmFields |= DM_DISPLAYFREQUENCY;
+               info.dmDisplayFrequency = mode.rate;
+       }
+
+       LONG ret = ChangeDisplaySettings(&info, CDS_FULLSCREEN);
+       if(ret!=DISP_CHANGE_SUCCESSFUL)
+               throw unsupported_video_mode(mode);
+}
+
+bool Display::process_events()
+{
+       MSG msg;
+       if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
+       {
+               DispatchMessage(&msg);
+               return true;
+       }
+       else
+               return false;
+}
+
+void Display::check_error()
+{
+}
+
+} // namespace Msp
+} // namespace Graphics