Formatting, code polish
This commit is contained in:
parent
01e5eab0ca
commit
46ae5cbc78
|
@ -24,7 +24,6 @@ import java.awt.GraphicsEnvironment;
|
||||||
import java.awt.RenderingHints;
|
import java.awt.RenderingHints;
|
||||||
import java.awt.font.FontRenderContext;
|
import java.awt.font.FontRenderContext;
|
||||||
import java.awt.font.GlyphVector;
|
import java.awt.font.GlyphVector;
|
||||||
import java.awt.geom.Rectangle2D;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
@ -138,7 +137,8 @@ class FontUtil {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the correct font (in GENERAL) for a specified pixel height.
|
* Gets the correct font for a specified pixel height. This measures the maximum font height possible for the specified font. This
|
||||||
|
* can be different than the alpha-numeric height.
|
||||||
*
|
*
|
||||||
* @param font the font we are checking
|
* @param font the font we are checking
|
||||||
* @param height the height in pixels we want to get as close as possible to
|
* @param height the height in pixels we want to get as close as possible to
|
||||||
|
@ -150,44 +150,39 @@ class FontUtil {
|
||||||
Font getFontForSpecificHeight(final Font font, final int height) {
|
Font getFontForSpecificHeight(final Font font, final int height) {
|
||||||
int size = font.getSize();
|
int size = font.getSize();
|
||||||
Boolean lastAction = null;
|
Boolean lastAction = null;
|
||||||
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
|
|
||||||
Graphics2D g = image.createGraphics();
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
Font fontCheck = new Font(font.getName(), Font.PLAIN, size);
|
Font fontCheck = new Font(font.getName(), Font.PLAIN, size);
|
||||||
|
int maxFontHeight = getMaxFontHeight(fontCheck);
|
||||||
|
|
||||||
FontMetrics metrics = g.getFontMetrics(fontCheck);
|
if (maxFontHeight < height && lastAction != Boolean.FALSE) {
|
||||||
Rectangle2D rect = metrics.getStringBounds("`Tj|┃", g); // `Tj|┃ are glyphs that are at the top/bottom of the fontset (usually)
|
|
||||||
double testHeight = rect.getHeight();
|
|
||||||
|
|
||||||
if (testHeight < height && lastAction != Boolean.FALSE) {
|
|
||||||
size++;
|
size++;
|
||||||
lastAction = Boolean.TRUE;
|
lastAction = Boolean.TRUE;
|
||||||
} else if (testHeight > height && lastAction != Boolean.TRUE) {
|
} else if (maxFontHeight > height && lastAction != Boolean.TRUE) {
|
||||||
size--;
|
size--;
|
||||||
lastAction = Boolean.FALSE;
|
lastAction = Boolean.FALSE;
|
||||||
} else {
|
} else {
|
||||||
// either we are the exact size, or we are ONE font size to big/small (depending on what our initial guess was)
|
// either we are the exact size, or we are ONE font size to big/small (depending on what our initial guess was)
|
||||||
g.dispose();
|
|
||||||
return fontCheck;
|
return fontCheck;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the specified font height for a specific string
|
* Gets the specified font height for a specific string, as rendered on the screen.
|
||||||
*
|
*
|
||||||
* @param font the font to use
|
* @param font the font to use for rendering the string
|
||||||
* @param string the string to get the size of
|
* @param string the string used to get the height
|
||||||
*
|
*
|
||||||
* @return the height of the string
|
* @return the height of the string
|
||||||
*/
|
*/
|
||||||
public static
|
public static
|
||||||
int getFontHeight(final Font font, final String string) {
|
int getFontHeight(final Font font, final String string) {
|
||||||
BufferedImage image = new BufferedImage(1, 1, 1);
|
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
|
||||||
Graphics2D g = image.createGraphics();
|
Graphics2D g = image.createGraphics();
|
||||||
FontRenderContext frc = g.getFontRenderContext();
|
FontRenderContext frc = g.getFontRenderContext();
|
||||||
|
|
||||||
GlyphVector gv = font.createGlyphVector(frc, string);
|
GlyphVector gv = font.createGlyphVector(frc, string);
|
||||||
int height = gv.getPixelBounds(null, 0, 0).height;
|
int height = gv.getPixelBounds(null, 0, 0).height;
|
||||||
g.dispose();
|
g.dispose();
|
||||||
|
@ -196,12 +191,12 @@ class FontUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the maximum font height used by alpha-numeric characters ONLY
|
* Gets the maximum font height used by alpha-numeric characters ONLY, as recorded by the font.
|
||||||
*/
|
*/
|
||||||
public static
|
public static
|
||||||
int getAlphaNumbericFontHeight(final Font font) {
|
int getAlphaNumericFontHeight(final Font font) {
|
||||||
// Because font metrics is based on a graphics context, we need to create a small, temporary image to determine the width and height
|
// Because font metrics is based on a graphics context, we need to create a small, temporary image to determine the width and height
|
||||||
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
|
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
|
||||||
Graphics2D g = image.createGraphics();
|
Graphics2D g = image.createGraphics();
|
||||||
|
|
||||||
FontMetrics metrics = g.getFontMetrics(font);
|
FontMetrics metrics = g.getFontMetrics(font);
|
||||||
|
@ -212,12 +207,12 @@ class FontUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the maximum font height used by of ALL characters.
|
* Gets the maximum font height used by of ALL characters, as recorded by the font.
|
||||||
*/
|
*/
|
||||||
public static
|
public static
|
||||||
int getFontHeight(final Font font) {
|
int getMaxFontHeight(final Font font) {
|
||||||
// Because font metrics is based on a graphics context, we need to create a small, temporary image to determine the width and height
|
// Because font metrics is based on a graphics context, we need to create a small, temporary image to determine the width and height
|
||||||
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
|
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
|
||||||
Graphics2D g = image.createGraphics();
|
Graphics2D g = image.createGraphics();
|
||||||
|
|
||||||
FontMetrics metrics = g.getFontMetrics(font);
|
FontMetrics metrics = g.getFontMetrics(font);
|
||||||
|
|
Loading…
Reference in New Issue