mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-11 22:19:43 +00:00
6697721: OpenJDK: rotated text baseline different between TextLayout and drawString
Reviewed-by: prr, igor
This commit is contained in:
parent
8011082abf
commit
33dda32d9c
@ -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) {
|
||||
|
||||
@ -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";
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user