diff options
author | tron <tron@openttd.org> | 2004-11-11 21:20:15 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2004-11-11 21:20:15 +0000 |
commit | 7a97e54559bdbd732fdfd443b84c68a82ffcb758 (patch) | |
tree | ab4ec1083c5f13519ac048148b94b1322a7cc56e | |
parent | 95fdf39bca88f7dcdebc134822f615c233714054 (diff) | |
download | openttd-7a97e54559bdbd732fdfd443b84c68a82ffcb758.tar.xz |
(svn r541) Make windows even snappier! ^^
Thanks to nzhook, who also proposed the original patch.
-rw-r--r-- | window.c | 68 |
1 files changed, 35 insertions, 33 deletions
@@ -721,40 +721,10 @@ bool HandleWindowDragging() ny = y; if (_patches.window_snap_radius != 0) { - uint hsnap = _patches.window_snap_radius; - uint vsnap = _patches.window_snap_radius; - uint delta; - - // Snap at screen borders - // Left screen border - delta = abs(x); - if (delta <= hsnap) { - nx = 0; - hsnap = delta; - } - - // Right screen border - delta = abs(_screen.width - x - w->width); - if (delta <= hsnap) { - nx = _screen.width - w->width; - hsnap = delta; - } - - // Top of screen - delta = abs(y); - if (delta <= vsnap) { - ny = 0; - vsnap = delta; - } - - // Bottom of screen - delta = abs(_screen.height - y - w->height); - if (delta <= vsnap) { - ny = _screen.height - w->height; - vsnap = delta; - } + int hsnap = _patches.window_snap_radius; + int vsnap = _patches.window_snap_radius; + int delta; - // Snap at other windows for (v = _windows; v != _last_window; ++v) { if (v == w) continue; // Don't snap at yourself @@ -774,6 +744,22 @@ bool HandleWindowDragging() } } + if (w->top + w->height >= v->top && w->top <= v->top + v->height) { + // Your left border <-> other left border + delta = abs(v->left - x); + if (delta <= hsnap) { + nx = v->left; + hsnap = delta; + } + + // Your right border <-> other right border + delta = abs(v->left + v->width - x - w->width); + if (delta <= hsnap) { + nx = v->left + v->width - w->width; + hsnap = delta; + } + } + if (x + w->width > v->left && x < v->left + v->width) { // Your top border <-> other bottom border delta = abs(v->top + v->height - y); @@ -789,6 +775,22 @@ bool HandleWindowDragging() vsnap = delta; } } + + if (w->left + w->width >= v->left && w->left <= v->left + v->width) { + // Your top border <-> other top border + delta = abs(v->top - y); + if (delta <= vsnap) { + ny = v->top; + vsnap = delta; + } + + // Your bottom border <-> other bottom border + delta = abs(v->top + v->height - y - w->height); + if (delta <= vsnap) { + ny = v->top + v->height - w->height; + vsnap = delta; + } + } } } |