|
@@ -796,7 +796,7 @@ SDL_GetDisplayOrientation(int displayIndex)
|
|
|
}
|
|
|
|
|
|
SDL_bool
|
|
|
-SDL_AddDisplayMode(SDL_VideoDisplay * display, const SDL_DisplayMode * mode)
|
|
|
+SDL_AddDisplayMode(SDL_VideoDisplay * display, const SDL_DisplayMode * mode)
|
|
|
{
|
|
|
SDL_DisplayMode *modes;
|
|
|
int i, nmodes;
|
|
@@ -831,6 +831,18 @@ SDL_AddDisplayMode(SDL_VideoDisplay * display, const SDL_DisplayMode * mode)
|
|
|
return SDL_TRUE;
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+SDL_SetCurrentDisplayMode(SDL_VideoDisplay * display, const SDL_DisplayMode * mode)
|
|
|
+{
|
|
|
+ SDL_memcpy(&display->current_mode, mode, sizeof(*mode));
|
|
|
+}
|
|
|
+
|
|
|
+void
|
|
|
+SDL_SetDesktopDisplayMode(SDL_VideoDisplay * display, const SDL_DisplayMode * mode)
|
|
|
+{
|
|
|
+ SDL_memcpy(&display->desktop_mode, mode, sizeof(*mode));
|
|
|
+}
|
|
|
+
|
|
|
static int
|
|
|
SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay * display)
|
|
|
{
|
|
@@ -850,6 +862,25 @@ SDL_GetNumDisplayModes(int displayIndex)
|
|
|
return SDL_GetNumDisplayModesForDisplay(&_this->displays[displayIndex]);
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+SDL_ResetDisplayModes(int displayIndex)
|
|
|
+{
|
|
|
+ SDL_VideoDisplay *display;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ CHECK_DISPLAY_INDEX(displayIndex,);
|
|
|
+
|
|
|
+ display = &_this->displays[displayIndex];
|
|
|
+ for (i = display->num_display_modes; i--;) {
|
|
|
+ SDL_free(display->display_modes[i].driverdata);
|
|
|
+ display->display_modes[i].driverdata = NULL;
|
|
|
+ }
|
|
|
+ SDL_free(display->display_modes);
|
|
|
+ display->display_modes = NULL;
|
|
|
+ display->num_display_modes = 0;
|
|
|
+ display->max_display_modes = 0;
|
|
|
+}
|
|
|
+
|
|
|
int
|
|
|
SDL_GetDisplayMode(int displayIndex, int index, SDL_DisplayMode * mode)
|
|
|
{
|
|
@@ -1021,6 +1052,7 @@ SDL_SetDisplayModeForDisplay(SDL_VideoDisplay * display, const SDL_DisplayMode *
|
|
|
{
|
|
|
SDL_DisplayMode display_mode;
|
|
|
SDL_DisplayMode current_mode;
|
|
|
+ int result;
|
|
|
|
|
|
if (mode) {
|
|
|
display_mode = *mode;
|
|
@@ -1058,10 +1090,13 @@ SDL_SetDisplayModeForDisplay(SDL_VideoDisplay * display, const SDL_DisplayMode *
|
|
|
if (!_this->SetDisplayMode) {
|
|
|
return SDL_SetError("SDL video driver doesn't support changing display mode");
|
|
|
}
|
|
|
- if (_this->SetDisplayMode(_this, display, &display_mode) < 0) {
|
|
|
+ _this->setting_display_mode = SDL_TRUE;
|
|
|
+ result = _this->SetDisplayMode(_this, display, &display_mode);
|
|
|
+ _this->setting_display_mode = SDL_FALSE;
|
|
|
+ if (result < 0) {
|
|
|
return -1;
|
|
|
}
|
|
|
- display->current_mode = display_mode;
|
|
|
+ SDL_SetCurrentDisplayMode(display, &display_mode);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3157,7 +3192,7 @@ SDL_DisableScreenSaver()
|
|
|
void
|
|
|
SDL_VideoQuit(void)
|
|
|
{
|
|
|
- int i, j;
|
|
|
+ int i;
|
|
|
|
|
|
if (!_this) {
|
|
|
return;
|
|
@@ -3179,12 +3214,7 @@ SDL_VideoQuit(void)
|
|
|
|
|
|
for (i = 0; i < _this->num_displays; ++i) {
|
|
|
SDL_VideoDisplay *display = &_this->displays[i];
|
|
|
- for (j = display->num_display_modes; j--;) {
|
|
|
- SDL_free(display->display_modes[j].driverdata);
|
|
|
- display->display_modes[j].driverdata = NULL;
|
|
|
- }
|
|
|
- SDL_free(display->display_modes);
|
|
|
- display->display_modes = NULL;
|
|
|
+ SDL_ResetDisplayModes(i);
|
|
|
SDL_free(display->desktop_mode.driverdata);
|
|
|
display->desktop_mode.driverdata = NULL;
|
|
|
SDL_free(display->driverdata);
|