]> git.tdb.fi Git - libs/gui.git/blob - examples/lsmodes.cpp
Add an example program for listing video modes
[libs/gui.git] / examples / lsmodes.cpp
1 #include <msp/core/application.h>
2 #include <msp/graphics/display.h>
3 #include <msp/io/print.h>
4
5 using namespace std;
6 using namespace Msp;
7
8 class LsModes: public RegisteredApplication<LsModes>
9 {
10 private:
11         Graphics::Display display;
12
13 public:
14         LsModes(int, char **);
15
16         virtual int main();
17 };
18
19 LsModes::LsModes(int, char **)
20 {
21 }
22
23 int LsModes::main()
24 {
25         const vector<Graphics::Monitor> &monitors = display.get_monitors();
26         const Graphics::VideoMode &desktop_mode = display.get_desktop_mode();
27         unsigned n = 0;
28         for(auto i=monitors.begin(); i!=monitors.end(); ++i, ++n)
29         {
30                 IO::print("Monitor #%d", n);
31                 if(&*i==desktop_mode.monitor)
32                         IO::print(" (primary)");
33                 IO::print(": %s\n", i->name);
34
35                 const Graphics::VideoMode *prev_mode = 0;
36                 for(const Graphics::VideoMode *m: i->video_modes)
37                 {
38                         if(!prev_mode || m->width!=prev_mode->width || m->height!=prev_mode->height)
39                         {
40                                 if(prev_mode)
41                                         IO::print("\n");
42                                 IO::print("  %dx%d", m->width, m->height);
43                         }
44                         IO::print(" %c%d", (m==i->desktop_settings.mode ? '*' : ' '), m->rate);
45                         prev_mode = m;
46                 }
47
48                 if(!i->video_modes.empty())
49                         IO::print("\n\n");
50         }
51
52         return 0;
53 }