diff -r 2fa3b88c2b6c modules/graphics/src/main/java/com/sun/javafx/sg/prism/NGCanvas.java --- a/modules/graphics/src/main/java/com/sun/javafx/sg/prism/NGCanvas.java Wed May 21 09:17:20 2014 -0700 +++ b/modules/graphics/src/main/java/com/sun/javafx/sg/prism/NGCanvas.java Wed May 21 11:38:16 2014 -0700 @@ -1296,28 +1296,31 @@ } } if (gr != null) { + float layoutX = 0; + float layoutY = y - yAlign; if (maxWidth > 0.0 && layoutWidth > maxWidth) { float sx = maxWidth / layoutWidth; if (rtl) { - gr.translate(x + maxWidth - xAlign * sx, y - yAlign); + layoutX = -((x + maxWidth) / sx - xAlign); gr.scale(-sx, 1); } else { - gr.translate(x - xAlign * sx, y - yAlign); + layoutX = x / sx - xAlign; gr.scale(sx, 1); } } else { if (rtl) { - gr.translate(x + layoutWidth - xAlign, y - yAlign); + layoutX = -(x - xAlign + layoutWidth); gr.scale(-1, 1); } else { - gr.translate(x - xAlign, y - yAlign); + layoutX = x - xAlign; } } + ngtext.setLayoutLocation(-layoutX, -layoutY); if (token == FILL_TEXT) { ngtext.setMode(NGShape.Mode.FILL); ngtext.setFillPaint(fillPaint); if (fillPaint.getType() == Paint.Type.LINEAR_GRADIENT && fillPaint.isProportional()) { - ngtext.setContentBounds(new RectBounds(0, 0, layoutWidth, layoutHeight)); + ngtext.setContentBounds(new RectBounds(layoutX, layoutY, layoutX + layoutWidth, layoutY + layoutHeight)); } } else { if (strokePaint.getType() == Paint.Type.LINEAR_GRADIENT && strokePaint.isProportional()) {