mirror of https://github.com/buggins/dlangui.git
SDL: State was handled twice first in setWindowState() second in event loop. Update window size and pos in event loop.
This commit is contained in:
parent
ae1af989c9
commit
627e3cb11b
|
@ -371,59 +371,46 @@ class SDLWindow : Window {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool res = false;
|
bool res = false;
|
||||||
bool stateChanged = false;
|
|
||||||
|
|
||||||
// change state
|
// change state
|
||||||
switch(newState) {
|
switch(newState) {
|
||||||
case WindowState.maximized:
|
case WindowState.maximized:
|
||||||
if (_windowState != WindowState.maximized) {
|
if (_windowState != WindowState.maximized)
|
||||||
SDL_MaximizeWindow(_win);
|
SDL_MaximizeWindow(_win);
|
||||||
stateChanged = true;
|
|
||||||
}
|
|
||||||
res = true;
|
res = true;
|
||||||
break;
|
break;
|
||||||
case WindowState.minimized:
|
case WindowState.minimized:
|
||||||
if (_windowState != WindowState.minimized) {
|
if (_windowState != WindowState.minimized)
|
||||||
SDL_MinimizeWindow(_win);
|
SDL_MinimizeWindow(_win);
|
||||||
stateChanged = true;
|
|
||||||
}
|
|
||||||
res = true;
|
res = true;
|
||||||
break;
|
break;
|
||||||
case WindowState.hidden:
|
case WindowState.hidden:
|
||||||
if (_windowState != WindowState.hidden) {
|
if (_windowState != WindowState.hidden)
|
||||||
SDL_HideWindow(_win);
|
SDL_HideWindow(_win);
|
||||||
stateChanged = true;
|
|
||||||
}
|
|
||||||
res = true;
|
res = true;
|
||||||
break;
|
break;
|
||||||
case WindowState.normal:
|
case WindowState.normal:
|
||||||
if (_windowState != WindowState.normal) {
|
if (_windowState != WindowState.normal)
|
||||||
SDL_RestoreWindow(_win);
|
SDL_RestoreWindow(_win);
|
||||||
stateChanged = true;
|
|
||||||
}
|
|
||||||
res = true;
|
res = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// change size and/or position
|
// change size and/or position
|
||||||
|
|
||||||
bool windowRectChanged = false;
|
|
||||||
|
|
||||||
if (newWindowRect != RECT_VALUE_IS_NOT_SET && (newState == WindowState.normal || newState == WindowState.unspecified)) {
|
if (newWindowRect != RECT_VALUE_IS_NOT_SET && (newState == WindowState.normal || newState == WindowState.unspecified)) {
|
||||||
|
|
||||||
// change position
|
// change position
|
||||||
if (newWindowRect.top != int.min && newWindowRect.left != int.min) {
|
if (newWindowRect.top != int.min && newWindowRect.left != int.min) {
|
||||||
SDL_SetWindowPosition(_win, newWindowRect.left, newWindowRect.top);
|
SDL_SetWindowPosition(_win, newWindowRect.left, newWindowRect.top);
|
||||||
res = true;
|
res = true;
|
||||||
windowRectChanged = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// change size
|
// change size
|
||||||
if (newWindowRect.bottom != int.min && newWindowRect.right != int.min) {
|
if (newWindowRect.bottom != int.min && newWindowRect.right != int.min) {
|
||||||
SDL_SetWindowSize(_win, newWindowRect.right, newWindowRect.bottom);
|
SDL_SetWindowSize(_win, newWindowRect.right, newWindowRect.bottom);
|
||||||
res = true;
|
res = true;
|
||||||
windowRectChanged = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,8 +419,6 @@ class SDLWindow : Window {
|
||||||
res = true;
|
res = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleWindowStateChange(stateChanged ? newState : WindowState.unspecified, windowRectChanged ? newWindowRect : RECT_VALUE_IS_NOT_SET);
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1239,6 +1224,7 @@ class SDLPlatform : Platform {
|
||||||
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||||
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_SIZE_CHANGED win=", event.window.windowID, " pos=", event.window.data1,
|
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_SIZE_CHANGED win=", event.window.windowID, " pos=", event.window.data1,
|
||||||
",", event.window.data2);
|
",", event.window.data2);
|
||||||
|
w.handleWindowStateChange(WindowState.unspecified, Rect(int.min, int.min, event.window.data1, event.window.data2));
|
||||||
w.redraw();
|
w.redraw();
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
|
@ -1254,11 +1240,13 @@ class SDLPlatform : Platform {
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_SHOWN:
|
case SDL_WINDOWEVENT_SHOWN:
|
||||||
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_SHOWN - ", w.windowCaption);
|
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_SHOWN - ", w.windowCaption);
|
||||||
|
w.handleWindowStateChange(WindowState.normal);
|
||||||
if (!_windowsMinimized && w.hasModalChild())
|
if (!_windowsMinimized && w.hasModalChild())
|
||||||
w.restoreModalChilds();
|
w.restoreModalChilds();
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_HIDDEN:
|
case SDL_WINDOWEVENT_HIDDEN:
|
||||||
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_HIDDEN - ", w.windowCaption);
|
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_HIDDEN - ", w.windowCaption);
|
||||||
|
w.handleWindowStateChange(WindowState.hidden);
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_EXPOSED:
|
case SDL_WINDOWEVENT_EXPOSED:
|
||||||
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_EXPOSED - ", w.windowCaption);
|
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_EXPOSED - ", w.windowCaption);
|
||||||
|
@ -1267,7 +1255,8 @@ class SDLPlatform : Platform {
|
||||||
w.invalidate();
|
w.invalidate();
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_MOVED:
|
case SDL_WINDOWEVENT_MOVED:
|
||||||
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_MOVED- ", w.windowCaption);
|
debug(DebugSDL) Log.d("SDL_WINDOWEVENT_MOVED - ", w.windowCaption);
|
||||||
|
w.handleWindowStateChange(WindowState.unspecified, Rect(event.window.data1, event.window.data2, int.min, int.min));
|
||||||
if (!_windowsMinimized && w.hasModalChild())
|
if (!_windowsMinimized && w.hasModalChild())
|
||||||
w.restoreModalChilds();
|
w.restoreModalChilds();
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue