(svn r13759) -Fix [FS#2147]: selecting non-full length vehicles in the depot gui would place the "mouse pointer" out of the center of the vehicle making it hard to "aim".

This commit is contained in:
rubidium 2008-07-20 19:21:18 +00:00
parent 690859bf57
commit fec49bcc83
3 changed files with 18 additions and 2 deletions

View File

@ -513,6 +513,20 @@ struct DepotWindow : Window {
this->sel = v->index;
this->SetDirty();
SetObjectToPlaceWnd(image, GetVehiclePalette(v), VHM_DRAG, this);
switch (v->type) {
case VEH_TRAIN:
_cursor.short_vehicle_offset = 16 - v->u.rail.cached_veh_length * 2;
break;
case VEH_ROAD:
_cursor.short_vehicle_offset = 16 - v->u.road.cached_veh_length * 2;
break;
default:
_cursor.short_vehicle_offset = 0;
break;
}
_cursor.vehchain = _ctrl_pressed;
}
} break;

View File

@ -1008,7 +1008,7 @@ void DrawMouseCursor()
}
w = _cursor.size.x;
x = _cursor.pos.x + _cursor.offs.x;
x = _cursor.pos.x + _cursor.offs.x + _cursor.short_vehicle_offset;
if (x < 0) {
w += x;
x = 0;
@ -1036,7 +1036,7 @@ void DrawMouseCursor()
/* Draw cursor on screen */
_cur_dpi = &_screen;
DrawSprite(_cursor.sprite, _cursor.pal, _cursor.pos.x, _cursor.pos.y);
DrawSprite(_cursor.sprite, _cursor.pal, _cursor.pos.x + _cursor.short_vehicle_offset, _cursor.pos.y);
_video_driver->MakeDirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
@ -1287,6 +1287,7 @@ static void SetCursorSprite(SpriteID cursor, SpriteID pal)
cv->offs.y = p->y_offs;
cv->dirty = true;
cv->short_vehicle_offset = 0;
}
static void SwitchAnimatedCursor()

View File

@ -113,6 +113,7 @@ struct AnimCursor {
struct CursorVars {
Point pos, size, offs, delta; ///< position, size, offset from top-left, and movement
Point draw_pos, draw_size; ///< position and size bounding-box for drawing
int short_vehicle_offset; ///< offset of the X for short vehicles
SpriteID sprite; ///< current image of cursor
SpriteID pal;