]> git.tdb.fi Git - libs/gui.git/blob - source/graphics/display.cpp
Expose functions for finding video modes from Display
[libs/gui.git] / source / graphics / display.cpp
1 #include "display.h"
2 #include "display_private.h"
3 #include "window.h"
4
5 using namespace std;
6
7 namespace Msp {
8 namespace Graphics {
9
10 void Display::add_window(Window &wnd)
11 {
12         priv->windows[wnd.get_private().window] = &wnd;
13 }
14
15 void Display::remove_window(Window &wnd)
16 {
17         priv->windows.erase(wnd.get_private().window);
18 }
19
20 const VideoMode &Display::get_desktop_mode() const
21 {
22         if(!primary_monitor || !primary_monitor->desktop_mode)
23                 throw logic_error("no desktop mode");
24         return *primary_monitor->desktop_mode;
25 }
26
27 void Display::restore_mode()
28 {
29         for(list<Monitor>::const_iterator i=monitors.begin(); i!=monitors.end(); ++i)
30                 if(i->desktop_mode)
31                         set_mode(*i->desktop_mode, false);
32 }
33
34 const VideoMode *Display::find_mode(const VideoMode &mode) const
35 {
36         for(list<VideoMode>::const_iterator i=modes.begin(); i!=modes.end(); ++i)
37         {
38                 if(mode.monitor && i->monitor!=mode.monitor)
39                         continue;
40                 if(mode.rate && i->rate!=mode.rate)
41                         continue;
42                 if(i->width==mode.width && i->height==mode.height)
43                         return &*i;
44         }
45
46         return 0;
47 }
48
49 const VideoMode *Display::find_mode(unsigned width, unsigned height) const
50 {
51         return find_mode(VideoMode(width, height));
52 }
53
54 void Display::tick()
55 {
56         check_error();
57
58         while(process_events()) ;
59 }
60
61 } // namespace Graphics
62 } // namespace Msp