mirror of https://github.com/OpenTTD/OpenTTD
(svn r12576) -Feature(tte) [FS#337]: highlight vehicle chain when dragging in the group and depot GUI if appropriate
parent
bdd64495cd
commit
b2e4adc2b8
|
@ -441,6 +441,7 @@ static void DepotClick(Window *w, int x, int y)
|
||||||
WP(w, depot_d).sel = v->index;
|
WP(w, depot_d).sel = v->index;
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
SetObjectToPlaceWnd(image, GetVehiclePalette(v), VHM_DRAG, w);
|
SetObjectToPlaceWnd(image, GetVehiclePalette(v), VHM_DRAG, w);
|
||||||
|
_cursor.vehchain = _ctrl_pressed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -957,6 +958,7 @@ static void DepotWndProc(Window *w, WindowEvent *e)
|
||||||
WP(w, depot_d).sel = INVALID_VEHICLE;
|
WP(w, depot_d).sel = INVALID_VEHICLE;
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
}
|
}
|
||||||
|
_cursor.vehchain = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WE_RESIZE:
|
case WE_RESIZE:
|
||||||
|
@ -965,6 +967,13 @@ static void DepotWndProc(Window *w, WindowEvent *e)
|
||||||
w->widget[DEPOT_WIDGET_MATRIX].data = (w->vscroll.cap << 8) + (WP(w, depot_d).type == VEH_TRAIN ? 1 : w->hscroll.cap);
|
w->widget[DEPOT_WIDGET_MATRIX].data = (w->vscroll.cap << 8) + (WP(w, depot_d).type == VEH_TRAIN ? 1 : w->hscroll.cap);
|
||||||
ResizeDepotButtons(w);
|
ResizeDepotButtons(w);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WE_CTRL_CHANGED:
|
||||||
|
if (WP(w, depot_d).sel != INVALID_VEHICLE) {
|
||||||
|
_cursor.vehchain = _ctrl_pressed;
|
||||||
|
w->InvalidateWidget(DEPOT_WIDGET_MATRIX);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,8 @@ struct CursorVars {
|
||||||
bool dirty; ///< the rect occupied by the mouse is dirty (redraw)
|
bool dirty; ///< the rect occupied by the mouse is dirty (redraw)
|
||||||
bool fix_at; ///< mouse is moving, but cursor is not (used for scrolling)
|
bool fix_at; ///< mouse is moving, but cursor is not (used for scrolling)
|
||||||
bool in_window; ///< mouse inside this window, determines drawing logic
|
bool in_window; ///< mouse inside this window, determines drawing logic
|
||||||
|
|
||||||
|
bool vehchain; ///< vehicle chain is dragged
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DrawPixelInfo {
|
struct DrawPixelInfo {
|
||||||
|
|
|
@ -575,6 +575,7 @@ static void GroupWndProc(Window *w, WindowEvent *e)
|
||||||
|
|
||||||
if (v->IsValid()) {
|
if (v->IsValid()) {
|
||||||
SetObjectToPlaceWnd(v->GetImage(DIR_W), GetVehiclePalette(v), VHM_DRAG, w);
|
SetObjectToPlaceWnd(v->GetImage(DIR_W), GetVehiclePalette(v), VHM_DRAG, w);
|
||||||
|
_cursor.vehchain = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
|
@ -687,6 +688,7 @@ static void GroupWndProc(Window *w, WindowEvent *e)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_cursor.vehchain = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,15 +109,29 @@ void DrawRoadVehImage(const Vehicle *v, int x, int y, VehicleID selection, int c
|
||||||
* 0, we draw enough vehicles for 10 standard vehicle lengths. */
|
* 0, we draw enough vehicles for 10 standard vehicle lengths. */
|
||||||
int max_length = (count == 0) ? 80 : count * 8;
|
int max_length = (count == 0) ? 80 : count * 8;
|
||||||
|
|
||||||
for (int dx = 0 ; v != NULL && dx < max_length ; dx += v->u.road.cached_veh_length, v = v->Next()) {
|
/* Width of highlight box */
|
||||||
if (dx + v->u.road.cached_veh_length > 0 && dx <= max_length) {
|
int highlight_w = 0;
|
||||||
|
|
||||||
|
for (int dx = 0; v != NULL && dx < max_length ; v = v->Next()) {
|
||||||
|
int width = v->u.road.cached_veh_length;
|
||||||
|
|
||||||
|
if (dx + width > 0 && dx <= max_length) {
|
||||||
SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
|
SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
|
||||||
DrawSprite(v->GetImage(DIR_W), pal, x + 14 + RoadVehLengthToPixels(dx), y + 6);
|
DrawSprite(v->GetImage(DIR_W), pal, x + 14 + RoadVehLengthToPixels(dx), y + 6);
|
||||||
|
|
||||||
if (v->index == selection) {
|
if (v->index == selection) {
|
||||||
DrawFrameRect(x - 1, y - 1, x + 28, y + 12, 15, FR_BORDERONLY);
|
/* Set the highlight position */
|
||||||
|
highlight_w = RoadVehLengthToPixels(width);
|
||||||
|
} else if (_cursor.vehchain && highlight_w != 0) {
|
||||||
|
highlight_w += RoadVehLengthToPixels(width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dx += width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (highlight_w != 0) {
|
||||||
|
DrawFrameRect(x - 1, y - 1, x - 1 + highlight_w, y + 12, 15, FR_BORDERONLY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,8 @@ void DrawTrainImage(const Vehicle *v, int x, int y, VehicleID selection, int cou
|
||||||
/* Set the highlight position */
|
/* Set the highlight position */
|
||||||
highlight_l = WagonLengthToPixels(dx) + 1;
|
highlight_l = WagonLengthToPixels(dx) + 1;
|
||||||
highlight_r = WagonLengthToPixels(dx + width) + 1;
|
highlight_r = WagonLengthToPixels(dx + width) + 1;
|
||||||
|
} else if (_cursor.vehchain && highlight_r != 0) {
|
||||||
|
highlight_r += WagonLengthToPixels(width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue