diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index f4c216788d..c2535a05d0 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -287,6 +287,18 @@ protected: return max_width; } + virtual StringID PrepareXAxisText(uint16 label) const + { + SetDParam(0, label); + return STR_JUST_COMMA; + } + + virtual StringID PrepareXAxisMaxSizeText(uint16 label) const + { + SetDParamMaxValue(0, label, 0, FS_SMALL); + return STR_JUST_COMMA; + } + /** * Actually draw the graph. * @param r the rectangle of the data field of the graph @@ -411,8 +423,8 @@ protected: uint16 label = this->x_values_start; for (int i = 0; i < this->num_on_x_axis; i++) { - SetDParam(0, label); - DrawString(x + 1, x + x_sep - 1, y, STR_GRAPH_Y_LABEL_NUMBER, GRAPH_AXIS_LABEL_COLOUR, SA_HOR_CENTER); + StringID str = this->PrepareXAxisText(label); + DrawString(x + 1, x + x_sep - 1, y, str, GRAPH_AXIS_LABEL_COLOUR, SA_HOR_CENTER, false, FS_SMALL); label += this->x_values_increment; x += x_sep; @@ -525,8 +537,8 @@ public: } } else { /* Draw x-axis labels for graphs not based on quarterly performance (cargo payment rates). */ - SetDParamMaxValue(0, this->x_values_start + this->num_on_x_axis * this->x_values_increment, 0, FS_SMALL); - x_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL_NUMBER).width; + StringID str = this->PrepareXAxisMaxSizeText(this->x_values_start + this->num_on_x_axis * this->x_values_increment); + x_label_width = GetStringBoundingBox(str, FS_SMALL).width; } SetDParam(0, this->format_str_y_axis); @@ -1187,6 +1199,43 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { this->x_values_increment = x_scale; } + uint GetXAxisDecimals() const + { + if (_cargo_payment_x_mode) return 0; + if ((10 % _settings_game.economy.day_length_factor) == 0) return 0; + if (_settings_game.economy.day_length_factor > 50) return 2; + return 1; + } + + std::pair ProcessXAxisValue(uint16 label) const + { + uint val = label; + uint decimals = this->GetXAxisDecimals(); + for (uint i = 0; i < decimals; i++) { + val *= 10; + } + val /= _settings_game.economy.day_length_factor; + return { val, decimals }; + } + + StringID PrepareXAxisText(uint16 label) const override + { + auto val = this->ProcessXAxisValue(label); + + SetDParam(0, val.first); + SetDParam(1, val.second); + return STR_JUST_DECIMAL; + } + + StringID PrepareXAxisMaxSizeText(uint16 label) const override + { + auto val = this->ProcessXAxisValue(label); + + SetDParamMaxValue(0, val.first, 0, FS_SMALL); + SetDParam(1, val.second); + return STR_JUST_DECIMAL; + } + void OnInit() override { /* Width of the legend blob. */