mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Support auto-shrinking font to fit
This commit is contained in:
@@ -10,6 +10,7 @@ import com.badlogic.gdx.graphics.GL10;
|
|||||||
import com.badlogic.gdx.graphics.GL20;
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds;
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
@@ -571,25 +572,35 @@ public class Forge implements ApplicationListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawText(String text, FSkinFont skinFont, FSkinColor skinColor, float x, float y, float w, float h, boolean wrap, HAlignment horzAlignment, boolean centerVertically) {
|
public void drawText(String text, FSkinFont skinFont, FSkinColor skinColor, float x, float y, float w, float h, boolean wrap, HAlignment horzAlignment, boolean centerVertically) {
|
||||||
drawText(text, skinFont.getFont(), skinColor.getColor(), x, y, w, h, wrap, horzAlignment, centerVertically);
|
drawText(text, skinFont, skinColor.getColor(), x, y, w, h, wrap, horzAlignment, centerVertically);
|
||||||
}
|
}
|
||||||
public void drawText(String text, FSkinFont skinFont, Color color, float x, float y, float w, float h, boolean wrap, HAlignment horzAlignment, boolean centerVertically) {
|
public void drawText(String text, FSkinFont skinFont, Color color, float x, float y, float w, float h, boolean wrap, HAlignment horzAlignment, boolean centerVertically) {
|
||||||
drawText(text, skinFont.getFont(), color, x, y, w, h, wrap, horzAlignment, centerVertically);
|
int fontSize = skinFont.getSize();
|
||||||
}
|
BitmapFont font = skinFont.getFont();
|
||||||
public void drawText(String text, BitmapFont font, Color color, float x, float y, float w, float h, boolean wrap, HAlignment horzAlignment, boolean centerVertically) {
|
|
||||||
font.setColor(color);
|
|
||||||
if (wrap) {
|
if (wrap) {
|
||||||
float textHeight = font.getWrappedBounds(text, w).height;
|
TextBounds bounds = font.getWrappedBounds(text, w);
|
||||||
|
while ((bounds.width > w || bounds.height > h) && fontSize > FSkinFont.MIN_FONT_SIZE) {
|
||||||
|
font = FSkinFont.get(--fontSize).getFont(); //shrink font to fit if possible
|
||||||
|
bounds = font.getWrappedBounds(text, w);
|
||||||
|
}
|
||||||
|
float textHeight = bounds.height;
|
||||||
if (h > textHeight && centerVertically) {
|
if (h > textHeight && centerVertically) {
|
||||||
y += (h - textHeight) / 2;
|
y += (h - textHeight) / 2;
|
||||||
}
|
}
|
||||||
|
font.setColor(color);
|
||||||
font.drawWrapped(batch, text, adjustX(x), adjustY(y, 0), w, horzAlignment);
|
font.drawWrapped(batch, text, adjustX(x), adjustY(y, 0), w, horzAlignment);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
float textHeight = font.getMultiLineBounds(text).height;
|
TextBounds bounds = font.getMultiLineBounds(text);
|
||||||
|
while ((bounds.width > w || bounds.height > h) && fontSize > FSkinFont.MIN_FONT_SIZE) {
|
||||||
|
font = FSkinFont.get(--fontSize).getFont(); //shrink font to fit if possible
|
||||||
|
bounds = font.getMultiLineBounds(text);
|
||||||
|
}
|
||||||
|
float textHeight = bounds.height;
|
||||||
if (h > textHeight && centerVertically) {
|
if (h > textHeight && centerVertically) {
|
||||||
y += (h - textHeight) / 2;
|
y += (h - textHeight) / 2;
|
||||||
}
|
}
|
||||||
|
font.setColor(color);
|
||||||
font.drawMultiLine(batch, text, adjustX(x), adjustY(y, 0), w, horzAlignment);
|
font.drawMultiLine(batch, text, adjustX(x), adjustY(y, 0), w, horzAlignment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
|||||||
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
|
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
|
||||||
|
|
||||||
public class FSkinFont {
|
public class FSkinFont {
|
||||||
|
public static final int MIN_FONT_SIZE = 8;
|
||||||
|
|
||||||
private static final String TTF_FILE = "font1.ttf";
|
private static final String TTF_FILE = "font1.ttf";
|
||||||
private static final int defaultFontSize = 12;
|
private static final int defaultFontSize = 12;
|
||||||
private static final Map<Integer, FSkinFont> fonts = new HashMap<Integer, FSkinFont>();
|
private static final Map<Integer, FSkinFont> fonts = new HashMap<Integer, FSkinFont>();
|
||||||
|
|||||||
@@ -152,9 +152,10 @@ public class VPlayerPanel extends FContainer {
|
|||||||
y = height - VAvatar.HEIGHT;
|
y = height - VAvatar.HEIGHT;
|
||||||
avatar.setPosition(0, y);
|
avatar.setPosition(0, y);
|
||||||
|
|
||||||
|
float lifeLabelWidth = LIFE_FONT.getFont().getBounds("99").width * 1.2f; //make just wide enough for 2-digit life totals
|
||||||
float infoLabelHeight = VAvatar.HEIGHT - VPhaseIndicator.HEIGHT;
|
float infoLabelHeight = VAvatar.HEIGHT - VPhaseIndicator.HEIGHT;
|
||||||
lblLife.setBounds(x, y, lblLife.getWidth(), infoLabelHeight);
|
lblLife.setBounds(x, y, lifeLabelWidth, infoLabelHeight);
|
||||||
x += lblLife.getWidth();
|
x += lifeLabelWidth;
|
||||||
|
|
||||||
float infoTabWidth = (getWidth() - x) / tabs.size();
|
float infoTabWidth = (getWidth() - x) / tabs.size();
|
||||||
for (InfoTab tab : tabs) {
|
for (InfoTab tab : tabs) {
|
||||||
@@ -192,7 +193,6 @@ public class VPlayerPanel extends FContainer {
|
|||||||
private String life = "20";
|
private String life = "20";
|
||||||
|
|
||||||
private LifeLabel() {
|
private LifeLabel() {
|
||||||
setWidth(LIFE_FONT.getFont().getBounds("99").width * 1.2f); //make just wide enough for 2-digit life totals
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void update() {
|
private void update() {
|
||||||
@@ -268,8 +268,8 @@ public class VPlayerPanel extends FContainer {
|
|||||||
y = (getHeight() - h) / 2;
|
y = (getHeight() - h) / 2;
|
||||||
g.drawImage(icon, x, y, w, h);
|
g.drawImage(icon, x, y, w, h);
|
||||||
|
|
||||||
x += w * 1.05f;
|
x += w * 1.1f;
|
||||||
g.drawText(value, INFO_FONT, INFO_FORE_COLOR, x, 0, getWidth() - x, getHeight(), false, HAlignment.LEFT, true);
|
g.drawText(value, INFO_FONT, INFO_FORE_COLOR, x, 0, getWidth() - x + 1, getHeight(), false, HAlignment.LEFT, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user