From c7894e191ab41deaf8109c3c0335c82ded70e1a2 Mon Sep 17 00:00:00 2001 From: johannes-el Date: Sat, 12 Jul 2025 07:56:04 +0200 Subject: [PATCH 1/3] fix: end sequence panel layout and logic --- src/supertux/statistics.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/supertux/statistics.cpp b/src/supertux/statistics.cpp index d795e0a6b99..9a1a9f049ba 100644 --- a/src/supertux/statistics.cpp +++ b/src/supertux/statistics.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include @@ -264,10 +265,22 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c int layer = LAYER_GUI + 50; - int box_w = 220+110+110; - int box_h = 30+20+20+20; - int box_x = static_cast((static_cast(context.get_width()) - box_w) / 2); - int box_y = static_cast(SCREEN_HEIGHT / 2) - box_h; + const std::vector column_widths = {220, 110, 110}; + const int box_w = std::accumulate(column_widths.begin(), column_widths.end(), 0); + + constexpr int row_height = 20; + constexpr int padding_top = 30; + constexpr int padding_bottom = 10; + + int visible_rows = 1; + if (m_preferences.enable_coins) ++visible_rows; + if (m_preferences.enable_badguys) ++visible_rows; + if (m_preferences.enable_secrets) ++visible_rows; + + const int box_h = padding_top + (visible_rows * row_height) + padding_bottom; + + const int box_x = ((static_cast(context.get_width()) - box_w) / 2) - 10; + const int box_y = static_cast(SCREEN_HEIGHT / 2) - box_h; int bd_w = static_cast(backdrop->get_width()); int bd_h = static_cast(backdrop->get_height()); @@ -278,13 +291,13 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c float col2_x = col1_x + 200.0f; float col3_x = col2_x + 130.0f; - float y_offset = 47.f; + float y_offset = 35.f; if (m_preferences.enable_coins) - y_offset -= 9.f; + y_offset -= 7.f; if (m_preferences.enable_badguys) - y_offset -= 9.f; + y_offset -= 7.f; if (m_preferences.enable_secrets) - y_offset -= 9.f; + y_offset -= 7.f; float y = static_cast(box_y); From 49472a629a752f059e9a75d10f22c8bd31057374 Mon Sep 17 00:00:00 2001 From: johannes-el Date: Sat, 12 Jul 2025 17:47:32 +0200 Subject: [PATCH 2/3] fix: end sequence panel layout, co-authored by: bruhmoent --- src/supertux/statistics.cpp | 97 ++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 50 deletions(-) diff --git a/src/supertux/statistics.cpp b/src/supertux/statistics.cpp index 9a1a9f049ba..b5cc750d968 100644 --- a/src/supertux/statistics.cpp +++ b/src/supertux/statistics.cpp @@ -263,61 +263,58 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c { if (m_status != FINAL) return; - int layer = LAYER_GUI + 50; - - const std::vector column_widths = {220, 110, 110}; - const int box_w = std::accumulate(column_widths.begin(), column_widths.end(), 0); - - constexpr int row_height = 20; - constexpr int padding_top = 30; - constexpr int padding_bottom = 10; + constexpr int layer = LAYER_GUI + 50; + constexpr float row_height = 22.f; + constexpr float header_padding_top = 10.f; + constexpr float padding_top = 40.f; + constexpr float padding_bottom = 10.f; + constexpr float label_indent = 16.f; int visible_rows = 1; if (m_preferences.enable_coins) ++visible_rows; if (m_preferences.enable_badguys) ++visible_rows; if (m_preferences.enable_secrets) ++visible_rows; - const int box_h = padding_top + (visible_rows * row_height) + padding_bottom; - - const int box_x = ((static_cast(context.get_width()) - box_w) / 2) - 10; - const int box_y = static_cast(SCREEN_HEIGHT / 2) - box_h; + const std::vector column_widths = { 215.f, 130.f, 130.f }; - int bd_w = static_cast(backdrop->get_width()); - int bd_h = static_cast(backdrop->get_height()); - int bd_x = static_cast((static_cast(context.get_width()) - bd_w) / 2); - int bd_y = box_y + (box_h / 2) - (bd_h / 2); + const float box_w = std::accumulate(column_widths.begin(), column_widths.end(), 0.f); + const float box_h = padding_top + (static_cast(visible_rows) * row_height) + padding_bottom; + const float box_x = ((context.get_width() - box_w) / 2.f); - float col1_x = static_cast(box_x); - float col2_x = col1_x + 200.0f; - float col3_x = col2_x + 130.0f; + const float box_y = (SCREEN_HEIGHT - box_h) / 2.f; - float y_offset = 35.f; - if (m_preferences.enable_coins) - y_offset -= 7.f; - if (m_preferences.enable_badguys) - y_offset -= 7.f; - if (m_preferences.enable_secrets) - y_offset -= 7.f; + std::vector col_x_positions; + col_x_positions.reserve(column_widths.size()); + float current_x = box_x; + for (const float width : column_widths) + { + col_x_positions.push_back(current_x); + current_x += width; + } - float y = static_cast(box_y); + const float bd_w = static_cast(backdrop->get_width()); + const float bd_h = static_cast(backdrop->get_height()); + const float bd_x = (context.get_width() - bd_w) / 2.f; + const float bd_y = box_y + (box_h / 2.f) - (bd_h / 2.f); context.push_transform(); context.set_alpha(0.5f); - context.color().draw_surface(backdrop, Vector(static_cast(bd_x), static_cast(bd_y)), layer); + context.color().draw_surface(backdrop, Vector(bd_x, bd_y), layer); context.pop_transform(); - context.color().draw_text(Resources::normal_font, _("You"), Vector(col2_x, y), ALIGN_LEFT, layer, Statistics::header_color); + const float header_y = box_y + header_padding_top; + context.color().draw_text(Resources::normal_font, _("You"), Vector(col_x_positions[1], header_y), ALIGN_LEFT, layer, Statistics::header_color); if (best_stats) - context.color().draw_text(Resources::normal_font, _("Best"), Vector(col3_x, y), ALIGN_LEFT, layer, Statistics::header_color); + context.color().draw_text(Resources::normal_font, _("Best"), Vector(col_x_positions[2], header_y), ALIGN_LEFT, layer, Statistics::header_color); - y += 10.f + y_offset; + float y = box_y + padding_top; Color tcolor = Statistics::text_color; if (target_time == 0.0f || (m_time != 0.0f && m_time < target_time)) tcolor = Statistics::perfect_color; - context.color().draw_text(Resources::normal_font, _("Time"), Vector(col2_x - 16.f, y), ALIGN_RIGHT, layer, Statistics::header_color); - context.color().draw_text(Resources::normal_font, time_to_string(m_time), Vector(col2_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, _("Time"), Vector(col_x_positions[1] - label_indent, y), ALIGN_RIGHT, layer, Statistics::header_color); + context.color().draw_text(Resources::normal_font, time_to_string(m_time), Vector(col_x_positions[1], y), ALIGN_LEFT, layer, tcolor); if (best_stats) { float time_best = (best_stats->m_time < m_time && best_stats->m_time > 0.0f) ? best_stats->m_time : m_time; @@ -325,20 +322,20 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c tcolor = Statistics::perfect_color; else tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, time_to_string(time_best), Vector(col3_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, time_to_string(time_best), Vector(col_x_positions[2], y), ALIGN_LEFT, layer, tcolor); } if (m_preferences.enable_coins) { - y += y_offset; + y += row_height; - context.color().draw_text(Resources::normal_font, _("Coins"), Vector(col2_x - 16.f, y), ALIGN_RIGHT, layer, Statistics::header_color); + context.color().draw_text(Resources::normal_font, _("Coins"), Vector(col_x_positions[1] - label_indent, y), ALIGN_RIGHT, layer, Statistics::header_color); if (m_coins >= m_total_coins) tcolor = Statistics::perfect_color; else tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, coins_to_string(m_coins, m_total_coins), Vector(col2_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, coins_to_string(m_coins, m_total_coins), Vector(col_x_positions[1], y), ALIGN_LEFT, layer, tcolor); if (best_stats) { @@ -348,43 +345,43 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c tcolor = Statistics::perfect_color; else tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, coins_to_string(coins_best, total_coins_best), Vector(col3_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, coins_to_string(coins_best, total_coins_best), Vector(col_x_positions[2], y), ALIGN_LEFT, layer, tcolor); } } if (m_preferences.enable_badguys) { - y += y_offset; + y += row_height; if (m_badguys >= m_total_badguys) tcolor = Statistics::perfect_color; else tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, _("Badguys"), Vector(col2_x - 16.f, y), ALIGN_RIGHT, layer, Statistics::header_color); - context.color().draw_text(Resources::normal_font, frags_to_string(m_badguys, m_total_badguys), Vector(col2_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, _("Badguys"), Vector(col_x_positions[1] - label_indent, y), ALIGN_RIGHT, layer, Statistics::header_color); + context.color().draw_text(Resources::normal_font, frags_to_string(m_badguys, m_total_badguys), Vector(col_x_positions[1], y), ALIGN_LEFT, layer, tcolor); if (best_stats) { int badguys_best = (best_stats->m_badguys > m_badguys) ? best_stats->m_badguys : m_badguys; int total_badguys_best = (best_stats->m_total_badguys > m_total_badguys) ? best_stats->m_total_badguys : m_total_badguys; - if (badguys_best >= total_badguys_best) - tcolor = Statistics::perfect_color; - else - tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, frags_to_string(badguys_best, total_badguys_best), Vector(col3_x, y), ALIGN_LEFT, layer, tcolor); + if (badguys_best >= total_badguys_best) + tcolor = Statistics::perfect_color; + else + tcolor = Statistics::text_color; + context.color().draw_text(Resources::normal_font, frags_to_string(badguys_best, total_badguys_best), Vector(col_x_positions[2], y), ALIGN_LEFT, layer, tcolor); } } if (m_preferences.enable_secrets) { - y += y_offset; + y += row_height; if (m_secrets >= m_total_secrets) tcolor = Statistics::perfect_color; else tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, _("Secrets"), Vector(col2_x - 16.f, y), ALIGN_RIGHT, layer, Statistics::header_color); - context.color().draw_text(Resources::normal_font, secrets_to_string(m_secrets, m_total_secrets), Vector(col2_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, _("Secrets"), Vector(col_x_positions[1] - label_indent, y), ALIGN_RIGHT, layer, Statistics::header_color); + context.color().draw_text(Resources::normal_font, secrets_to_string(m_secrets, m_total_secrets), Vector(col_x_positions[1], y), ALIGN_LEFT, layer, tcolor); if (best_stats) { @@ -394,7 +391,7 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c tcolor = Statistics::perfect_color; else tcolor = Statistics::text_color; - context.color().draw_text(Resources::normal_font, secrets_to_string(secrets_best, total_secrets_best), Vector(col3_x, y), ALIGN_LEFT, layer, tcolor); + context.color().draw_text(Resources::normal_font, secrets_to_string(secrets_best, total_secrets_best), Vector(col_x_positions[2], y), ALIGN_LEFT, layer, tcolor); } } } From aefc2fc0f1a85127703f23ace31af4695c919939 Mon Sep 17 00:00:00 2001 From: xornamed <69918580+bruhmoent@users.noreply.github.com> Date: Sat, 12 Jul 2025 18:27:08 +0200 Subject: [PATCH 3/3] Fix conversion error --- src/supertux/statistics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/supertux/statistics.cpp b/src/supertux/statistics.cpp index b5cc750d968..80a83b56ca8 100644 --- a/src/supertux/statistics.cpp +++ b/src/supertux/statistics.cpp @@ -281,7 +281,7 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, c const float box_h = padding_top + (static_cast(visible_rows) * row_height) + padding_bottom; const float box_x = ((context.get_width() - box_w) / 2.f); - const float box_y = (SCREEN_HEIGHT - box_h) / 2.f; + const float box_y = (static_cast(SCREEN_HEIGHT) - box_h) / 2.f; std::vector col_x_positions; col_x_positions.reserve(column_widths.size());