summaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authortron <tron@openttd.org>2004-11-11 21:20:15 +0000
committertron <tron@openttd.org>2004-11-11 21:20:15 +0000
commit7a97e54559bdbd732fdfd443b84c68a82ffcb758 (patch)
treeab4ec1083c5f13519ac048148b94b1322a7cc56e /window.c
parent95fdf39bca88f7dcdebc134822f615c233714054 (diff)
downloadopenttd-7a97e54559bdbd732fdfd443b84c68a82ffcb758.tar.xz
(svn r541) Make windows even snappier! ^^
Thanks to nzhook, who also proposed the original patch.
Diffstat (limited to 'window.c')
-rw-r--r--window.c68
1 files changed, 35 insertions, 33 deletions
diff --git a/window.c b/window.c
index 13f1bdaad..588e20ee6 100644
--- a/window.c
+++ b/window.c
@@ -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;
+ }
+ }
}
}