From 8dc76b0044c947a926cbb594f77c0a2b83f25304 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 3 Mar 2016 19:14:10 +0000 Subject: [PATCH 1/3] Be more strict checking for space in program pool in mgmt actions. --- src/tracerestrict.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/tracerestrict.cpp b/src/tracerestrict.cpp index 763dd5edc2..8913a7af6f 100644 --- a/src/tracerestrict.cpp +++ b/src/tracerestrict.cpp @@ -1003,6 +1003,10 @@ CommandCost CmdProgramSignalTraceRestrictProgMgmt(TileIndex tile, DoCommandFlag } } + if (type != TRDCT_PROG_RESET && !TraceRestrictProgram::CanAllocateItem()) { + return CMD_ERROR; + } + if (!(flags & DC_EXEC)) { return CommandCost(); } From 4d94470d08173cfda819a288241dc5d3aeafe0b2 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 8 Mar 2016 19:20:55 +0000 Subject: [PATCH 2/3] Update all tracerestrict windows when a restricted signal is removed. This fixes share counts in any open windows sharing the same program not being updated. --- src/tracerestrict.cpp | 9 +++++++-- src/tracerestrict.h | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/tracerestrict.cpp b/src/tracerestrict.cpp index 8913a7af6f..1697404551 100644 --- a/src/tracerestrict.cpp +++ b/src/tracerestrict.cpp @@ -647,8 +647,9 @@ void TraceRestrictCreateProgramMapping(TraceRestrictRefId ref, TraceRestrictProg /** * Remove a program mapping + * @return true if a mapping was actually removed */ -void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref) +bool TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref) { TraceRestrictMapping::iterator iter = _tracerestrictprogram_mapping.find(ref); if (iter != _tracerestrictprogram_mapping.end()) { @@ -678,6 +679,9 @@ void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref) } } } + return true; + } else { + return false; } } @@ -717,8 +721,9 @@ TraceRestrictProgram *GetTraceRestrictProgram(TraceRestrictRefId ref, bool creat void TraceRestrictNotifySignalRemoval(TileIndex tile, Track track) { TraceRestrictRefId ref = MakeTraceRestrictRefId(tile, track); - TraceRestrictRemoveProgramMapping(ref); + bool removed = TraceRestrictRemoveProgramMapping(ref); DeleteWindowById(WC_TRACE_RESTRICT, ref); + if (removed) InvalidateWindowClassesData(WC_TRACE_RESTRICT); } /** diff --git a/src/tracerestrict.h b/src/tracerestrict.h index c62f21fe33..2409025408 100644 --- a/src/tracerestrict.h +++ b/src/tracerestrict.h @@ -513,7 +513,7 @@ static inline Track GetTraceRestrictRefIdTrack(TraceRestrictRefId ref) } void TraceRestrictCreateProgramMapping(TraceRestrictRefId ref, TraceRestrictProgram *prog); -void TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref); +bool TraceRestrictRemoveProgramMapping(TraceRestrictRefId ref); TraceRestrictProgram *GetTraceRestrictProgram(TraceRestrictRefId ref, bool create_new); From cf638e836a8bf93d9aaefc1f467ccb4740a948e3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 8 Mar 2016 19:21:15 +0000 Subject: [PATCH 3/3] TBTR: Clip drawing of template vehicles. This fixes long templates running off the side of the window and/or obscuring the train length text. --- src/tbtr_template_gui_main.cpp | 2 +- src/tbtr_template_vehicle_func.cpp | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/tbtr_template_gui_main.cpp b/src/tbtr_template_gui_main.cpp index 2873372b63..3840baa103 100644 --- a/src/tbtr_template_gui_main.cpp +++ b/src/tbtr_template_gui_main.cpp @@ -679,7 +679,7 @@ public: } /* Draw the template */ - DrawTemplate(v, left + ScaleGUITrad(50), right, y); + DrawTemplate(v, left + ScaleGUITrad(36), right - ScaleGUITrad(24), y); /* Draw a notification string for chains that are not runnable */ if (v->IsFreeWagonChain()) { diff --git a/src/tbtr_template_vehicle_func.cpp b/src/tbtr_template_vehicle_func.cpp index 0c0b8d1050..43eb279663 100644 --- a/src/tbtr_template_vehicle_func.cpp +++ b/src/tbtr_template_vehicle_func.cpp @@ -119,16 +119,26 @@ void DrawTemplate(const TemplateVehicle *tv, int left, int right, int y) { if (!tv) return; + DrawPixelInfo tmp_dpi, *old_dpi; + int max_width = right - left + 1; + int height = ScaleGUITrad(14); + if (!FillDrawPixelInfo(&tmp_dpi, left, y, max_width, height)) return; + + old_dpi = _cur_dpi; + _cur_dpi = &tmp_dpi; + const TemplateVehicle *t = tv; - int offset = left; + int offset = 0; while (t) { PaletteID pal = GetEnginePalette(t->engine_type, _current_company); - DrawSprite(t->cur_image, pal, offset, y + ScaleGUITrad(11)); + DrawSprite(t->cur_image, pal, offset + t->image_width / 2, ScaleGUITrad(11)); offset += t->image_width; t = t->Next(); } + + _cur_dpi = old_dpi; } // copy important stuff from the virtual vehicle to the template