JDK-8115242 : node's x pivot used for mirror translation is wrong
  • Type: Bug
  • Component: javafx
  • Sub-Component: graphics
  • Affected Version: 8
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2013-01-04
  • Updated: 2015-06-17
  • Resolved: 2013-01-14
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8
8Fixed
Related Reports
Relates :  
Description
See the test case

import javafx.application.*;
import javafx.geometry.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.text.*;
import javafx.stage.*;

public class Hebrew extends Application {

    private static String LONG_HEBREW = "\u05E1\u05D9\u05D5\u05D5\u05D2 \u05D4\u05DB\u05EA\u05D1 \u05D4\u05E2\u05D1\u05E8\u05D9\n\u05D4\u05DB\u05EA\u05D1 \u05D4\u05E2\u05D1\u05E8\u05D9 \u05D4\u05D5\u05D0 \u05D0\u05D1\u05D2\'\u05D3 \u05D0\u05D5 \u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05E2\u05D9\u05E6\u05D5\u05E8\u05D9: \u05DB\u05DC \u05D0\u05D5\u05EA \u05D1\u05D5 \u05DE\u05D9\u05D9\u05E6\u05D2\u05EA \u05E2\u05D9\u05E6\u05D5\u05E8, \u05DC\u05E2\u05EA\u05D9\u05DD \u05D9\u05D5\u05EA\u05E8 \u05DE\u05E2\u05D9\u05E6\u05D5\u05E8 \u05D0\u05D7\u05D3, \u05D5\u05E7\u05D1\u05D5\u05E6\u05EA \u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05E7\u05D8\u05E0\u05D4 \u05D4\u05E7\u05E8\u05D5\u05D9\u05D5\u05EA \u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05E7\u05E8\u05D9\u05D0\u05D4 \u05E2\u05E9\u05D5\u05D9\u05D5\u05EA \u05DC\u05D9\u05D9\u05E6\u05D2 \u05D2\u05DD \u05EA\u05E0\u05D5\u05E2\u05D5\u05EA. \u05D9\u05D9\u05E6\u05D5\u05D2 \u05E9\u05DC\u05DD \u05D5\u05D7\u05D3 \u05DE\u05E9\u05DE\u05E2\u05D9 \u05E9\u05DC \u05D4\u05EA\u05E0\u05D5\u05E2\u05D5\u05EA \u05D5\u05D4\u05E2\u05D9\u05E6\u05D5\u05E8\u05D9\u05DD \u05DE\u05EA\u05D0\u05E4\u05E9\u05E8 \u05E8\u05E7 \u05D1\u05E2\u05D6\u05E8\u05EA \u05D4\u05E0\u05D9\u05E7\u05D5\u05D3, \u05D4\u05D5\u05D0 \u05D0\u05D5\u05E1\u05E3 \u05D4\u05E1\u05D9\u05DE\u05E0\u05D9\u05DD \u05D4\u05D3\u05D9\u05D0\u05E7\u05E8\u05D9\u05D8\u05D9\u05D9\u05DD \u05D4\u05DE\u05EA\u05D5\u05D5\u05E1\u05E4\u05D9\u05DD \u05DC\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05D4\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05D4\u05E2\u05D1\u05E8\u05D9 (\u05DC\u05D4\u05D1\u05D3\u05D9\u05DC \u05DE\u05D4\u05DB\u05EA\u05D1 \u05D4\u05DC\u05D8\u05D9\u05E0\u05D9 \u05DC\u05DE\u05E9\u05DC, \u05E9\u05D4\u05D5\u05D0 \u05DB\u05EA\u05D1 \u05E2\u05D9\u05E6\u05D5\u05E8\u05D9 \u05D1\u05E2\u05DC \u05D7\u05DE\u05E9 \u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05EA\u05E0\u05D5\u05E2\u05D4).\n\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D4 \u05D5\u05D4\u05EA\u05E4\u05EA\u05D7\u05D5\u05EA \u05E9\u05DC \u05D4\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05D4\u05E2\u05D1\u05E8\u05D9\n\u05D4\u05EA\u05E4\u05EA\u05D7\u05D5\u05EA \u05D4\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA\n\u05E4\u05E8\u05E7 \u05D6\u05D4 \u05DC\u05D5\u05E7\u05D4 \u05D1\u05D7\u05E1\u05E8. \u05D0\u05E0\u05D0 \u05EA\u05E8\u05DE\u05D5 \u05DC\u05D5\u05D5\u05D9\u05E7\u05D9\u05E4\u05D3\u05D9\u05D4 \u05D5\u05D4\u05E9\u05DC\u05D9\u05DE\u05D5 \u05D0\u05D5\u05EA\u05D5. \u05D9\u05D9\u05EA\u05DB\u05DF \u05E9\u05EA\u05DE\u05E6\u05D0\u05D5 \u05E4\u05D9\u05E8\u05D5\u05D8 \u05D1\u05D3\u05E3 \u05D4\u05E9\u05D9\u05D7\u05D4.\n\u05DE\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05DB\u05E0\u05E2\u05E0\u05D9 \u05DC\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05E2\u05D1\u05E8\u05D9\n\u05D4\u05DB\u05EA\u05D1 \u05D4\u05E2\u05D1\u05E8\u05D9 \u05D4\u05E7\u05D3\u05D5\u05DD \u05E9\u05E9\u05D9\u05DE\u05E9 \u05E2\u05D3 \u05DC\u05EA\u05E7\u05D5\u05E4\u05EA \u05D1\u05D9\u05EA \u05E9\u05E0\u05D9, \u05D4\u05D5\u05D0 \u05E0\u05D5\u05E1\u05D7 \u05DE\u05E7\u05D5\u05DE\u05D9 \u05E9\u05DC \u05D4\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05D4\u05E4\u05D9\u05E0\u05D9\u05E7\u05D9, \u05E9\u05D1\u05EA\u05D5\u05E8\u05D5 \u05D4\u05EA\u05E4\u05EA\u05D7 \u05DE\u05D4\u05D0\u05DC\u05E4\u05D1\u05D9\u05EA \u05D4\u05E4\u05E8\u05D5\u05D8\u05D5-\u05DB\u05E0\u05E2\u05E0\u05D9. \u05D1\u05DB\u05EA\u05D1 \u05D4\u05E4\u05E8\u05D5\u05D8\u05D5-\u05DB\u05E0\u05E2\u05E0\u05D9 \u05DB\u05DC \u05E6\u05D9\u05D5\u05E8 \u05DE\u05D9\u05D9\u05E6\u05D2 \u05D0\u05EA \u05D4\u05E2\u05D9\u05E6\u05D5\u05E8 \u05E9\u05D1\u05EA\u05D7\u05D9\u05DC\u05EA \u05D4\u05DE\u05D9\u05DC\u05D4 \u05D4\u05DE\u05EA\u05D5\u05D0\u05E8\u05EA \u05D1\u05E6\u05D9\u05D5\u05E8 (\u05D4\u05E2\u05E7\u05E8\u05D5\u05DF \u05D4\u05D0\u05E7\u05E8\u05D5\u05E4\u05D5\u05E0\u05D9). \u05DB\u05DA \u05DC\u05DE\u05E9\u05DC \u05E0\u05D1\u05D7\u05E8 \u05E6\u05D9\u05D5\u05E8 \u05E9\u05DC \u05E8\u05D0\u05E9 \u05DC\u05D9\u05D9\u05E6\u05D2 \u05D0\u05EA \u05D4\u05E6\u05DC\u05D9\u05DC \"\u05E8\"; \u05E6\u05D9\u05D5\u05E8 \u05E9\u05DC \u05E2\u05D9\u05DF \u05DC\u05E6\u05DC\u05D9\u05DC \"\u05E2\", \u05D5\u05DB\u05DA \u05D4\u05DC\u05D0\u05D4. \u05DC\u05EA\u05E0\u05D5\u05E2\u05D5\u05EA \u05DC\u05D0 \u05D9\u05D5\u05D7\u05D3\u05D5 \u05E1\u05D9\u05DE\u05E0\u05D9\u05DD.\n\u05D4\u05DB\u05EA\u05D1 \u05D4\u05DB\u05E0\u05E2\u05E0\u05D9 \u05D4\u05E7\u05D3\u05D5\u05DD \u05D4\u05DC\u05DA \u05D5\u05D4\u05EA\u05E4\u05E9\u05D8 \u05D5\u05E1\u05D9\u05DE\u05E0\u05D9\u05D5 \u05D4\u05D9\u05D5 \u05DE\u05D5\u05DB\u05E8\u05D9\u05DD \u05DB\u05DC \u05DB\u05DA, \u05E2\u05D3 \u05DB\u05D9 \u05D4\u05DE\u05E9\u05EA\u05DE\u05E9\u05D9\u05DD \u05D1\u05D5 \u05D4\u05EA\u05D7\u05D9\u05DC\u05D5 \"\u05DC\u05D4\u05EA\u05E2\u05E6\u05DC\" \u05D1\u05D4\u05E9\u05DC\u05DE\u05EA \u05D4\u05E6\u05D9\u05D5\u05E8\u05D9\u05DD, \u05D5\u05D4\u05E0\u05D9\u05D7\u05D5 \u05DB\u05D9 \u05D4\u05E7\u05D5\u05E8\u05D0 \u05D9\u05D1\u05D9\u05DF \u05D2\u05DD \u05DE\u05EA\u05D5\u05DA \u05E9\u05E8\u05D8\u05D5\u05D8\u05D9\u05DD \u05E1\u05DB\u05DE\u05EA\u05D9\u05D9\u05DD \u05D1\u05D0\u05D9\u05D6\u05D5 \u05D0\u05D5\u05EA \u05DE\u05D3\u05D5\u05D1\u05E8. \u05DB\u05DA, \u05DC\u05DE\u05E9\u05DC, \u05D4\u05E4\u05DA \u05D4\u05E8\u05D0\u05E9 \u05DC\u05DE\u05E9\u05D5\u05DC\u05E9 \u05E2\u05DD \u05E6\u05D5\u05D5\u05D0\u05E8; \u05DB\u05E3 \u05D4\u05D9\u05D3 \u05DE\u05DC\u05D0\u05EA \u05D4\u05D0\u05E6\u05D1\u05E2\u05D5\u05EA \u05D4\u05E4\u05DB\u05D4 \u05DC\u05E9\u05E8\u05D8\u05D5\u05D8 \u05D3\u05DC, \u05D5\u05DE\u05D4\u05D3\u05D2 \u05E0\u05D5\u05EA\u05E8 \u05E8\u05E7 \u05D4\u05D6\u05E0\u05D1. \u05DB\u05E9\u05D4\u05E2\u05D1\u05E8\u05D9\u05DD \u05D0\u05DE\u05E6\u05D5 \u05D0\u05EA \u05D4\u05DB\u05EA\u05D1 \u05D4\u05DB\u05E0\u05E2\u05E0\u05D9 \u05D4\u05DD \u05D4\u05EA\u05E7\u05E9\u05D5 \u05DC\u05D6\u05D4\u05D5\u05EA \u05D7\u05DC\u05E7 \u05DE\u05D4\u05E6\u05D9\u05D5\u05E8\u05D9\u05DD \u05D4\u05DE\u05E7\u05D5\u05E8\u05D9\u05D9\u05DD \u05D5\u05D4\u05E0\u05D9\u05D7\u05D5 \u05DC\u05DE\u05E9\u05DC \u05DB\u05D9 \u05D4\u05E1\u05D9\u05DE\u05DF \u05D4\u05DE\u05EA\u05D0\u05E8 \u05D0\u05EA \u05D4\u05DE\u05D9\u05DC\u05D4 \"\u05D6\u05D4\u05D4\" \u05D4\u05D5\u05D0 \u05DB\u05DC\u05D9 \u05E0\u05E9\u05E7; \u05E9\u05D6\u05E0\u05D1 \u05D4\u05D3\u05D2 \u05D4\u05DE\u05E9\u05D5\u05DC\u05E9 \u05D4\u05D5\u05D0 \u05D3\u05DC\u05EA, \u05D5\u05E9\u05D3\u05D5\u05D5\u05E7\u05D0 \u05D4\u05E0\u05D7\u05E9 \u05D4\u05D5\u05D0 \u05D3\u05D2. \u05DB\u05DA \u05E0\u05D5\u05DC\u05D3\u05D5 \u05E9\u05DE\u05D5\u05EA\u05D9\u05D4\u05DD \u05D4\u05E2\u05D1\u05E8\u05D9\u05D9\u05DD \u05E9\u05DC \u05D4\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05D6\u05D9\"\u05DF, \u05D3\u05DC\"\u05EA \u05D5\u05E0\u05D5\"\u05DF (\u05E0\u05D5\u05DF \u05D4\u05D5\u05D0 \u05D3\u05D2, \u05DB\u05DE\u05D5 \u05D0\u05DE\u05E0\u05D5\u05DF, \u05E9\u05E4\u05DE\u05E0\u05D5\u05DF \u05D5\u05DB\u05D5\').";



