(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
authorrubidium
Tue, 07 Aug 2007 15:20:31 +0000
changeset 7422 fb7f6dc87b55
parent 7421 deb7fa2bdebe
child 7423 4a3b0523330b
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
-Fix [FS#1036]: do not use green for currencies as it is practically unreadable on CRT monitors.
src/gfx.cpp
src/group_gui.cpp
src/main_gui.cpp
src/strings.cpp
src/table/control_codes.h
--- a/src/gfx.cpp	Mon Aug 06 15:00:32 2007 +0000
+++ b/src/gfx.cpp	Tue Aug 07 15:20:31 2007 +0000
@@ -495,10 +495,10 @@
 	DrawPixelInfo *dpi = _cur_dpi;
 	FontSize size = _cur_fontsize;
 	WChar c;
-	byte color;
 	int xo = x, yo = y;
 
-	color = real_color & 0xFF;
+	byte color = real_color & 0xFF;
+	byte previous_color = color;
 
 	if (color != 0xFE) {
 		if (x >= dpi->left + dpi->width ||
@@ -548,8 +548,12 @@
 			y += GetCharacterHeight(size);
 			goto check_bounds;
 		} else if (c >= SCC_BLUE && c <= SCC_BLACK) { // change color?
+			previous_color = color;
 			color = (byte)(c - SCC_BLUE);
 			goto switch_color;
+		} else if (c == SCC_PREVIOUS_COLOUR) { // revert to the previous color
+			Swap(color, previous_color);
+			goto switch_color;
 		} else if (c == SCC_SETX) { // {SETX}
 			x = xo + (byte)*string++;
 		} else if (c == SCC_SETXY) {// {SETXY}
--- a/src/group_gui.cpp	Mon Aug 06 15:00:32 2007 +0000
+++ b/src/group_gui.cpp	Tue Aug 07 15:20:31 2007 +0000
@@ -451,36 +451,20 @@
 			max = min(w->vscroll2.pos + w->vscroll2.cap, gv->l.list_length);
 			for (i = w->vscroll2.pos ; i < max ; ++i) {
 				const Vehicle* v = gv->sort_list[i];
-				StringID str;
 
 				assert(v->type == gv->vehicle_type && v->owner == owner);
 
 				DrawVehicleImage(v, x + 19, y2 + 6, w->hscroll.cap, 0, gv->vehicle_sel);
 				DrawVehicleProfitButton(v, x, y2 + 13);
 
-				if (IsVehicleInDepot(v)) {
-					str = STR_021F;
-				} else {
-					str = v->age > v->max_age - 366 ? STR_00E3 : STR_00E2;
-				}
 				SetDParam(0, v->unitnumber);
-				DrawString(x, y2 + 2, str, 0);
+				DrawString(x, y2 + 2, IsVehicleInDepot(v) ? STR_021F : (v->age > v->max_age - 366 ? STR_00E3 : STR_00E2), 0);
 
 				if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG2) DrawSmallOrderList(v, x + 138, y2);
 
-				if (v->profit_this_year < 0) {
-					str = v->profit_last_year < 0 ?
-							STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :
-							STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR;
-				} else {
-					str = v->profit_last_year < 0 ?
-							STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :
-							STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR;
-				}
-
 				SetDParam(0, v->profit_this_year);
 				SetDParam(1, v->profit_last_year);
-				DrawString(x + 19, y2 + w->resize.step_height - 8, str, 0);
+				DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
 
 				if (IsValidGroupID(v->group_id)) {
 					SetDParam(0, v->group_id);
--- a/src/main_gui.cpp	Mon Aug 06 15:00:32 2007 +0000
+++ b/src/main_gui.cpp	Tue Aug 07 15:20:31 2007 +0000
@@ -2068,7 +2068,7 @@
 		if (p != NULL) {
 			/* Draw player money */
 			SetDParam(0, p->player_money);
-			DrawStringCentered(w->widget[2].left + 70, 1, p->player_money >= 0 ? STR_0004 : STR_0005, 0);
+			DrawStringCentered(w->widget[2].left + 70, 1, STR_0004, 0);
 		}
 
 		/* Draw status bar */
--- a/src/strings.cpp	Mon Aug 06 15:00:32 2007 +0000
+++ b/src/strings.cpp	Tue Aug 07 15:20:31 2007 +0000
@@ -343,6 +343,8 @@
 
 	/* convert from negative */
 	if (number < 0) {
+		if (buff + Utf8CharLen(SCC_RED) > last) return buff;
+		buff += Utf8Encode(buff, SCC_RED);
 		buff = strecpy(buff, "-", last);
 		number = -number;
 	}
@@ -383,6 +385,12 @@
 	 * The only remaining value is 1 (prefix), so everything that is not 0 */
 	if (spec->symbol_pos != 0) buff = strecpy(buff, spec->suffix, last);
 
+	if (cs.GetCost() < 0) {
+		if (buff + Utf8CharLen(SCC_PREVIOUS_COLOUR) > last) return buff;
+		buff += Utf8Encode(buff, SCC_PREVIOUS_COLOUR);
+		*buff = '\0';
+	}
+
 	return buff;
 }
 
--- a/src/table/control_codes.h	Mon Aug 06 15:00:32 2007 +0000
+++ b/src/table/control_codes.h	Tue Aug 07 15:20:31 2007 +0000
@@ -88,6 +88,7 @@
 	SCC_GRAY,
 	SCC_DKBLUE,
 	SCC_BLACK,
+	SCC_PREVIOUS_COLOUR,
 
 	/* Special printable symbols.
 	 * These are mapped to the original glyphs */