diff -r 1d4088f0fa62 javafx-font/src/com/sun/javafx/text/TextLayout.java --- a/javafx-font/src/com/sun/javafx/text/TextLayout.java Mon Nov 19 20:08:52 2012 -0800 +++ b/javafx-font/src/com/sun/javafx/text/TextLayout.java Tue Nov 20 16:49:34 2012 -0800 @@ -888,6 +888,11 @@ for (int j = runCount; j < runs.length; j++) { runs[j] = null; } + if (bidi != null) { + if (!bidi.baseIsLeftToRight()) { + flags |= FLAGS_RTL_BASE; + } + } flags |= FLAGS_ANALYSIS_VALID; } @@ -1261,10 +1266,25 @@ linesList.toArray(lines); float fullWidth = Math.max(wrapWidth, layoutWidth); - float align = 0; float lineY = 0; + boolean rtl = false; + int dir = flags & DIRECTION_MASK; + switch (dir) { + case DIRECTION_RTL: rtl = true; break; + case DIRECTION_LTR: rtl = false; break; + case DIRECTION_DEFAULT_LTR: + case DIRECTION_DEFAULT_RTL: + rtl = (flags & FLAGS_RTL_BASE) != 0; + } + float align; + if (rtl) { + align = 1; /* Left and Justify */ + if (textAlignment == ALIGN_RIGHT) align = 0; + } else { + align = 0; /* Left and Justify */ + if (textAlignment == ALIGN_RIGHT) align = 1; + } if (textAlignment == ALIGN_CENTER) align = 0.5f; - if (textAlignment == ALIGN_RIGHT) align = 1; for (int i = 0; i < lines.length; i++) { TextLine line = lines[i]; int lineStart = line.getStart();