]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/display.cpp
Use nullptr in place of 0 or NULL
[libs/gui.git] / source / graphics / display.cpp
index 1c7b639a06d8f993b72ef92fb19d9d211271ed5b..8c3813d16cd8d19321fddcd6609a9dfc5748da3c 100644 (file)
@@ -1,6 +1,6 @@
+#include "display.h"
 #include <cmath>
 #include <sigc++/bind.h>
-#include "display.h"
 #include "display_private.h"
 #include "window.h"
 
@@ -20,47 +20,54 @@ void Display::remove_window(Window &wnd)
 {
        priv->windows.erase(wnd.get_private().window);
        if(&wnd==focus_window)
-               focus_window = 0;
+               focus_window = nullptr;
 }
 
 const VideoMode &Display::get_desktop_mode() const
 {
-       if(!primary_monitor || !primary_monitor->desktop_mode)
+       if(!primary_monitor || !primary_monitor->desktop_settings.mode)
                throw logic_error("no desktop mode");
-       return *primary_monitor->desktop_mode;
+       return *primary_monitor->desktop_settings.mode;
 }
 
 void Display::restore_mode()
 {
-       for(list<Monitor>::const_iterator i=monitors.begin(); i!=monitors.end(); ++i)
-               if(i->desktop_mode)
-                       set_mode(*i->desktop_mode, false);
+       for(const Monitor &m: monitors)
+               if(m.desktop_settings.mode)
+                       set_mode(*m.desktop_settings.mode, false);
 }
 
 const VideoMode *Display::find_mode(const VideoMode &mode, float rate_tolerance) const
 {
-       const VideoMode *closest = 0;
-       float rate_diff = mode.rate;
-       for(list<VideoMode>::const_iterator i=modes.begin(); i!=modes.end(); ++i)
+       const VideoMode *closest = nullptr;
+       float rate_diff = 0.0f;
+
+       float target_rate = mode.rate;
+       if(!target_rate && mode.monitor)
+               if(const VideoMode *current_mode = mode.monitor->current_settings.mode)
+                       target_rate = current_mode->rate;
+
+       for(const VideoMode &m: modes)
        {
-               if(mode.monitor && i->monitor!=mode.monitor)
+               if(mode.monitor && m.monitor!=mode.monitor)
                        continue;
-               if(mode.rate && (i->rate<mode.rate-rate_tolerance || i->rate>mode.rate+rate_tolerance))
+               // Only check rate tolerance against an explicitly requested rate
+               if(mode.rate && (m.rate<mode.rate-rate_tolerance || m.rate>mode.rate+rate_tolerance))
                        continue;
-               if(i->width!=mode.width || i->height!=mode.height)
+               if(m.width!=mode.width || m.height!=mode.height)
                        continue;
 
-               if(mode.rate)
+               float ref_rate = target_rate;
+               if(!ref_rate)
+                       if(const VideoMode *current_mode = m.monitor->current_settings.mode)
+                               ref_rate = current_mode->rate;
+
+               float d = abs(m.rate-ref_rate);
+               if(!closest || d<rate_diff)
                {
-                       float d = abs(i->rate-mode.rate);
-                       if(d<rate_diff)
-                       {
-                               closest = &*i;
-                               rate_diff = d;
-                       }
+                       closest = &m;
+                       rate_diff = d;
                }
-               else
-                       return &*i;
        }
 
        return closest;
@@ -78,7 +85,7 @@ void Display::window_got_focus(Window &w)
 
 void Display::window_lost_focus()
 {
-       focus_window = 0;
+       focus_window = nullptr;
 }
 
 void Display::tick()