ttftextrenderer.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 83 行
JAVA
83 行
/*
* $Id: TTFTextRenderer.java,v 1.5 2004/01/03 18:12:05 epr Exp $
*/
package org.jnode.awt.font.truetype;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.jnode.awt.font.TextRenderer;
/**
* @author epr
*/
public class TTFTextRenderer implements TextRenderer {
/** My logger */
private final Logger log = Logger.getLogger(getClass());
private final TTFFontData fontData;
private final double fontSize;
/**
* Create a new instance
* @param fontData
* @param fontSize
*/
public TTFTextRenderer(TTFFontData fontData, int fontSize) {
this.fontData = fontData;
this.fontSize = fontSize;
}
/**
* Render a given text to the given graphics at the given location.
* @param g
* @param text
* @param x
* @param y
*/
public void render(Graphics2D g, String text, int x, int y) {
try {
final GeneralPath gp = new GeneralPath();
gp.moveTo(x, y);
final TTFGlyphTable glyphTable = fontData.getGlyphTable();
final TTFCMapTable cmapTable = fontData.getCMapTable();
final TTFHorizontalHeaderTable hheadTable = fontData.getHorizontalHeaderTable();
final TTFHorizontalMetricsTable hmTable = fontData.getHorizontalMetricsTable();
if (!(cmapTable.getNrEncodingTables() > 0)) {
throw new RuntimeException("No Encoding is found!");
}
final TTFCMapTable.EncodingTable encTable = cmapTable.getEncodingTable(0);
if (encTable.getTableFormat() == null) {
throw new RuntimeException("The table is NUll!!");
}
final double ascent = hheadTable.getAscent();
final AffineTransform tx = new AffineTransform();
final double scale = fontSize / ascent;
tx.translate(x, y + fontSize);
tx.scale(scale, -scale);
tx.translate(0, ascent);
for (int i = 0; i < text.length(); i++) {
// get the index for the needed glyph
final int index = encTable.getTableFormat().getGlyphIndex(text.charAt(i));
Shape shape = glyphTable.getGlyph(index).getShape();
if(text.charAt(i) != ' ')
gp.append(shape.getPathIterator(tx), false);
tx.translate(hmTable.getAdvanceWidth(index), 0);
}
g.draw(gp);
//g.fill(gp);
} catch (IOException ex) {
log.error("Error drawing text", ex);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?