From d5bf27aa9376446cd147c7042e407c990160735b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 9 Nov 2021 16:20:17 +0900 Subject: [PATCH] more concurrent shit --- src/net/torvald/terrarum/ui/UIItemTextLineInput.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt index 66d694f0c..8262815cb 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt @@ -455,12 +455,15 @@ class UIItemTextLineInput( batch.draw(labels.get(7,2), btn2PosX + 2f, posY + 2f) } + // state of the candidates are concurrently changing, so we buffer them + val localCandidates = ArrayList(); candidates.forEach { localCandidates.add(it) } // draw candidates view - if (candidates.isNotEmpty()) { - val textWidths = candidates.map { App.fontGame.getWidth(CodepointSequence(it)) } + if (localCandidates.isNotEmpty()) { + + val textWidths = localCandidates.map { App.fontGame.getWidth(CodepointSequence(it)) } val candidatesMax = getIME()!!.config.candidates.toInt() - val candidatesCount = minOf(candidatesMax, candidates.size) + val candidatesCount = minOf(candidatesMax, localCandidates.size) val isOnecolumn = (candidatesCount <= 3) val halfcount = if (isOnecolumn) candidatesCount else FastMath.ceil(candidatesCount / 2f) val candidateWinH = App.fontGame.lineHeight.toInt() * halfcount @@ -482,7 +485,7 @@ class UIItemTextLineInput( // candidate texts for (i in 0 until candidatesCount) { val candidateNum = listOf(i+48,46,32) - App.fontGame.draw(batch, CodepointSequence(candidateNum + candidates[i]), + App.fontGame.draw(batch, CodepointSequence(candidateNum + localCandidates[i]), candidatePosX + (i / halfcount) * (longestCandidateW + 3) + 2, candidatePosY + (i % halfcount) * 20 ) @@ -505,7 +508,7 @@ class UIItemTextLineInput( Toolkit.drawBoxBorder(batch, candidatePosX - 1, candidatePosY - 1, candidateWinW + 2, candidateWinH + 2) val previewTextWidth = textWidths[0] - App.fontGame.draw(batch, candidates[0], candidatePosX + (candidateWinW - previewTextWidth) / 2, candidatePosY) + App.fontGame.draw(batch, localCandidates[0], candidatePosX + (candidateWinW - previewTextWidth) / 2, candidatePosY) } }