(svn r7700) -Fix (r7182): the caret 'randomly' jumped back and forth when getting a new randomised seed in the Generation World GUI.
authorrubidium
Sun, 31 Dec 2006 14:34:26 +0000
changeset 5698 6697ee90a195
parent 5697 31d15cfe769a
child 5699 02044ce80002
(svn r7700) -Fix (r7182): the caret 'randomly' jumped back and forth when getting a new randomised seed in the Generation World GUI.
misc_gui.c
window.h
--- a/misc_gui.c	Sun Dec 31 14:11:06 2006 +0000
+++ b/misc_gui.c	Sun Dec 31 14:34:26 2006 +0000
@@ -942,12 +942,13 @@
 	WChar c = Utf8Consume(&buf);
 
 	tb->width = 0;
+	tb->length = 0;
 
 	for (; c != '\0' && tb->length < (tb->maxlength - 1); c = Utf8Consume(&buf)) {
 		tb->width += GetCharacterWidth(FS_NORMAL, c);
+		tb->length += Utf8CharLen(c);
 	}
 
-	tb->length = buf - tb->buf - 1;
 	tb->caretpos = tb->length;
 	tb->caretxoffs = tb->width;
 }
--- a/window.h	Sun Dec 31 14:11:06 2006 +0000
+++ b/window.h	Sun Dec 31 14:34:26 2006 +0000
@@ -284,10 +284,10 @@
 
 typedef struct Textbuf {
 	char *buf;                  /* buffer in which text is saved */
-	uint16 maxlength, maxwidth; /* the maximum size of the buffer. Maxwidth specifies screensize in pixels */
-	uint16 length, width;       /* the current size of the string. Width specifies screensize in pixels */
+	uint16 maxlength, maxwidth; /* the maximum size of the buffer. Maxwidth specifies screensize in pixels, maxlength is in bytes */
+	uint16 length, width;       /* the current size of the string. Width specifies screensize in pixels, length is in bytes */
 	bool caret;                 /* is the caret ("_") visible or not */
-	uint16 caretpos;            /* the current position of the caret in the buffer */
+	uint16 caretpos;            /* the current position of the caret in the buffer, in bytes */
 	uint16 caretxoffs;          /* the current position of the caret in pixels */
 } Textbuf;