public void SetResolution(Resolution resolution)
{
if (resolution != WindowResolution && GameConstants.StaticResolution)
{
throw new DisplayManagerException(
String.Format(
"Cannot change resolution. (Game Property '{0}' set to true)",
GameConstants.XmlElements.STATIC_RESOLUTION
)
);
}
if (GameConstants.OnlyLandscapeResolutions && !resolution.IsLandscape)
{
throw new DisplayManagerException(
String.Format(
"Cannot change resolution to '{0}'; resolutions must be landscape. " +
"(GameProperty '{1}' set to true)", resolution, GameConstants.XmlElements.ONLY_LANDSCAPE_RESOLUTIONS
)
);
}
else if (GameConstants.OnlyPortraitResolutions && !resolution.IsPortrait)
{
throw new DisplayManagerException(
String.Format(
"Cannot change resolution to '{0}'; resolutions must be portrait. " +
"(GameProperty '{1}' set to true)", resolution, GameConstants.XmlElements.ONLY_PORTRAIT_RESOLUTIONS
)
);
}
var prev = WindowResolution;
WindowResolution = resolution;
dirty = true;
iteratingResolutionChangeListeners = true;
foreach (var obj in registeredResolutionChangeListeners)
{
if (obj.OnResolutionChanged != null)
obj.OnResolutionChanged(prev, resolution, ResolutionScale);
}
iteratingResolutionChangeListeners = false;
if (_toAdd.Count > 0)
{
foreach (var obj in _toAdd)
registeredResolutionChangeListeners.Add(obj);
_toAdd.Clear();
}
if (_toRemove.Count > 0)
{
foreach (var obj in _toRemove)
registeredResolutionChangeListeners.Remove(obj);
_toRemove.Clear();
}
}