Changeset - r8828:13b26c4bf7f4
[Not reviewed]
master
0 5 0
smatz - 17 years ago 2008-04-05 11:27:50
smatz@openttd.org
(svn r12576) -Feature(tte) [FS#337]: highlight vehicle chain when dragging in the group and depot GUI if appropriate
5 files changed with 32 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/depot_gui.cpp
Show inline comments
 
@@ -441,6 +441,7 @@ static void DepotClick(Window *w, int x,
 
				WP(w, depot_d).sel = v->index;
 
				SetWindowDirty(w);
 
				SetObjectToPlaceWnd(image, GetVehiclePalette(v), VHM_DRAG, w);
 
				_cursor.vehchain = _ctrl_pressed;
 
			}
 
			}
 
			break;
 
@@ -957,6 +958,7 @@ static void DepotWndProc(Window *w, Wind
 
					WP(w, depot_d).sel = INVALID_VEHICLE;
 
					SetWindowDirty(w);
 
			}
 
			_cursor.vehchain = false;
 
			break;
 

	
 
		case WE_RESIZE:
 
@@ -965,6 +967,13 @@ static void DepotWndProc(Window *w, Wind
 
			w->widget[DEPOT_WIDGET_MATRIX].data = (w->vscroll.cap << 8) + (WP(w, depot_d).type == VEH_TRAIN ? 1 : w->hscroll.cap);
 
			ResizeDepotButtons(w);
 
			break;
 

	
 
		case WE_CTRL_CHANGED:
 
			if (WP(w, depot_d).sel != INVALID_VEHICLE) {
 
				_cursor.vehchain = _ctrl_pressed;
 
				w->InvalidateWidget(DEPOT_WIDGET_MATRIX);
 
			}
 
			break;
 
	}
 
}
 

	
src/gfx_type.h
Show inline comments
 
@@ -130,6 +130,8 @@ struct CursorVars {
 
	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 in_window;  ///< mouse inside this window, determines drawing logic
 

	
 
	bool vehchain;   ///< vehicle chain is dragged
 
};
 

	
 
struct DrawPixelInfo {
src/group_gui.cpp
Show inline comments
 
@@ -575,6 +575,7 @@ static void GroupWndProc(Window *w, Wind
 

	
 
					if (v->IsValid()) {
 
						SetObjectToPlaceWnd(v->GetImage(DIR_W), GetVehiclePalette(v), VHM_DRAG, w);
 
						_cursor.vehchain = true;
 
					}
 

	
 
					SetWindowDirty(w);
 
@@ -687,6 +688,7 @@ static void GroupWndProc(Window *w, Wind
 
					break;
 
				}
 
			}
 
			_cursor.vehchain = false;
 
			break;
 
		}
 

	
src/roadveh_gui.cpp
Show inline comments
 
@@ -109,15 +109,29 @@ void DrawRoadVehImage(const Vehicle *v, 
 
	 * 0, we draw enough vehicles for 10 standard vehicle lengths. */
 
	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()) {
 
		if (dx + v->u.road.cached_veh_length > 0 && dx <= max_length) {
 
	/* Width of highlight box */
 
	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);
 
			DrawSprite(v->GetImage(DIR_W), pal, x + 14 + RoadVehLengthToPixels(dx), y + 6);
 

	
 
			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);
 
	}
 
}
 

	
src/train_gui.cpp
Show inline comments
 
@@ -98,6 +98,8 @@ void DrawTrainImage(const Vehicle *v, in
 
					/* Set the highlight position */
 
					highlight_l = WagonLengthToPixels(dx) + 1;
 
					highlight_r = WagonLengthToPixels(dx + width) + 1;
 
				} else if (_cursor.vehchain && highlight_r != 0) {
 
					highlight_r += WagonLengthToPixels(width);
 
				}
 
			}
 
		}
0 comments (0 inline, 0 general)