From 98a98ab15eacae3500596a5ca43f3273d93d1140 Mon Sep 17 00:00:00 2001 From: Darkvater Date: Fri, 27 Oct 2006 10:12:57 +0000 Subject: [PATCH] (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. --- misc_gui.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/misc_gui.c b/misc_gui.c index 489ee33838..3b736a334f 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)