changeset 6377:59de97b20651 draft

(svn r9449) -Fix: Truncate the newgrf information text in the newgrf gui if it's too long.
author maedhros <maedhros@openttd.org>
date Sun, 25 Mar 2007 16:09:36 +0000
parents 92c07cc9df2a
children 84b14ef6291a
files src/gfx.cpp src/gfx.h src/newgrf_gui.cpp
diffstat 3 files changed, 22 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -531,7 +531,7 @@
 }
 
 
-uint DrawStringMultiLine(int x, int y, StringID str, int maxw)
+uint DrawStringMultiLine(int x, int y, StringID str, int maxw, int maxh)
 {
 	char buffer[512];
 	uint32 tmp;
@@ -548,6 +548,13 @@
 	mt = GetCharacterHeight((FontSize)GB(tmp, 16, 16));
 	total_height = (num + 1) * mt;
 
+	if (maxh != -1 && total_height > (uint)maxh) {
+		num = maxh / mt - 1;
+		if (num < 1) return 0;
+
+		total_height = (num + 1) * mt;
+	}
+
 	src = buffer;
 
 	for (;;) {
--- a/src/gfx.h
+++ b/src/gfx.h
@@ -231,7 +231,7 @@
 uint32 FormatStringLinebreaks(char *str, int maxw);
 void LoadStringWidthTable();
 void DrawStringMultiCenter(int x, int y, StringID str, int maxw);
-uint DrawStringMultiLine(int x, int y, StringID str, int maxw);
+uint DrawStringMultiLine(int x, int y, StringID str, int maxw, int maxh = -1);
 void DrawDirtyBlocks();
 void SetDirtyBlocks(int left, int top, int right, int bottom);
 void MarkWholeScreenDirty();
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -42,7 +42,7 @@
 }
 
 
-static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint w, bool show_params)
+static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint w, uint bottom, bool show_params)
 {
 	char buff[256];
 
@@ -62,24 +62,24 @@
 		GetString(message, c->error->message, lastof(message));
 
 		SetDParamStr(0, message);
-		y += DrawStringMultiLine(x, y, c->error->severity, w);
+		y += DrawStringMultiLine(x, y, c->error->severity, w, bottom - y);
 	}
 
 	/* Draw filename or not if it is not known (GRF sent over internet) */
 	if (c->filename != NULL) {
 		SetDParamStr(0, c->filename);
-		y += DrawStringMultiLine(x, y, STR_NEWGRF_FILENAME, w);
+		y += DrawStringMultiLine(x, y, STR_NEWGRF_FILENAME, w, bottom - y);
 	}
 
 	/* Prepare and draw GRF ID */
 	snprintf(buff, lengthof(buff), "%08X", BSWAP32(c->grfid));
 	SetDParamStr(0, buff);
-	y += DrawStringMultiLine(x, y, STR_NEWGRF_GRF_ID, w);
+	y += DrawStringMultiLine(x, y, STR_NEWGRF_GRF_ID, w, bottom - y);
 
 	/* Prepare and draw MD5 sum */
 	md5sumToString(buff, lastof(buff), c->md5sum);
 	SetDParamStr(0, buff);
-	y += DrawStringMultiLine(x, y, STR_NEWGRF_MD5SUM, w);
+	y += DrawStringMultiLine(x, y, STR_NEWGRF_MD5SUM, w, bottom - y);
 
 	/* Show GRF parameter list */
 	if (show_params) {
@@ -89,20 +89,20 @@
 		} else {
 			SetDParam(0, STR_01A9_NONE);
 		}
-		y += DrawStringMultiLine(x, y, STR_NEWGRF_PARAMETER, w);
+		y += DrawStringMultiLine(x, y, STR_NEWGRF_PARAMETER, w, bottom - y);
 	}
 
 	/* Show flags */
-	if (c->status == GCS_NOT_FOUND)        y += DrawStringMultiLine(x, y, STR_NEWGRF_NOT_FOUND, w);
-	if (c->status == GCS_DISABLED)         y += DrawStringMultiLine(x, y, STR_NEWGRF_DISABLED, w);
-	if (HASBIT(c->flags, GCF_COMPATIBLE)) y += DrawStringMultiLine(x, y, STR_NEWGRF_COMPATIBLE_LOADED, w);
+	if (c->status == GCS_NOT_FOUND)        y += DrawStringMultiLine(x, y, STR_NEWGRF_NOT_FOUND, w, bottom - y);
+	if (c->status == GCS_DISABLED)         y += DrawStringMultiLine(x, y, STR_NEWGRF_DISABLED, w, bottom - y);
+	if (HASBIT(c->flags, GCF_COMPATIBLE)) y += DrawStringMultiLine(x, y, STR_NEWGRF_COMPATIBLE_LOADED, w, bottom - y);
 
 	/* Draw GRF info if it exists */
 	if (c->info != NULL && !StrEmpty(c->info)) {
 		SetDParamStr(0, c->info);
-		y += DrawStringMultiLine(x, y, STR_02BD, w);
+		y += DrawStringMultiLine(x, y, STR_02BD, w, bottom - y);
 	} else {
-		y += DrawStringMultiLine(x, y, STR_NEWGRF_NO_INFO, w);
+		y += DrawStringMultiLine(x, y, STR_NEWGRF_NO_INFO, w, bottom - y);
 	}
 }
 
@@ -151,7 +151,7 @@
 
 			if (WP(w, newgrf_add_d).sel != NULL) {
 				const Widget *wi = &w->widget[5];
-				ShowNewGRFInfo(WP(w, newgrf_add_d).sel, wi->left + 2, wi->top + 2, wi->right - wi->left - 2, false);
+				ShowNewGRFInfo(WP(w, newgrf_add_d).sel, wi->left + 2, wi->top + 2, wi->right - wi->left - 2, wi->bottom, false);
 			}
 			break;
 		}
@@ -366,7 +366,7 @@
 			if (WP(w, newgrf_d).sel != NULL) {
 				/* Draw NewGRF file info */
 				const Widget *wi = &w->widget[SNGRFS_NEWGRF_INFO];
-				ShowNewGRFInfo(WP(w, newgrf_d).sel, wi->left + 2, wi->top + 2, wi->right - wi->left - 2, WP(w, newgrf_d).show_params);
+				ShowNewGRFInfo(WP(w, newgrf_d).sel, wi->left + 2, wi->top + 2, wi->right - wi->left - 2, wi->bottom, WP(w, newgrf_d).show_params);
 			}
 
 			break;