]> git.tdb.fi Git - libs/gui.git/blob - source/graphics/windows/display.cpp
Split platform-specific parts into separate directories
[libs/gui.git] / source / graphics / windows / display.cpp
1 #include <windows.h>
2 #include "display.h"
3
4 using namespace std;
5
6 namespace Msp {
7 namespace Graphics {
8
9 Display::Display(const string &)
10 {
11         for(unsigned i=0;; ++i)
12         {
13                 DEVMODE info;
14                 if(!EnumDisplaySettings(0, i, &info))
15                         break;
16
17                 VideoMode mode(info.dmPelsWidth, info.dmPelsHeight);
18                 mode.rate = info.dmDisplayFrequency;
19                 modes.push_back(mode);
20         }
21         
22         DEVMODE info;
23         if(EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &info))
24         {
25                 orig_mode = VideoMode(info.dmPelsWidth, info.dmPelsHeight);
26                 orig_mode.rate = info.dmDisplayFrequency;
27         }
28 }
29
30 Display::~Display()
31 {
32 }
33
34 void Display::set_mode(const VideoMode &mode)
35 {
36         DEVMODE info;
37         info.dmSize = sizeof(DEVMODE);
38         info.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT;
39         info.dmPelsWidth = mode.width;
40         info.dmPelsHeight = mode.height;
41         if(mode.rate)
42         {
43                 info.dmFields |= DM_DISPLAYFREQUENCY;
44                 info.dmDisplayFrequency = mode.rate;
45         }
46
47         LONG ret = ChangeDisplaySettings(&info, CDS_FULLSCREEN);
48         if(ret!=DISP_CHANGE_SUCCESSFUL)
49                 throw unsupported_video_mode(mode);
50 }
51
52 bool Display::process_events()
53 {
54         MSG msg;
55         if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
56         {
57                 DispatchMessage(&msg);
58                 return true;
59         }
60         else
61                 return false;
62 }
63
64 void Display::check_error()
65 {
66 }
67
68 } // namespace Msp
69 } // namespace Graphics