Changeset - r353:82428348c214
[Not reviewed]
master
0 1 0
tron - 20 years ago 2004-11-11 21:20:15
tron@openttd.org
(svn r541) Make windows even snappier! ^^
Thanks to nzhook, who also proposed the original patch.
1 file changed with 35 insertions and 33 deletions:
window.c
35
33
0 comments (0 inline, 0 general)
window.c
Show inline comments
 
@@ -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;
 
				}
 
				int hsnap = _patches.window_snap_radius;
 
				int vsnap = _patches.window_snap_radius;
 
				int 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;
 
				}
 

	
 
				// 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;
 
						}
 
					}
 
				}
 
			}
 

	
0 comments (0 inline, 0 general)