    public static void main(String[] args) { launch(args); }

    @Override public void start(Stage stage) {
        VBox rootNode = new VBox(10);
        rootNode.setStyle("-fx-padding: 20;");

        final Text text = new Text();
        text.setText(LONG_HEBREW);
        text.setWrappingWidth(200);

        rootNode.getChildren().add(text);

        Platform.runLater(new Runnable() {
            public void run() {
                System.err.println("layoutX="+text.getLayoutX());
                System.err.println("X in parent=" + text.getBoundsInParent().getMinX());
            }
        });

        Scene scene = new Scene(rootNode);
        scene.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
        stage.setScene(scene);
        stage.show();
    }
}



Comments
Looks nice. Close as verified on 8.0b104
27-08-2013

Fixed: http://jfxsrc.us.oracle.com/javafx/8.0/scrum/graphics/rt-closed/rev/83f6c4ab7650 http://jfxsrc.us.oracle.com/javafx/8.0/scrum/graphics/rt/rev/76c97d9afe5a
14-01-2013

Added temporary workaround for TextArea: http://hg.openjdk.java.net/openjfx/8/controls/rt/rev/c0b48711940e
08-01-2013

I tested again this morning and I can't see the problem on HelloTextArea anymore. Here is the webrev http://jfx.us.oracle.com/shared-webrev/felipe/RT-27533/webrev/
07-01-2013

no, I'm not. I tested it twice...
04-01-2013

Yes, it did fix the alignment in TextArea and the caret showed in the correct position. Are you not seeing that in your build?
04-01-2013

Leif, the fix I showed you does fix the testcase above but does not fix the case in HelloTextArea (caret off). Can you please confirm that ?
04-01-2013

result: layoutX=20.0 X in parent=17.8017578125 expected: layoutX=20.0 X in parent=20.0
04-01-2013