diff options
-rw-r--r-- | xbmc/settings/DisplaySettings.cpp | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/xbmc/settings/DisplaySettings.cpp b/xbmc/settings/DisplaySettings.cpp index b51c8c98aa..b73613d2e6 100644 --- a/xbmc/settings/DisplaySettings.cpp +++ b/xbmc/settings/DisplaySettings.cpp @@ -497,7 +497,7 @@ void CDisplaySettings::ApplyCalibrations() for (ResolutionInfos::const_iterator itCal = m_calibrations.begin(); itCal != m_calibrations.end(); ++itCal) { // find resolutions - for (size_t res = 0; res < m_resolutions.size(); ++res) + for (size_t res = RES_DESKTOP; res < m_resolutions.size(); ++res) { if (res == RES_WINDOW) continue; @@ -548,23 +548,23 @@ void CDisplaySettings::ApplyCalibrations() void CDisplaySettings::UpdateCalibrations() { CSingleLock lock(m_critical); - for (size_t res = RES_DESKTOP; res < m_resolutions.size(); ++res) + + // Add new (unique) resolutions + for (ResolutionInfos::const_iterator res(m_resolutions.cbegin() + RES_DESKTOP + 1); res != m_resolutions.cend(); ++res) + if (std::find_if(m_calibrations.cbegin(), m_calibrations.cend(), + [&](const RESOLUTION_INFO& info) { return StringUtils::EqualsNoCase(res->strMode, info.strMode); }) == m_resolutions.cend()) + m_calibrations.push_back(*res); + + for (auto &cal : m_calibrations) { - // find calibration - bool found = false; - for (ResolutionInfos::iterator itCal = m_calibrations.begin(); itCal != m_calibrations.end(); ++itCal) + ResolutionInfos::const_iterator res(std::find_if(m_resolutions.cbegin()+ RES_DESKTOP, m_resolutions.cend(), + [&](const RESOLUTION_INFO& info) { return StringUtils::EqualsNoCase(cal.strMode, info.strMode); })); + + if (res != m_resolutions.cend()) { - if (StringUtils::EqualsNoCase(itCal->strMode, m_resolutions[res].strMode)) - { - //! @todo erase calibrations with default values - *itCal = m_resolutions[res]; - found = true; - break; - } + //! @todo erase calibrations with default values + cal = *res; } - - if (!found) - m_calibrations.push_back(m_resolutions[res]); } } |