]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/display.h
Avoid using std::list
[libs/gui.git] / source / graphics / display.h
index bff17c3ffe69e8a819bf6b9872c77dc8ddab06bc..23ab57113ef0f626d8c4120468da6f60e6159c2b 100644 (file)
@@ -1,9 +1,10 @@
 #ifndef MSP_GRAPHICS_DISPLAY_H_
 #define MSP_GRAPHICS_DISPLAY_H_
 
-#include <list>
 #include <stdexcept>
 #include <string>
+#include <vector>
+#include <sigc++/signal.h>
 #include "errordialog.h"
 #include "monitor.h"
 #include "videomode.h"
@@ -18,12 +19,16 @@ class Display
 public:
        struct Private;
 
+       sigc::signal<void> signal_got_focus;
+       sigc::signal<void> signal_lost_focus;
+
 private:
-       std::list<Monitor> monitors;
-       Monitor *primary_monitor;
-       std::list<VideoMode> modes;
-       Private *priv;
-       ErrorDialog *err_dialog;
+       std::vector<Monitor> monitors;
+       Monitor *primary_monitor = nullptr;
+       std::vector<VideoMode> modes;
+       Private *priv = nullptr;
+       ErrorDialog *err_dialog = nullptr;
+       Window *focus_window = nullptr;
 
 public:
        Display(const std::string &disp_name = std::string());
@@ -34,13 +39,19 @@ 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 std::vector<Monitor> &get_monitors() const { return monitors; }
+       const std::vector<VideoMode> &get_modes() const { return modes; }
        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;
+
 private:
-       const VideoMode *find_matching_mode(const VideoMode &) const;
+       void window_got_focus(Window &);
+       void window_lost_focus();
+public:
+       Window *get_focus_window() const { return focus_window; }
 
 public:
        void tick();