changeset 4955:54ec41999863 draft

(svn r6954) -Feature: Constrain the drawing of a string inside an editbox to the dimensions of the widget it is in. This allows for typing longer text into an editbox (if maxwidth allows of course) and scroll around properly.
author Darkvater <Darkvater@openttd.org>
date Fri, 27 Oct 2006 10:12:57 +0000
parents e49e661e7761
children 73a3560243e0
files misc_gui.c
diffstat 1 files changed, 27 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/misc_gui.c
+++ b/misc_gui.c
@@ -972,12 +972,35 @@
 
 void DrawEditBox(Window *w, querystr_d *string, int wid)
 {
-	const Widget *wi = w->widget + wid;
+	DrawPixelInfo dpi, *old_dpi;
+	int delta;
+	const Widget *wi = &w->widget[wid];
 	const Textbuf *tb = &string->text;
 
-	GfxFillRect(wi->left+1, wi->top+1, wi->right-1, wi->bottom-1, 215);
-	DoDrawString(tb->buf, wi->left+2, wi->top+1, 8);
-	if (tb->caret) DoDrawString("_", wi->left + 2 + tb->caretxoffs, wi->top + 1, 12);
+	/* Limit the drawing of the string inside the widget boundaries */
+	if (!FillDrawPixelInfo(&dpi,
+	     	wi->left + 4,
+	     	wi->top + 1,
+	     	wi->right - wi->left - 4,
+	     	wi->bottom - wi->top - 1)
+	) return;
+
+	GfxFillRect(wi->left + 1, wi->top + 1, wi->right - 1, wi->bottom - 1, 215);
+
+	old_dpi = _cur_dpi;
+	_cur_dpi = &dpi;
+
+	/* We will take the current widget length as maximum width, with a small
+	 * space reserved at the end for the caret to show */
+	delta = (wi->right - wi->left) - tb->width - 10;
+	if (delta > 0) delta = 0;
+
+	if (tb->caretxoffs + delta < 0) delta = -tb->caretxoffs;
+
+	DoDrawString(tb->buf, delta, 0, 8);
+	if (tb->caret) DoDrawString("_", tb->caretxoffs + delta, 0, 12);
+
+	_cur_dpi = old_dpi;
 }
 
 static void QueryStringWndProc(Window *w, WindowEvent *e)