ttfglyphtable.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 79 行
JAVA
79 行
/*
* $Id: TTFGlyphTable.java,v 1.1 2003/11/25 11:51:38 epr Exp $
*
* Copyright 2001, FreeHEP.
*/
package org.jnode.awt.font.truetype;
import java.io.IOException;
/**
* GLYPH Table.
*
* @author Simon Fischer
* @version $Id: TTFGlyphTable.java,v 1.1 2003/11/25 11:51:38 epr Exp $
*/
public class TTFGlyphTable extends TTFVersionTable {
/** If this variable is set to false then the glyphs will not be read
* until they are retrieved with <tt>getGlyph(int)</tt>. */
private static final boolean READ_GLYPHS = false;
private Glyph[] glyphs;
private long[] offsets;
public String getTag() {
return "glyf";
}
public void readTable() throws IOException {
final TTFFontData font = getFont();
glyphs = new Glyph[font.getMaxPTable().numGlyphs];
offsets = font.getLocationsTable().offset;
if (READ_GLYPHS) {
for (int i = 0; i < glyphs.length; i++) {
if ((i > 0) && (offsets[i - 1] == offsets[i])) {
glyphs[i] = glyphs[i - 1];
} else {
try {
getGlyph(i);
} catch (IOException e) {
System.err.println("While reading glyph #" + i + " (offset " + offsets[i] + "):");
e.printStackTrace();
}
}
}
}
}
public Glyph getGlyph(int i) throws IOException {
if (glyphs[i] != null) {
return glyphs[i];
} else {
ttf.pushPos();
ttf.seek(offsets[i]);
int numberOfContours = ttf.readShort();
if (numberOfContours >= 0) {
glyphs[i] = new SimpleGlyph(numberOfContours);
} else {
glyphs[i] = new CompositeGlyph(this);
}
glyphs[i].read(ttf);
//System.out.println(i+": "+offsets[i]+"-"+ttf.getPointer());
ttf.popPos();
return glyphs[i];
}
}
public String toString() {
String str = super.toString();
for (int i = 0; i < glyphs.length; i++) {
str += "\n #" + i + ": " + glyphs[i];
}
return str;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?