Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8124821

CSS translates -fx-background-position inappropriately

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • None
    • None
    • javafx

      If you run the attached snippet you'll notice that the CSS version is incorrect for all versions beside "left top".

      package tests;

      import javafx.application.Application;
      import javafx.geometry.Insets;
      import javafx.geometry.Side;
      import javafx.scene.Scene;
      import javafx.scene.control.Label;
      import javafx.scene.image.Image;
      import javafx.scene.layout.Background;
      import javafx.scene.layout.BackgroundImage;
      import javafx.scene.layout.BackgroundPosition;
      import javafx.scene.layout.BackgroundRepeat;
      import javafx.scene.layout.BackgroundSize;
      import javafx.scene.layout.Border;
      import javafx.scene.layout.BorderStroke;
      import javafx.scene.layout.BorderStrokeStyle;
      import javafx.scene.layout.BorderStrokeStyleBuilder;
      import javafx.scene.layout.BorderWidths;
      import javafx.scene.layout.CornerRadii;
      import javafx.scene.layout.HBox;
      import javafx.scene.layout.Pane;
      import javafx.scene.layout.PaneBuilder;
      import javafx.scene.layout.Priority;
      import javafx.scene.layout.VBox;
      import javafx.scene.paint.Color;
      import javafx.stage.Stage;

      public class CSSTest extends Application {

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

          @Override
          public void start(Stage primaryStage) throws Exception {
              VBox box = new VBox();
              HBox p = new HBox();
              
              String defaultStyle = "-fx-background-image: url(\"tests/build.png\");-fx-background-repeat: no-repeat;-fx-border-style: solid;-fx-border-width: 1px;-fx-border-color: black;";
              
              String[] styles = {
                      "-fx-background-position: left 15 top 15;",
                      "-fx-background-position: right 15 top 15;",
                      "-fx-background-position: left 15 bottom 15;",
                      "-fx-background-position: right 15 bottom 15;"
              };
              
              
              for( String style : styles ) {
                  p.getChildren().add(PaneBuilder.create().style(style +defaultStyle).children(new Label(style)).build());
              }
              
              
              VBox.setVgrow(p, Priority.ALWAYS);
              box.getChildren().add(p);
              
              p = new HBox();
              Side[][] sides = {
                      { Side.LEFT, Side.TOP },
                      { Side.RIGHT, Side.TOP },
                      { Side.LEFT, Side.BOTTOM },
                      { Side.RIGHT, Side.BOTTOM }
              };
              
              for( Side[] side : sides ) {
                  Background bg = new Background(
                          new BackgroundImage(new Image(getClass().getResource("build.png").toExternalForm()),
                                  BackgroundRepeat.NO_REPEAT,
                                  BackgroundRepeat.NO_REPEAT,
                                  new BackgroundPosition(side[0], 15, false, side[1], 15, false),
                                  BackgroundSize.DEFAULT));
                  BorderStrokeStyle bs = BorderStrokeStyleBuilder.create().miterLimit(1).build();
                  
                  Border border = new Border(
                          new BorderStroke(Color.BLACK, Color.BLACK, Color.BLACK, Color.BLACK,
                                  bs, bs, bs, bs,CornerRadii.EMPTY, new BorderWidths(2), new Insets(0.0)));
                  Pane pane = PaneBuilder.create().background(bg).border(border).build();
                  pane.getChildren().add(new Label("hello world"));
                  p.getChildren().add(pane);
              }
              
              VBox.setVgrow(p, Priority.ALWAYS);
              box.getChildren().add(p);
              
              Scene s = new Scene(box,400,400);
              s.getStylesheets().add(getClass().getResource("my.css").toExternalForm());
              primaryStage.setScene(s);
              primaryStage.show();
          }
      }

            dgrieve David Grieve
            tschindl Tom Schindl
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: