Changeset - r5268:f35d2dfd8076
[Not reviewed]
master
0 2 0
Darkvater - 18 years ago 2006-12-07 00:47:35
darkvater@openttd.org
(svn r7409) -Codechange: Make the ResizeWindow function also available outside of window.c. This makes
it possible to programmatically resize windows specifying a delta x,y.
2 files changed with 52 insertions and 41 deletions:
0 comments (0 inline, 0 general)
window.c
Show inline comments
 
@@ -1026,6 +1026,55 @@ static bool HandleMouseOver(void)
 
	return true;
 
}
 

	
 
/** Update all the widgets of a window based on their resize flags
 
 * Both the areas of the old window and the new sized window are set dirty
 
 * ensuring proper redrawal.
 
 * @param w Window to resize
 
 * @param x delta x-size of changed window (positive if larger, etc.(
 
 * @param y delta y-size of changed window */
 
void ResizeWindow(Window *w, int x, int y)
 
{
 
	Widget *wi;
 
	bool resize_height = false;
 
	bool resize_width = false;
 

	
 
	if (x == 0 && y == 0) return;
 

	
 
	SetWindowDirty(w);
 
	for (wi = w->widget; wi->type != WWT_LAST; wi++) {
 
		/* Isolate the resizing flags */
 
		byte rsizeflag = GB(wi->display_flags, 0, 4);
 

	
 
		if (rsizeflag == RESIZE_NONE) continue;
 

	
 
		/* Resize the widget based on its resize-flag */
 
		if (rsizeflag & RESIZE_LEFT) {
 
			wi->left += x;
 
			resize_width = true;
 
		}
 

	
 
		if (rsizeflag & RESIZE_RIGHT) {
 
			wi->right += x;
 
			resize_width = true;
 
		}
 

	
 
		if (rsizeflag & RESIZE_TOP) {
 
			wi->top += y;
 
			resize_height = true;
 
		}
 

	
 
		if (rsizeflag & RESIZE_BOTTOM) {
 
			wi->bottom += y;
 
			resize_height = true;
 
		}
 
	}
 

	
 
	/* We resized at least 1 widget, so let's resize the window totally */
 
	if (resize_width)  w->width  += x;
 
	if (resize_height) w->height += y;
 

	
 
	SetWindowDirty(w);
 
}
 

	
 
static bool _dragging_window;
 

	
 
@@ -1211,45 +1260,8 @@ static bool HandleWindowDragging(void)
 
			_drag_delta.x += x;
 
			_drag_delta.y += y;
 

	
 
			SetWindowDirty(w);
 

	
 
			/* Scroll through all the windows and update the widgets if needed */
 
			{
 
				Widget *wi = w->widget;
 
				bool resize_height = false;
 
				bool resize_width = false;
 

	
 
				while (wi->type != WWT_LAST) {
 
					/* Isolate the resizing flags */
 
					byte rsizeflag = GB(wi->display_flags, 0, 4);
 

	
 
					if (rsizeflag != RESIZE_NONE) {
 
						/* Resize this widget */
 
						if (rsizeflag & RESIZE_LEFT) {
 
							wi->left += x;
 
							resize_width = true;
 
						}
 
						if (rsizeflag & RESIZE_RIGHT) {
 
							wi->right += x;
 
							resize_width = true;
 
						}
 

	
 
						if (rsizeflag & RESIZE_TOP) {
 
							wi->top += y;
 
							resize_height = true;
 
						}
 
						if (rsizeflag & RESIZE_BOTTOM) {
 
							wi->bottom += y;
 
							resize_height = true;
 
						}
 
					}
 
					wi++;
 
				}
 

	
 
				/* We resized at least 1 widget, so let's rezise the window totally */
 
				if (resize_width)  w->width  = x + w->width;
 
				if (resize_height) w->height = y + w->height;
 
			}
 
			/* ResizeWindow sets both pre- and after-size to dirty for redrawal */
 
			ResizeWindow(w, x, y);
 

	
 
			e.event = WE_RESIZE;
 
			e.we.sizing.size.x = x + w->width;
 
@@ -1257,8 +1269,6 @@ static bool HandleWindowDragging(void)
 
			e.we.sizing.diff.x = x;
 
			e.we.sizing.diff.y = y;
 
			w->wndproc(w, &e);
 

	
 
			SetWindowDirty(w);
 
			return false;
 
		}
 
	}
window.h
Show inline comments
 
@@ -630,6 +630,7 @@ Window *AllocateWindowDesc(const WindowD
 
Window *AllocateWindowDescFront(const WindowDesc *desc, int window_number);
 

	
 
void DrawWindowViewport(const Window *w);
 
void ResizeWindow(Window *w, int x, int y);
 

	
 
/**
 
 * Sets the enabled/disabled status of a widget.
0 comments (0 inline, 0 general)