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 + -
显示快捷键?