summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorterkhen <terkhen@openttd.org>2010-12-21 13:56:07 +0000
committerterkhen <terkhen@openttd.org>2010-12-21 13:56:07 +0000
commit5a124feb6dc6a68d56200ffb9c2b497b1970176a (patch)
treeab544cd4d099b499767fb4fa3e9a9ebcad309056 /src
parent759a596e0b390752bf59b8b0c4a757635de89f36 (diff)
downloadopenttd-5a124feb6dc6a68d56200ffb9c2b497b1970176a.tar.xz
(svn r21564) -Fix: Avoid drawing road vehicles outside of their given space.
Diffstat (limited to 'src')
-rw-r--r--src/roadveh_gui.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/roadveh_gui.cpp b/src/roadveh_gui.cpp
index d25f43655..cc44c4139 100644
--- a/src/roadveh_gui.cpp
+++ b/src/roadveh_gui.cpp
@@ -135,22 +135,30 @@ void DrawRoadVehImage(const Vehicle *v, int left, int right, int y, VehicleID se
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;
- for (; u != NULL && spent_width < max_width; u = u->Next()) {
+ if (!FillDrawPixelInfo(&tmp_dpi, left, y, max_width, 14)) return;
+
+ 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;
}