--- old/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java 2017-08-28 16:48:31.057663167 +0200 +++ new/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java 2017-08-28 16:48:30.841663170 +0200 @@ -47,6 +47,9 @@ static final int SUBPIXEL_MASK_X = SUBPIXEL_POSITIONS_X - 1; static final int SUBPIXEL_MASK_Y = SUBPIXEL_POSITIONS_Y - 1; + static final float RDR_OFFSET_X = 0.501f / SUBPIXEL_SCALE_X; + static final float RDR_OFFSET_Y = 0.501f / SUBPIXEL_SCALE_Y; + // number of subpixels corresponding to a tile line private static final int SUBPIXEL_TILE = TILE_H << SUBPIXEL_LG_POSITIONS_Y; @@ -672,7 +675,7 @@ } @Override - public void moveTo(float pix_x0, float pix_y0) { + public void moveTo(final float pix_x0, final float pix_y0) { closePath(); final float sx = tosubpixx(pix_x0); final float sy = tosubpixy(pix_y0); @@ -683,7 +686,7 @@ } @Override - public void lineTo(float pix_x1, float pix_y1) { + public void lineTo(final float pix_x1, final float pix_y1) { final float x1 = tosubpixx(pix_x1); final float y1 = tosubpixy(pix_y1); addLine(x0, y0, x1, y1); @@ -692,24 +695,26 @@ } @Override - public void curveTo(float x1, float y1, - float x2, float y2, - float x3, float y3) + public void curveTo(final float pix_x1, final float pix_y1, + final float pix_x2, final float pix_y2, + final float pix_x3, final float pix_y3) { - final float xe = tosubpixx(x3); - final float ye = tosubpixy(y3); - curve.set(x0, y0, tosubpixx(x1), tosubpixy(y1), - tosubpixx(x2), tosubpixy(y2), xe, ye); + final float xe = tosubpixx(pix_x3); + final float ye = tosubpixy(pix_y3); + curve.set(x0, y0, tosubpixx(pix_x1), tosubpixy(pix_y1), + tosubpixx(pix_x2), tosubpixy(pix_y2), xe, ye); curveBreakIntoLinesAndAdd(x0, y0, curve, xe, ye); x0 = xe; y0 = ye; } @Override - public void quadTo(float x1, float y1, float x2, float y2) { - final float xe = tosubpixx(x2); - final float ye = tosubpixy(y2); - curve.set(x0, y0, tosubpixx(x1), tosubpixy(y1), xe, ye); + public void quadTo(final float pix_x1, final float pix_y1, + final float pix_x2, final float pix_y2) + { + final float xe = tosubpixx(pix_x2); + final float ye = tosubpixy(pix_y2); + curve.set(x0, y0, tosubpixx(pix_x1), tosubpixy(pix_y1), xe, ye); quadBreakIntoLinesAndAdd(x0, y0, curve, xe, ye); x0 = xe; y0 = ye; @@ -717,9 +722,11 @@ @Override public void closePath() { - addLine(x0, y0, sx0, sy0); - x0 = sx0; - y0 = sy0; + if (x0 != sx0 || y0 != sy0) { + addLine(x0, y0, sx0, sy0); + x0 = sx0; + y0 = sy0; + } } @Override