JDK:字体大小是如何生效的

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK:字体大小是如何生效的相关的知识,希望对你有一定的参考价值。

  • Font()

传递字号,保存在size字段中。

  • Font.deriveFont()

调用一个私有浮点构造器。从这里可以看到,JDK是支持浮点字体的。

泰山JDK为此专门修改,开放并扩充了构造函数,允许传递浮点。

pointSize的命名,疑似不准确。这里应该是像素?或者是FreeType的磅?

  • Font.getSize2D()

获得浮点字号。

  • SunGraphics2D.checkFontInfo()
        AffineTransform devAt, textAt=null;
        if (font.isTransformed()) 
            textAt = font.getTransform();
            textAt.scale(ptSize, ptSize);

也就是构造了一个变形器。

  • Font2D(TrueTypeFont).getStrike()
  • FontStrikeDesc()
  • FileFontStrike()
double[] matrix = new double[4];
AffineTransform at = desc.glyphTx;
at.getMatrix(matrix);

字号信息保存在matrix中 

  • createScalerContextXY()
  • Java_sun_font_FreetypeFontScaler_createScalerContextNative

freetypeScaler.c

从传递的参数matrix中获取数组。

ptsz = euclidianDistance(dmat[2], dmat[3]);

context->ptsz         = (int)(ptsz * 64);

  • setupFTContext

FT_Set_Char_Size(scalerInfo->face, 0, context->ptsz, 72, 72);

这个函数需要的字号有6位定点小数,所以前面乘64。

以上是关于JDK:字体大小是如何生效的的主要内容,如果未能解决你的问题,请参考以下文章

JDK:Font.canDisplay()是如何生效的

设置安卓字体大小,不跟随系统

如何调整eclipse字体大小

myeclipse怎么调字体大小

WPS的字体大小

是否可以编辑 UIAlertAction 标题字体大小和样式?