测试代码:
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称之为绘制句柄。