< prev index next >
src/java.desktop/share/classes/sun/java2d/pipe/GlyphListPipe.java
Print this page
@@ -51,12 +51,12 @@
float devx, devy;
if (sg2d.transformState >= SunGraphics2D.TRANSFORM_TRANSLATESCALE) {
double origin[] = {x + info.originX, y + info.originY};
sg2d.transform.transform(origin, 0, origin, 0, 1);
- devx = (float)origin[0];
- devy = (float)origin[1];
+ devx = (float) closeToHalfInteger(origin[0]);
+ devy = (float) closeToHalfInteger(origin[1]);
} else {
devx = (float)(x + info.originX + sg2d.transX);
devy = (float)(y + info.originY + sg2d.transY);
}
/* setFromString returns false if shaping is needed, and we then back
@@ -73,10 +73,21 @@
sg2d.getFontRenderContext());
tl.draw(sg2d, (float)x, (float)y);
}
}
+ private static final double MAX_TX_ERROR = .0001;
+
+ private static double closeToHalfInteger(double value) {
+ double d = value + 0.5;
+ int i = (int) Math.floor(d + 0.5);
+ if (Math.abs(d - i) < MAX_TX_ERROR) {
+ return i - 0.5;
+ }
+ return value;
+ }
+
public void drawChars(SunGraphics2D sg2d,
char data[], int offset, int length,
int ix, int iy)
{
FontInfo info = sg2d.getFontInfo();
< prev index next >