changeset 2113:8f88dc2df50e draft

(svn r2623) - CodeChange: rework DrawStringCenteredTruncated() a bit. Instead of giving center + width you give the coordinates of the bounding box (left, right) it has to fit in (ludde) - CodeChange: changed (back) maximum pixel length of truncated strings to a signed integer.
author Darkvater <Darkvater@openttd.org>
date Sun, 17 Jul 2005 19:23:18 +0000
parents 12ac37f857c8
children 405aab84030e
files aircraft_gui.c gfx.c gfx.h roadveh_gui.c ship_gui.c train_gui.c
diffstat 6 files changed, 25 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/aircraft_gui.c
+++ b/aircraft_gui.c
@@ -556,10 +556,8 @@
 		}
 
 		/* draw the flag plus orders */
-		{	int w_width = w->widget[5].right - w->widget[5].left;
-			DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
-			DrawStringCenteredTruncated(w_width / 2 + 6, w->widget[5].top + 1, str, 0, w_width - 8);
-		}
+		DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
+		DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
 		DrawWindowViewport(w);
 	} break;
 
--- a/gfx.c
+++ b/gfx.c
@@ -261,9 +261,9 @@
  * @param *dest string that is checked and possibly truncated
  * @param maxw maximum width in pixels of the string
  * @return new width of (truncated) string */
-static uint TruncateString(char *str, uint maxw)
+static int TruncateString(char *str, int maxw)
 {
-	uint w = 0;
+	int w = 0;
 	int base = _stringwidth_base;
 	int ddd, ddd_w;
 
@@ -273,7 +273,7 @@
 	base = _stringwidth_base;
 	ddd_w = ddd = GetCharacterWidth(base + '.') * 3;
 
-	for (c = *str, ddd_pos = str; *str != '\0'; c = (*++str)) {
+	for (ddd_pos = str; (c = *str++) != '\0'; ) {
 		if (c >= ASCII_LETTERSTART) {
 			w += GetCharacterWidth(base + c);
 
@@ -298,14 +298,14 @@
 		// Remember the last position where three dots fit.
 		if (w + ddd < maxw) {
 			ddd_w = w + ddd;
-			ddd_pos = str + 1;
+			ddd_pos = str;
 		}
 	}
 
 	return w;
 }
 
-static inline uint TruncateStringID(StringID src, char *dest, uint maxw)
+static inline int TruncateStringID(StringID src, char *dest, int maxw)
 {
 	GetString(dest, src);
 	return TruncateString(dest, maxw);
@@ -358,11 +358,11 @@
 	return w;
 }
 
-int DrawStringCenteredTruncated(int x, int y, StringID str, uint16 color, uint maxw)
+int DrawStringCenteredTruncated(int xl, int xr, int y, StringID str, uint16 color)
 {
 	char buffer[512];
-	uint w = TruncateStringID(str, buffer, maxw);
-	return DoDrawString(buffer, x - (w / 2), y, color);
+	int w = TruncateStringID(str, buffer, xr - xl);
+	return DoDrawString(buffer, (xl + xr - w) / 2, y, color);
 }
 
 void DrawStringCenterUnderline(int x, int y, StringID str, uint16 color)
@@ -371,10 +371,10 @@
 	GfxFillRect(x - (w >> 1), y + 10, x - (w >> 1) + w, y + 10, _string_colorremap[1]);
 }
 
-void DrawStringCenterUnderlineTruncated(int x, int y, StringID str, uint16 color, uint maxw)
+void DrawStringCenterUnderlineTruncated(int xl, int xr, int y, StringID str, uint16 color)
 {
-	int w = DrawStringCenteredTruncated(x, y, str, color, maxw);
-	GfxFillRect(x - (w >> 1), y + 10, x - (w >> 1) + w, y + 10, _string_colorremap[1]);
+	int w = DrawStringCenteredTruncated(xl, xr, y, str, color);
+	GfxFillRect((xl + xr - w) / 2, y + 10, (xl + xr + w) / 2, y + 10, _string_colorremap[1]);
 }
 
 static uint32 FormatStringLinebreaks(char *str, int maxw)
--- a/gfx.h
+++ b/gfx.h
@@ -37,7 +37,7 @@
 void GfxScroll(int left, int top, int width, int height, int xo, int yo);
 
 int DrawStringCentered(int x, int y, StringID str, uint16 color);
-int DrawStringCenteredTruncated(int x, int y, StringID str, uint16 color, uint maxw);
+int DrawStringCenteredTruncated(int xl, int xr, int y, StringID str, uint16 color);
 
 int DrawString(int x, int y, StringID str, uint16 color);
 int DrawStringTruncated(int x, int y, StringID str, uint16 color, uint maxw);
@@ -46,7 +46,7 @@
 int DoDrawStringTruncated(const char *str, int x, int y, uint16 color, uint maxw);
 
 void DrawStringCenterUnderline(int x, int y, StringID str, uint16 color);
-void DrawStringCenterUnderlineTruncated(int x, int y, StringID str, uint16 color, uint maxw);
+void DrawStringCenterUnderlineTruncated(int xl, int xr, int y, StringID str, uint16 color);
 
 void DrawStringRightAligned(int x, int y, StringID str, uint16 color);
 void DrawStringRightAlignedTruncated(int x, int y, StringID str, uint16 color, uint maxw);
--- a/roadveh_gui.c
+++ b/roadveh_gui.c
@@ -277,10 +277,8 @@
 		}
 
 		/* draw the flag plus orders */
