summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2006-10-27 10:12:57 +0000
committerDarkvater <Darkvater@openttd.org>2006-10-27 10:12:57 +0000
commitf49372feaa5fec7d5beeaf9c6f6935cb2af67d55 (patch)
tree395c5363f315036039b5a66570b44021b5f99ac0
parente8f8bf829b86ed271b78dbc70b4f4a26089aec36 (diff)
downloadopenttd-f49372feaa5fec7d5beeaf9c6f6935cb2af67d55.tar.xz
(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.
-rw-r--r--misc_gui.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/misc_gui.c b/misc_gui.c
index 489ee3383..3b736a334 100644
--- a/misc_gui.c
+++ b/misc_gui.c
@@ -972,12 +972,35 @@ void HandleEditBox(Window *w, querystr_d *string, int wid)
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)