From 02578ce12160ef2b38c31bedcb346a65a4fbc096 Mon Sep 17 00:00:00 2001 From: Hersi Date: Mon, 22 Nov 2021 01:17:55 +0100 Subject: [PATCH] chalwheel: fixed calling CreateLabel every frame --- scripts/songselect/chalwheel.lua | 44 +++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/scripts/songselect/chalwheel.lua b/scripts/songselect/chalwheel.lua index 8f962a8..d5351a5 100644 --- a/scripts/songselect/chalwheel.lua +++ b/scripts/songselect/chalwheel.lua @@ -136,24 +136,51 @@ local resolutionChange = function(x, y) fullY = y end -check_or_create_cache = function(challenge) +local update_cache_labels = function(challenge, titleFontSize) + if challengeCache[challenge.id] then + local _, fontsize = gfx.LabelSize(challengeCache[challenge.id]["title"]) + if fontsize ~= titleFontSize then + gfx.UpdateLabel(challengeCache[challenge.id]["title"], challengeCache[challenge.id]["title_raw"], titleFontSize) + for _, chart in ipairs(challengeCache[challenge.id]["charts"]) do + gfx.UpdateLabel(chart["title"], chart["title_raw"], titleFontSize) + end + end + end +end + +local check_or_create_cache = function(challenge) + local defaultLabelSize = 16 + if not challengeCache[challenge.id] then challengeCache[challenge.id] = {} end if not challengeCache[challenge.id]["title"] then - challengeCache[challenge.id]["title"] = challenge.title + challengeCache[challenge.id]["title"] = gfx.CreateLabel(challenge.title, defaultLabelSize, 0) + challengeCache[challenge.id]["title_raw"] = challenge.title end if not challengeCache[challenge.id]["charts"] then if challenge.missing_chart then local missing_text = "*COULD NOT FIND ALL CHARTS!*" - challengeCache[challenge.id]["charts"] = { { ["title"] = missing_text, ["level"] = 0, ["difficulty"] = 0 } } + challengeCache[challenge.id]["charts"] = { + { + ["title"] = gfx.CreateLabel(missing_text, defaultLabelSize, 0), + ["title_raw"] = missing_text, + ["level"] = 0, + ["difficulty"] = 0 + } + } end local charts = {} for _, chart in ipairs(challenge.charts) do - table.insert(charts, { ["title"] = chart.title, ["level"] = chart.level, ["difficulty"] = chart.difficulty }) + table.insert(charts, { + ["title"] = gfx.CreateLabel(chart.title, defaultLabelSize, 0), + ["title_raw"] = chart.title, + ["level"] = chart.level, + ["difficulty"] = chart.difficulty + }) end challengeCache[challenge.id]["charts"] = charts end @@ -220,13 +247,14 @@ draw_challenge = function(challenge, x, y, w, h, selected) titleBaselineY = y + 0.09 * h -- align baseline end + update_cache_labels(challenge, titleFontSize) + gfx.BeginPath() gfx.ImageRect(stateOffsetX, stateOffsetY, stateWidth, stateHeight, stateLabel, 1, 0) - local titleLabel = gfx.CreateLabel(challengeCache[challenge.id]["title"], titleFontSize, 0) gfx.FontFace("divlit_custom.ttf") gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_BASELINE) - gfx.DrawLabel(titleLabel, titleCenterX, titleBaselineY, titleMaxWidth) + gfx.DrawLabel(challengeCache[challenge.id]["title"], titleCenterX, titleBaselineY, titleMaxWidth) end local _draw_jacket = function() @@ -303,7 +331,6 @@ draw_challenge = function(challenge, x, y, w, h, selected) local offsetY = y + 0.246 * h local titleMargin = 6 - local titleFontSize = math.floor(0.11 * h) -- must be an integer local titleMaxWidth = 6 / 9 * w local titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right @@ -326,9 +353,8 @@ draw_challenge = function(challenge, x, y, w, h, selected) draw_diff_icon(chart, offsetX, ypos, diffIconWidth, diffIconHeight, selected) - local chartTitleLabel = gfx.CreateLabel(chart.title, titleFontSize, 0) gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_MIDDLE) - gfx.DrawLabel(chartTitleLabel, titleCenterX, ypos + diffIconHeight / 2, titleMaxWidth) + gfx.DrawLabel(chart.title, titleCenterX, ypos + diffIconHeight / 2, titleMaxWidth) end end