0
点赞
收藏
分享

微信扫一扫

全网首发:JDK绘制文字:二、绘制句柄的初始化流程


接上文

​​全网首发:JDK绘制文字一:绘制流程_柳鲲鹏的博客​​

  现在来分析,​绘制句柄​是如何初始化的。

  • GraphicsPrimitiveMgr.c

  在GetNativePrim()中可以看到,​绘制句柄​是通过反射得到的(对应的变量pNativePrimID,则由反射JAVA字段pNativePrim得到的)。

  问题就变成了:​绘制句柄​是如何初始化和传递的?

  • DrawGlyphList.java

  是GraphicsPrimitive.java的子类,​绘制句柄​pNativePrim是GraphicsPrimitive的字段。

  DrawGlyphList构造函数中收到此参数,传递给父类GraphicsPrimitive完成初始化。

  • GraphicsPrimitiveMgr.java

  在静态块中,调用本地函数registerNativeLoops()。

  提前说明,在registerNativeLoops(),又层层调用到NativePrimitive,通过反射调回JAVA,即DrawGlyphList构造函数。

  • GraphicsPrimitiveMgr.c

  Java_sun_java2d_loops_GraphicsPrimitiveMgr_registerNativeLoops,声明了各种格式的RegisterFunc,然后逐个调用进行初始化(这就是loops名字的原因)。从六石编程学来说,应该想办法使用数组。

  以bitmpa来说,应该是RegisterByteBinary1Bit()。我们以此为例,继续分析流程。

  • ByteBinary1Bit.c

声明了本格式的绘制句柄,ByteBinary1BitPrimitives。

调用RegisterPrimitives,传递参数​绘制句柄​ByteBinary1BitPrimitives。

  • GraphicsPrimitiveMgr.c

NativePrimitive:

  新建了JAVA数组primitives。

  通过for()循环,对绘制句柄的各个函数进行初始化(具体未分析),产生新JAVA对象prim(此处回调到JAVA的DrawGlyphList构造函数,传递参数绘制句柄pPrim。参考registerNativeLoops),然后把设置到primitives中。

  最后把primitives传递到JAVA层,判断为GraphicsPrimitiveMgr的register()。

  至此,​绘制句柄​初始化流程完成。



举报

相关推荐

0 条评论