Close windows by dragging them off screen
This commit is contained in:
@@ -2211,7 +2211,7 @@ static void EnsureVisibleCaption(Window *w, int nx, int ny)
|
|||||||
ny = Clamp(ny, 0, _screen.height - MIN_VISIBLE_TITLE_BAR);
|
ny = Clamp(ny, 0, _screen.height - MIN_VISIBLE_TITLE_BAR);
|
||||||
|
|
||||||
/* Make sure the title bar isn't hidden behind the main tool bar or the status bar. */
|
/* Make sure the title bar isn't hidden behind the main tool bar or the status bar. */
|
||||||
if (!_settings_client.gui.vertical_toolbar || _game_mode == GM_EDITOR) {
|
if ((!_settings_client.gui.vertical_toolbar && _settings_client.gui.windows_titlebars) || _game_mode == GM_EDITOR) {
|
||||||
// This call hides the window totally with vertical toolbar if you move it slightly off-screen to the left
|
// This call hides the window totally with vertical toolbar if you move it slightly off-screen to the left
|
||||||
PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_MAIN_TOOLBAR, 0), w->left, PHD_DOWN);
|
PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_MAIN_TOOLBAR, 0), w->left, PHD_DOWN);
|
||||||
}
|
}
|
||||||
@@ -2291,6 +2291,20 @@ int GetMainViewBottom()
|
|||||||
return (w == NULL) ? _screen.height : w->top;
|
return (w == NULL) ? _screen.height : w->top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool GetWindowDraggedOffScreen(Window *w)
|
||||||
|
{
|
||||||
|
if (_settings_client.gui.windows_titlebars) return false;
|
||||||
|
Rect edge = { 0, GetMainViewTop(), _screen.width, _screen.height };
|
||||||
|
if (_settings_client.gui.vertical_toolbar && _game_mode != GM_EDITOR) {
|
||||||
|
edge.left += GetMinSizing(NWST_BUTTON, 1);
|
||||||
|
edge.right -= GetMinSizing(NWST_BUTTON, 1);
|
||||||
|
}
|
||||||
|
if (w->left < edge.left && w->left + w->width < edge.right) return true;
|
||||||
|
if (w->left + w->width > edge.right && w->left > edge.left) return true;
|
||||||
|
if (w->top < edge.top && w->top + w->height < edge.bottom) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle dragging/resizing of a window.
|
* Handle dragging/resizing of a window.
|
||||||
* @return State of handling the event.
|
* @return State of handling the event.
|
||||||
@@ -2310,6 +2324,9 @@ static EventState HandleWindowDragging()
|
|||||||
/* Stop the dragging if the left mouse button was released */
|
/* Stop the dragging if the left mouse button was released */
|
||||||
if (!_left_button_down) {
|
if (!_left_button_down) {
|
||||||
w->flags &= ~WF_DRAGGING;
|
w->flags &= ~WF_DRAGGING;
|
||||||
|
if (GetWindowDraggedOffScreen(w)) {
|
||||||
|
delete w;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2399,6 +2416,12 @@ static EventState HandleWindowDragging()
|
|||||||
EnsureVisibleCaption(w, nx, ny);
|
EnsureVisibleCaption(w, nx, ny);
|
||||||
|
|
||||||
w->SetDirty();
|
w->SetDirty();
|
||||||
|
if (GetWindowDraggedOffScreen(w)) {
|
||||||
|
GuiShowTooltips(w, STR_TOOLTIP_CLOSE_WINDOW, 0, NULL, TCC_LEFT_CLICK);
|
||||||
|
} else {
|
||||||
|
GuiShowTooltips(w, STR_NULL, 0, NULL, TCC_LEFT_CLICK); // Hide tooltip
|
||||||
|
}
|
||||||
|
|
||||||
return ES_HANDLED;
|
return ES_HANDLED;
|
||||||
} else if (w->flags & WF_SIZING) {
|
} else if (w->flags & WF_SIZING) {
|
||||||
/* Stop the sizing if the left mouse button was released */
|
/* Stop the sizing if the left mouse button was released */
|
||||||
|
|||||||
10
todo.txt
10
todo.txt
@@ -3,16 +3,14 @@
|
|||||||
|
|
||||||
- Smallmap UI won't fit all FIRS industries.
|
- Smallmap UI won't fit all FIRS industries.
|
||||||
|
|
||||||
- 'New game' dialog is broken again.
|
|
||||||
|
|
||||||
- Put mouse cursor in the middle between touch points when zooming in and out.
|
- Put mouse cursor in the middle between touch points when zooming in and out.
|
||||||
|
|
||||||
- Misclicking station from orders dialog should hide the dialog for 3 times.
|
- Misclicking station from orders dialog should hide the dialog for 3 times.
|
||||||
|
|
||||||
|
- Draggable combo boxes.
|
||||||
|
|
||||||
|
- 'New game' dialog is broken again.
|
||||||
|
|
||||||
- Fix text input - it should use SDL_ANDROID_GetScreenKeyboardTextInputAsync(), and fix double-backspace bug in SDL.
|
- Fix text input - it should use SDL_ANDROID_GetScreenKeyboardTextInputAsync(), and fix double-backspace bug in SDL.
|
||||||
|
|
||||||
- Tooltip window steals touches, move tooltip window back to the top of the mouse cursor.
|
- Tooltip window steals touches, move tooltip window back to the top of the mouse cursor.
|
||||||
|
|
||||||
- Move windows by dragging past window edge, close windows by moving them to toolbar.
|
|
||||||
|
|
||||||
- Draggable combo boxes.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user