ttffontmetrics.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 132 行

JAVA
132
字号
/*
 * $Id: TTFFontMetrics.java,v 1.2 2004/01/03 18:12:05 epr Exp $
 */
package org.jnode.awt.font.truetype;

import java.awt.Font;
import java.awt.FontMetrics;
import java.io.IOException;

/**
 * @author epr
 */
public class TTFFontMetrics extends FontMetrics {

	private final TTFFontData fontData;
	private final double scale;

	/**
	 * @param font
	 * @param fontData
	 * @throws IOException
	 */
	public TTFFontMetrics(Font font, TTFFontData fontData)
	throws IOException {
		super(font);
		if (font == null) {
			throw new IllegalArgumentException("font cannot be null");
		}
		if (fontData == null) {
			throw new IllegalArgumentException("fontData cannot be null");
		}
		this.fontData = fontData;
		this.scale = font.getSize() / fontData.getHorizontalHeaderTable().getAscent();
	}

	/**
	 * @param ch
	 * @see java.awt.FontMetrics#charWidth(char)
	 * @return The width
	 */
	public int charWidth(char ch) {
		try {
			final TTFCMapTable cmapTable = fontData.getCMapTable();
			final TTFCMapTable.EncodingTable encTable = cmapTable.getEncodingTable(0);
			final TTFHorizontalMetricsTable hmTable = fontData.getHorizontalMetricsTable();
			final int index = encTable.getTableFormat().getGlyphIndex(ch);
			return (int)(hmTable.getAdvanceWidth(index) * scale);
		} catch (IOException ex) {
			return 0;
		}
	}

	/**
	 * @see java.awt.FontMetrics#getAscent()
	 * @return The ascent
	 */
	public int getAscent() {
		try {
			return (int)(fontData.getHorizontalHeaderTable().getAscent() * scale);
		} catch (IOException ex) {
			return 0;
		}
	}

	/**
	 * @see java.awt.FontMetrics#getDescent()
	 * @return The descent
	 */
	public int getDescent() {
		try {
			return Math.abs((int)(fontData.getHorizontalHeaderTable().getDescent() * scale));
		} catch (IOException ex) {
			return 0;
		}
	}

	/**
	 * @see java.awt.FontMetrics#getHeight()
	 * @return The height
	 */
	public int getHeight() {
		// TODO Auto-generated method stub
		return super.getHeight();
	}

	/**
	 * @see java.awt.FontMetrics#getLeading()
	 * @return The leading
	 */
	public int getLeading() {
		return super.getLeading();
		// TODO Implement me
	}

	/**
	 * @see java.awt.FontMetrics#getMaxAdvance()
	 * @return The maximum advance
	 */
	public int getMaxAdvance() {
		try {
			return (int)(fontData.getHorizontalHeaderTable().getMaxAdvance() * scale);
		} catch (IOException ex) {
			return 0;
		}
	}

	/**
	 * @see java.awt.FontMetrics#getMaxAscent()
	 * @return The maximum ascent
	 */
	public int getMaxAscent() {
		return getAscent();
	}

	/**
	 * @see java.awt.FontMetrics#getMaxDescent()
	 * @return The maximum descent
	 */
	public int getMaxDescent() {
		return getDescent();
	}

	/**
	 * @see java.awt.FontMetrics#getWidths()
	 * @return The widths
	 */
	public int[] getWidths() {
		// TODO Auto-generated method stub
		return super.getWidths();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?