changeset 16830:36b4cb0c0efa draft

(svn r21564) -Fix: Avoid drawing road vehicles outside of their given space.
author terkhen <terkhen@openttd.org>
date Tue, 21 Dec 2010 13:56:07 +0000
parents d920c1a24af8
children 4797f7d65577
files src/roadveh_gui.cpp
diffstat 1 files changed, 16 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/roadveh_gui.cpp
+++ b/src/roadveh_gui.cpp
@@ -135,22 +135,30 @@
 	Direction dir = rtl ? DIR_E : DIR_W;
 	const RoadVehicle *u = RoadVehicle::From(v);
 
+	DrawPixelInfo tmp_dpi, *old_dpi;
 	int max_width = right - left + 1;
-	int spent_width = 0;
-	int pos = rtl ? right : left;
+
+	if (!FillDrawPixelInfo(&tmp_dpi, left, y, max_width, 14)) return;
 
-	for (; u != NULL && spent_width < max_width; u = u->Next()) {
+	old_dpi = _cur_dpi;
+	_cur_dpi = &tmp_dpi;
+
+	int px = rtl ? max_width : 0;
+	for (; u != NULL && (rtl ? px > 0 : px < max_width); u = u->Next()) {
 		Point offset;
 		int width = u->GetDisplayImageWidth(&offset);
 
-		PaletteID pal = (u->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(u);
-		DrawSprite(u->GetImage(dir), pal, pos + (rtl ? -offset.x : offset.x), y + 6 + offset.y);
+		if (rtl ? px + width > 0 : px - width < max_width) {
+			PaletteID pal = (u->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(u);
+			DrawSprite(u->GetImage(dir), pal, px + (rtl ? -offset.x : offset.x), 6 + offset.y);
+		}
 
-		pos += rtl ? -width : width;
-		spent_width += width;
+		px += rtl ? -width : width;
 	}
 
 	if (v->index == selection) {
-		DrawFrameRect((rtl ? pos : left) - 1, y - 1, (rtl ? pos : right) - 1, y + 12, COLOUR_WHITE, FR_BORDERONLY);
+		DrawFrameRect((rtl ? px : left) - 1, y - 1, (rtl ? px : right) - 1, y + 12, COLOUR_WHITE, FR_BORDERONLY);
 	}
+
+	_cur_dpi = old_dpi;
 }