6697721: OpenJDK: rotated text baseline different between TextLayout and drawString

Reviewed-by: prr, igor
This commit is contained in:
Douglas Felt 2008-05-13 16:56:22 -07:00 committed by Phil Race
parent 8011082abf
commit 33dda32d9c
2 changed files with 29 additions and 6 deletions

View File

@ -368,7 +368,7 @@ Java_sun_font_FreetypeFontScaler_createScalerContextNative(
//text can not be smaller than 1 point
ptsz = 1.0;
}
context->ptsz = (((int) ptsz) << 6);
context->ptsz = (int)(ptsz * 64);
context->transform.xx = FloatToFTFixed((float)dmat[0]/ptsz);
context->transform.yx = -FloatToFTFixed((float)dmat[1]/ptsz);
context->transform.xy = -FloatToFTFixed((float)dmat[2]/ptsz);
@ -779,13 +779,24 @@ Java_sun_font_FreetypeFontScaler_getGlyphImageNative(
}
if (context->fmType == TEXT_FM_ON) {
glyphInfo->advanceX = FT26Dot6ToFloat(ftglyph->advance.x);
glyphInfo->advanceY = FT26Dot6ToFloat(-ftglyph->advance.y);
} else {
double advh = FTFixedToFloat(ftglyph->linearHoriAdvance);
glyphInfo->advanceX =
(float) ROUND(FT26Dot6ToFloat(ftglyph->advance.x));
(float) (advh * FTFixedToFloat(context->transform.xx));
glyphInfo->advanceY =
(float) ROUND(FT26Dot6ToFloat(-ftglyph->advance.y));
(float) (advh * FTFixedToFloat(context->transform.xy));
} else {
if (!ftglyph->advance.y) {
glyphInfo->advanceX =
(float) ROUND(FT26Dot6ToFloat(ftglyph->advance.x));
glyphInfo->advanceY = 0;
} else if (!ftglyph->advance.x) {
glyphInfo->advanceX = 0;
glyphInfo->advanceY =
(float) ROUND(FT26Dot6ToFloat(-ftglyph->advance.y));
} else {
glyphInfo->advanceX = FT26Dot6ToFloat(ftglyph->advance.x);
glyphInfo->advanceY = FT26Dot6ToFloat(-ftglyph->advance.y);
}
}
if (imageSize == 0) {

View File

@ -38,12 +38,24 @@ public class RotTransText {
public static void main(String[] args) {
testIt(false);
testIt(true);
}
public static void testIt(boolean fmOn) {
int wid=400, hgt=400;
BufferedImage bi =
new BufferedImage(wid, hgt, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bi.createGraphics();
if (fmOn) {
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
}
int x=130, y=130;
String s = "Text";