mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r558) -Fix: [ 1065247 ] Windows can be placed behind toolbar
While here make clamping against the screen border a bit nicer
This commit is contained in:
parent
22f627c8e1
commit
53116247c3
28
window.c
28
window.c
|
@ -701,6 +701,7 @@ bool HandleWindowDragging()
|
||||||
// Otherwise find the window...
|
// Otherwise find the window...
|
||||||
for (w = _windows; w != _last_window; w++) {
|
for (w = _windows; w != _last_window; w++) {
|
||||||
if (w->flags4 & WF_DRAGGING) {
|
if (w->flags4 & WF_DRAGGING) {
|
||||||
|
const Widget *t = &w->widget[1]; // the title bar ... ugh
|
||||||
const Window *v;
|
const Window *v;
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
@ -796,9 +797,34 @@ bool HandleWindowDragging()
|
||||||
|
|
||||||
// Make sure the window doesn't leave the screen
|
// Make sure the window doesn't leave the screen
|
||||||
// 13 is the height of the title bar
|
// 13 is the height of the title bar
|
||||||
nx = clamp(nx, 13 - w->width, _screen.width - 13);
|
nx = clamp(nx, 13 - t->right, _screen.width - 13 - t->left);
|
||||||
ny = clamp(ny, 0, _screen.height - 13);
|
ny = clamp(ny, 0, _screen.height - 13);
|
||||||
|
|
||||||
|
// Make sure the title bar isn't hidden by behind the main tool bar
|
||||||
|
v = FindWindowById(WC_MAIN_TOOLBAR, 0);
|
||||||
|
if (v != NULL) {
|
||||||
|
int v_bottom = v->top + v->height;
|
||||||
|
int v_right = v->left + v->width;
|
||||||
|
if (ny + t->top >= v->top && ny + t->top < v_bottom) {
|
||||||
|
if (v->left < 13 && nx + t->left < v->left) {
|
||||||
|
ny = v_bottom;
|
||||||
|
} else if (v_right > _screen.width - 13 &&
|
||||||
|
nx + t->right > v_right) {
|
||||||
|
ny = v_bottom;
|
||||||
|
} else {
|
||||||
|
if (nx + t->left > v->left - 13 &&
|
||||||
|
nx + t->right < v_right + 13) {
|
||||||
|
if (w->top >= v_bottom)
|
||||||
|
ny = v_bottom;
|
||||||
|
else if (w->left < nx)
|
||||||
|
nx = v->left - 13 - t->left;
|
||||||
|
else
|
||||||
|
nx = v_right + 13 - t->right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (w->viewport != NULL) {
|
if (w->viewport != NULL) {
|
||||||
w->viewport->left += nx - w->left;
|
w->viewport->left += nx - w->left;
|
||||||
w->viewport->top += ny - w->top;
|
w->viewport->top += ny - w->top;
|
||||||
|
|
Loading…
Reference in New Issue