-		{	int w_width = w->widget[5].right - w->widget[5].left;
-			DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
-			DrawStringCenteredTruncated(w_width / 2 + 6, w->widget[5].top + 1, str, 0, w_width - 8);
-		}
+		DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
+		DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
 		DrawWindowViewport(w);
 	} break;
 
--- a/ship_gui.c
+++ b/ship_gui.c
@@ -516,10 +516,8 @@
 		}
 
 		/* draw the flag plus orders */
-		{	int w_width = w->widget[5].right - w->widget[5].left;
-			DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
-			DrawStringCenteredTruncated(w_width / 2 + 6, w->widget[5].top + 1, str, 0, w_width - 8);
-		}
+		DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
+		DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
 		DrawWindowViewport(w);
 	} break;
 
--- a/train_gui.c
+++ b/train_gui.c
@@ -417,9 +417,9 @@
 			do {
 				i += u->u.rail.cached_veh_length + 1;
 			} while ( (u=u->next) != NULL);			//Determine length of train
-			SetDParam(0, (i+8) / 9);			//Set the counter
-			i = (w->hscroll.cap * 29) + (x + 26);		//Calculate position of text according to window size
-			DrawStringCentered(i, y+5, STR_TINY_BLACK, 0);	//Draw the counter
+
+			SetDParam(0, (i + 8) / 9);			//Set the counter
+			DrawStringRightAligned(w->widget[6].right - 1, y + 4, STR_TINY_BLACK, 0);	//Draw the counter
 
 			/* Draw the pretty flag */
 			DrawSprite(v->vehstatus&VS_STOPPED ? 0xC12 : 0xC13, x+15, y);
@@ -441,8 +441,7 @@
 			u = v;
 			do i++; while ( (u=u->next) != NULL);		//Determine length of train
 			SetDParam(0, i);				//Set the counter
-			i = (w->hscroll.cap * 29) + (x + 26);		//Calculate position of text according to window size
-			DrawStringCentered(i, y+5, STR_TINY_BLACK, 0);	//Draw the counter
+			DrawStringRightAligned(w->widget[6].right - 1, y + 4, STR_TINY_BLACK, 0);	//Draw the counter
 			y += 14;
 		}
 	}
@@ -883,10 +882,8 @@
 		}
 
 		/* draw the flag plus orders */
-		{	int w_width = w->widget[5].right - w->widget[5].left;
-			DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
-			DrawStringCenteredTruncated(w_width / 2 + 6, w->widget[5].top + 1, str, 0, w_width - 8);
-		}
+		DrawSprite(v->vehstatus & VS_STOPPED ? 0xC12 : 0xC13, 2, w->widget[5].top + 1);
+		DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
 		DrawWindowViewport(w);
 	}	break;