]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/display.h
Use float rather than unsigned for refresh rate
[libs/gui.git] / source / graphics / display.h
index 83b18532148c6cc01cafa9547539e9ec80091fa0..9c62b51ee854d1fe3fb98858a4f924f97cdce5d4 100644 (file)
@@ -2,43 +2,28 @@
 #define MSP_GRAPHICS_DISPLAY_H_
 
 #include <list>
-#include <map>
 #include <stdexcept>
 #include <string>
+#include "errordialog.h"
+#include "monitor.h"
+#include "videomode.h"
 
 namespace Msp {
 namespace Graphics {
 
 class Window;
 
-struct VideoMode
-{
-       unsigned width;
-       unsigned height;
-       unsigned rate;
-
-       VideoMode(): width(0), height(0), rate(0) { }
-       VideoMode(unsigned w, unsigned h): width(w), height(h), rate(0) { }
-};
-
-
-class unsupported_video_mode: public std::runtime_error
-{
-public:
-       unsupported_video_mode(const VideoMode &);
-       virtual ~unsupported_video_mode() throw () { }
-};
-
-
 class Display
 {
 public:
        struct Private;
 
 private:
+       std::list<Monitor> monitors;
+       Monitor *primary_monitor;
        std::list<VideoMode> modes;
-       VideoMode orig_mode;
        Private *priv;
+       ErrorDialog *err_dialog;
 
 public:
        Display(const std::string &disp_name = std::string());
@@ -49,12 +34,18 @@ public:
        void add_window(Window &);
        void remove_window(Window &);
 
+       const std::list<Monitor> &get_monitors() const { return monitors; }
        const std::list<VideoMode> &get_modes() const { return modes; }
-       const VideoMode &get_desktop_mode() const { return orig_mode; }
-       void set_mode(const VideoMode &);
-       void restore_mode() { set_mode(orig_mode); }
+       const VideoMode &get_desktop_mode() const;
+       void set_mode(const VideoMode &, bool = false);
+       void restore_mode();
+       const VideoMode *find_mode(const VideoMode &, float = 0.5f) const;
+       const VideoMode *find_mode(unsigned, unsigned) const;
 
        void tick();
+private:
+       bool process_events();
+public:
        void check_error();
 };