achievementdiary: Layout text properly
Otherwise it doesn't layout multiple lines, and doesn't actually account for glyph width
This commit is contained in:
@@ -30,9 +30,11 @@ import java.util.Collection;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.FontTypeFace;
|
||||||
import net.runelite.api.QuestState;
|
import net.runelite.api.QuestState;
|
||||||
import net.runelite.api.ScriptID;
|
import net.runelite.api.ScriptID;
|
||||||
import net.runelite.api.VarPlayer;
|
import net.runelite.api.VarPlayer;
|
||||||
@@ -66,6 +68,7 @@ import net.runelite.client.util.Text;
|
|||||||
public class DiaryRequirementsPlugin extends Plugin
|
public class DiaryRequirementsPlugin extends Plugin
|
||||||
{
|
{
|
||||||
private static final String AND_JOINER = ", ";
|
private static final String AND_JOINER = ", ";
|
||||||
|
private static final Pattern AND_JOINER_PATTERN = Pattern.compile("(?<=, )");
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Client client;
|
private Client client;
|
||||||
@@ -102,6 +105,9 @@ public class DiaryRequirementsPlugin extends Plugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FontTypeFace font = titleWidget.getFont();
|
||||||
|
int maxWidth = titleWidget.getWidth();
|
||||||
|
|
||||||
List<String> originalAchievements = getOriginalAchievements(children);
|
List<String> originalAchievements = getOriginalAchievements(children);
|
||||||
|
|
||||||
// new requirements starts out as a copy of the original
|
// new requirements starts out as a copy of the original
|
||||||
@@ -138,21 +144,45 @@ public class DiaryRequirementsPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
String levelRequirement = skillRequirements.get(taskBuffer);
|
String levelRequirement = skillRequirements.get(taskBuffer);
|
||||||
String task = originalAchievements.get(i);
|
String task = originalAchievements.get(i);
|
||||||
if (Text.removeTags(task).length() + Text.removeTags(levelRequirement).length() <= 50)
|
|
||||||
|
int taskWidth = font.getTextWidth(task);
|
||||||
|
int ourWidth = font.getTextWidth(levelRequirement);
|
||||||
|
String strike = task.startsWith("<str>") ? "<str>" : "";
|
||||||
|
|
||||||
|
if (ourWidth + taskWidth < maxWidth)
|
||||||
{
|
{
|
||||||
|
// Merge onto 1 line
|
||||||
newRequirements.set(i + offset, task + levelRequirement);
|
newRequirements.set(i + offset, task + levelRequirement);
|
||||||
}
|
}
|
||||||
|
else if (ourWidth < maxWidth)
|
||||||
|
{
|
||||||
|
// 2 line split
|
||||||
|
newRequirements.add(i + (++offset), strike + levelRequirement);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
offset++;
|
// Full text layout
|
||||||
if (task.startsWith("<str>"))
|
StringBuilder b = new StringBuilder();
|
||||||
|
b.append(task);
|
||||||
|
int runningWidth = font.getTextWidth(b.toString());
|
||||||
|
for (String word : AND_JOINER_PATTERN.split(levelRequirement))
|
||||||
{
|
{
|
||||||
newRequirements.add(i + offset, "<str>" + levelRequirement);
|
int wordWidth = font.getTextWidth(word);
|
||||||
}
|
if (runningWidth == 0 || wordWidth + runningWidth < maxWidth)
|
||||||
else
|
{
|
||||||
{
|
runningWidth += wordWidth;
|
||||||
newRequirements.add(i + offset, levelRequirement);
|
b.append(word);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newRequirements.add(i + (offset++), b.toString());
|
||||||
|
b.delete(0, b.length());
|
||||||
|
runningWidth = wordWidth;
|
||||||
|
b.append(strike);
|
||||||
|
b.append(word);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
newRequirements.add(i + offset, b.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user