Merge branch 'master' into jgrpp

# Conflicts:
#	src/openttd.cpp
#	src/script/api/script_text.cpp
#	src/settings_type.h
This commit is contained in:
Jonathan G Rennison
2024-02-27 18:48:50 +00:00
19 changed files with 649 additions and 598 deletions

View File

@@ -1218,18 +1218,16 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number,
* @param type Type of vehicle (VEH_*)
* @param r The Rect of the list
* @param eng_list What engines to draw
* @param min where to start in the list
* @param max where in the list to end
* @param sb Scrollbar of list.
* @param selected_id what engine to highlight as selected, if any
* @param show_count Whether to show the amount of engines or not
* @param selected_group the group to list the engines of
*/
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16_t min, uint16_t max, EngineID selected_id, bool show_count, GroupID selected_group)
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group)
{
static const int sprite_y_offsets[] = { -1, -1, -2, -2 };
/* Obligatory sanity checks! */
assert(max <= eng_list.size());
auto [first, last] = sb.GetVisibleRangeIterators(eng_list);
bool rtl = _current_text_dir == TD_RTL;
int step_size = GetEngineListHeight(type);
@@ -1248,9 +1246,8 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
replace_icon = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE);
uint biggest_num_engines = 0;
for (auto i = min; i < max; i++) {
const auto &item = eng_list[i];
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, item.engine_id);
for (auto it = first; it != last; ++it) {
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, it->engine_id);
biggest_num_engines = std::max(biggest_num_engines, num_engines);
}
@@ -1268,8 +1265,8 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
int replace_icon_y_offset = (ir.Height() - replace_icon.height) / 2;
int y = ir.top;
for (; min < max; min++, y += step_size) {
const auto &item = eng_list[min];
for (auto it = first; it != last; ++it) {
const auto &item = *it;
uint indent = item.indent * WidgetDimensions::scaled.hsep_indent;
bool has_variants = (item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None;
bool is_folded = (item.flags & EngineDisplayFlags::IsFolded) != EngineDisplayFlags::None;
@@ -1305,10 +1302,11 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
/* Draw tree lines */
Rect fr = ir.Indent(indent - WidgetDimensions::scaled.hsep_indent, rtl).WithWidth(circle_width, rtl);
int ycenter = y + normal_text_y_offset + GetCharacterHeight(FS_NORMAL) / 2;
bool continues = (min + 1U) < eng_list.size() && eng_list[min + 1].indent == item.indent;
bool continues = std::next(it) != std::end(eng_list) && std::next(it)->indent == item.indent;
GfxDrawLine(fr.left + circle_width / 2, y - WidgetDimensions::scaled.matrix.top, fr.left + circle_width / 2, continues ? y - WidgetDimensions::scaled.matrix.top + step_size - 1 : ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top);
GfxDrawLine(fr.left + circle_width / 2, ycenter, fr.right, ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top);
}
y += step_size;
}
}
@@ -2083,8 +2081,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
this->vehicle_type,
r,
this->eng_list,
this->vscroll->GetPosition(),
static_cast<uint16_t>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size())),
*this->vscroll,
this->sel_engine,
false,
DEFAULT_GROUP
@@ -3037,9 +3034,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
switch (widget) {
case WID_BV_LIST_LOCO: {
DrawEngineList(this->vehicle_type, r,
this->loco.eng_list, this->loco.vscroll->GetPosition(),
std::min<uint16_t>(this->loco.vscroll->GetPosition() + this->loco.vscroll->GetCapacity(),
static_cast<uint16_t>(this->loco.eng_list.size())), this->loco.sel_engine, false,
this->loco.eng_list, *(this->loco.vscroll), this->loco.sel_engine, false,
DEFAULT_GROUP);
break;
}
@@ -3051,9 +3046,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
case WID_BV_LIST_WAGON: {
DrawEngineList(this->vehicle_type, r,
this->wagon.eng_list, this->wagon.vscroll->GetPosition(),
std::min<uint16_t>(this->wagon.vscroll->GetPosition() + this->wagon.vscroll->GetCapacity(),
static_cast<uint16_t>(this->wagon.eng_list.size())), this->wagon.sel_engine, false,
this->wagon.eng_list, *(this->wagon.vscroll), this->wagon.sel_engine, false,
DEFAULT_GROUP);
break;
}