X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fgraphics%2Fdisplay.cpp;h=f40e02e572f6f7965d17e2a2fcadaf8173a00fa7;hb=43d31e73c4b97a37017757232c4ef1db355fee3a;hp=ebf14ea489c9d1befa6c8efd192a12806d5833d6;hpb=a8a9191481151f049781b670ea8883025a594a5f;p=libs%2Fgui.git diff --git a/source/graphics/display.cpp b/source/graphics/display.cpp index ebf14ea..f40e02e 100644 --- a/source/graphics/display.cpp +++ b/source/graphics/display.cpp @@ -32,35 +32,42 @@ const VideoMode &Display::get_desktop_mode() const void Display::restore_mode() { - for(list::const_iterator i=monitors.begin(); i!=monitors.end(); ++i) - if(i->desktop_settings.mode) - set_mode(*i->desktop_settings.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::const_iterator i=modes.begin(); i!=modes.end(); ++i) + 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->raterate>mode.rate+rate_tolerance)) + // Only check rate tolerance against an explicitly requested rate + if(mode.rate && (m.ratemode.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 || drate-mode.rate); - if(d