测试代码:
package taishan;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
@SuppressWarnings("serial")
public class DrawCharsFrame extends TFrame
{
private final static char[] TAISHAN = "泰山".toCharArray();
public BoldFontFrame()
{
this.getContentPane().setBackground(Color.WHITE);
}
@Override
public void paint(Graphics g)
{
super.paint(g);
g2d.drawChars(TAISHAN, 0, TAISHAN.length, 30, 30);
}
public static void main(String[] args)
{
DrawCharsFrame frame = new BoldFontFrame();
frame.setSize(600, 400);
frame.setVisible(true);
}
}
- SunGraphics2D.drawChars
- ValidatePipe.drawChars
- GlyphListPipe.drawChars
实际上是子类SoldTextRenderer/SoldTextRendererAA绘制的。
- SolidTextRenderer.drawGlyphList
- DrawGlyphList.DrawGlyphList
这个是本地函数。
- DrawGlyphList.c
Java_sun_java2d_loops_DrawGlyphList_DrawGlyphList调用drawGlyphList绘制。关键参数是pPrim->funcs.drawglyphlist。
至此,绘制流程就完成了。具体的drawglyphlist是哪个函数,需要分析所在的pPrim(类型NativePrimitive),是怎么初始化的。搞清楚了这个,才知道绘制函数是哪个。
为了方便,把pPrim称之为绘制句柄。