mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-08 23:19:40 +00:00
Fix: Count engine details text in lines rather than pixels. (#9107)
This allows the details panel to scale correctly for different zoom levels.
This commit is contained in:
parent
27031b396f
commit
224625942c
@ -81,7 +81,7 @@ class ReplaceVehicleWindow : public Window {
|
|||||||
bool replace_engines; ///< If \c true, engines are replaced, if \c false, wagons are replaced (only for trains).
|
bool replace_engines; ///< If \c true, engines are replaced, if \c false, wagons are replaced (only for trains).
|
||||||
bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected.
|
bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected.
|
||||||
GroupID sel_group; ///< Group selected to replace.
|
GroupID sel_group; ///< Group selected to replace.
|
||||||
int details_height; ///< Minimal needed height of the details panels (found so far).
|
int details_height; ///< Minimal needed height of the details panels, in text lines (found so far).
|
||||||
byte sort_criteria; ///< Criteria of sorting vehicles.
|
byte sort_criteria; ///< Criteria of sorting vehicles.
|
||||||
bool descending_sort_order; ///< Order of sorting vehicles.
|
bool descending_sort_order; ///< Order of sorting vehicles.
|
||||||
bool show_hidden_engines; ///< Whether to show the hidden engines.
|
bool show_hidden_engines; ///< Whether to show the hidden engines.
|
||||||
@ -229,7 +229,7 @@ public:
|
|||||||
this->engines[0].ForceRebuild();
|
this->engines[0].ForceRebuild();
|
||||||
this->engines[1].ForceRebuild();
|
this->engines[1].ForceRebuild();
|
||||||
this->reset_sel_engine = true;
|
this->reset_sel_engine = true;
|
||||||
this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9);
|
||||||
this->sel_engine[0] = INVALID_ENGINE;
|
this->sel_engine[0] = INVALID_ENGINE;
|
||||||
this->sel_engine[1] = INVALID_ENGINE;
|
this->sel_engine[1] = INVALID_ENGINE;
|
||||||
this->show_hidden_engines = _engine_sort_show_hidden_engines[vehicletype];
|
this->show_hidden_engines = _engine_sort_show_hidden_engines[vehicletype];
|
||||||
@ -274,7 +274,7 @@ public:
|
|||||||
|
|
||||||
case WID_RV_LEFT_DETAILS:
|
case WID_RV_LEFT_DETAILS:
|
||||||
case WID_RV_RIGHT_DETAILS:
|
case WID_RV_RIGHT_DETAILS:
|
||||||
size->height = this->details_height;
|
size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: {
|
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: {
|
||||||
@ -482,7 +482,7 @@ public:
|
|||||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS);
|
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS);
|
||||||
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
|
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
|
||||||
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted);
|
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted);
|
||||||
needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
|
needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
||||||
|
@ -1055,7 +1055,7 @@ struct BuildVehicleWindow : Window {
|
|||||||
CargoID cargo_filter[NUM_CARGO + 3]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE or CF_ENGINES
|
CargoID cargo_filter[NUM_CARGO + 3]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE or CF_ENGINES
|
||||||
StringID cargo_filter_texts[NUM_CARGO + 4]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID
|
StringID cargo_filter_texts[NUM_CARGO + 4]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID
|
||||||
byte cargo_filter_criteria; ///< Selected cargo filter
|
byte cargo_filter_criteria; ///< Selected cargo filter
|
||||||
int details_height; ///< Minimal needed height of the details panels (found so far).
|
int details_height; ///< Minimal needed height of the details panels, in text lines (found so far).
|
||||||
Scrollbar *vscroll;
|
Scrollbar *vscroll;
|
||||||
TestedEngineDetails te; ///< Tested cost and capacity after refit.
|
TestedEngineDetails te; ///< Tested cost and capacity after refit.
|
||||||
|
|
||||||
@ -1115,7 +1115,7 @@ struct BuildVehicleWindow : Window {
|
|||||||
widget->tool_tip = STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP + type;
|
widget->tool_tip = STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP + type;
|
||||||
widget->SetLowered(this->show_hidden_engines);
|
widget->SetLowered(this->show_hidden_engines);
|
||||||
|
|
||||||
this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9);
|
||||||
|
|
||||||
this->FinishInitNested(tile == INVALID_TILE ? (int)type : tile);
|
this->FinishInitNested(tile == INVALID_TILE ? (int)type : tile);
|
||||||
|
|
||||||
@ -1553,7 +1553,7 @@ struct BuildVehicleWindow : Window {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_BV_PANEL:
|
case WID_BV_PANEL:
|
||||||
size->height = this->details_height;
|
size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_BV_SORT_ASCENDING_DESCENDING: {
|
case WID_BV_SORT_ASCENDING_DESCENDING: {
|
||||||
@ -1620,12 +1620,12 @@ struct BuildVehicleWindow : Window {
|
|||||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_BV_PANEL);
|
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_BV_PANEL);
|
||||||
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
|
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
|
||||||
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te);
|
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te);
|
||||||
needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
|
needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL);
|
||||||
}
|
}
|
||||||
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
||||||
int resize = needed_height - this->details_height;
|
int resize = needed_height - this->details_height;
|
||||||
this->details_height = needed_height;
|
this->details_height = needed_height;
|
||||||
this->ReInit(0, resize);
|
this->ReInit(0, resize * FONT_HEIGHT_NORMAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user