package org.eclipse.swt.widgets; import org.eclipse.swt.SWT; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.layout.Pane; class FXLayoutPane extends Pane { private SimpleObjectProperty<Layout> layoutProperty = new SimpleObjectProperty<Layout>(); private Composite composite; public FXLayoutPane(Composite composite) { this.composite = composite; } public void setLayout(Layout layout) { layoutProperty.set(layout); } public Layout getLayout() { return layoutProperty().get(); } public ObjectProperty<Layout> layoutProperty() { return layoutProperty; } @Override protected double computeMinWidth(double height) { if( layoutProperty.get() != null ) { return layoutProperty.get().computeSize(composite, 0, 0, true).x; } return super.computeMinWidth(height); } @Override protected double computeMinHeight(double width) { if( layoutProperty.get() != null ) { return layoutProperty.get().computeSize(composite, 0, 0, true).y; } return super.computeMinHeight(width); } @Override protected double computeMaxHeight(double width) { if( layoutProperty.get() != null ) { return layoutProperty.get().computeSize(composite, Integer.MAX_VALUE, Integer.MAX_VALUE, true).y; } return super.computeMaxHeight(width); } @Override protected double computeMaxWidth(double height) { if( layoutProperty.get() != null ) { return layoutProperty.get().computeSize(composite, Integer.MAX_VALUE, Integer.MAX_VALUE, true).x; } return super.computeMaxWidth(height); } @Override protected double computePrefHeight(double width) { if( layoutProperty.get() != null ) { return layoutProperty.get().computeSize(composite, SWT.DEFAULT, SWT.DEFAULT, true).y; } return super.computePrefHeight(width); } @Override protected double computePrefWidth(double height) { if( layoutProperty.get() != null ) { return layoutProperty.get().computeSize(composite, SWT.DEFAULT, SWT.DEFAULT, true).x; } return super.computePrefWidth(height); } @Override protected void layoutChildren() { if( layoutProperty.get() != null ) { layoutProperty.get().layout(composite, true); // super.layoutChildren(); } else { // super.layoutChildren(); } } }