// Path: src/main/java/com/github/haixing_hu/javafx/geometry/Size.java
// public class Size {
// 
//   public double width;
// 
//   public double height;
// 
//   public Size() {
//     width = 0;
//     height = 0;
//   }
// 
//   public Size(double width, double height) {
//     this.width = width;
//     this.height = height;
//   }
// 
//   @Override
//   public int hashCode() {
//     final int prime = 31;
//     int result = 1;
//     long temp;
//     temp = Double.doubleToLongBits(height);
//     result = (prime * result) + (int) (temp ^ (temp >>> 32));
//     temp = Double.doubleToLongBits(width);
//     result = (prime * result) + (int) (temp ^ (temp >>> 32));
//     return result;
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if (this == obj) {
//       return true;
//     }
//     if (obj == null) {
//       return false;
//     }
//     if (getClass() != obj.getClass()) {
//       return false;
//     }
//     final Size other = (Size) obj;
//     if (Double.doubleToLongBits(height) != Double
//         .doubleToLongBits(other.height)) {
//       return false;
//     }
//     if (Double.doubleToLongBits(width) != Double.doubleToLongBits(other.width)) {
//       return false;
//     }
//     return true;
//   }
// 
//   @Override
//   public String toString() {
//     return "Size [width=" + width + ", height=" + height + "]";
//   }
// 
// }


import java.util.WeakHashMap;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.WritableIntegerValue;
import javafx.beans.value.WritableObjectValue;
import javafx.geometry.Bounds;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import com.github.haixing_hu.javafx.geometry.Size;

  public WritableObjectValue<Orientation> orientationProperty() {
    return orientation;
  }

  public void setMarginWidth(int marginWidth) {
    this.marginWidth.set(marginWidth);
  }

  public int getMarginWidth() {
    return marginWidth.get();
  }

  public WritableIntegerValue marginHeightProperty() {
    return marginHeight;
  }

  public void setMarginHeight(int marginHeight) {
    this.marginHeight.set(marginHeight);
  }

  public int getMarginHeight() {
    return marginHeight.get();
  }

  public WritableIntegerValue marginWidthProperty() {
    return marginWidth;
  }

  @Override
// Path: src/main/java/com/github/haixing_hu/javafx/geometry/Size.java
// public class Size {
// 
//   public double width;
// 
//   public double height;
// 
//   public Size() {
//     width = 0;
//     height = 0;
//   }
// 
//   public Size(double width, double height) {
//     this.width = width;
//     this.height = height;
//   }
// 
//   @Override
//   public int hashCode() {
//     final int prime = 31;
//     int result = 1;
//     long temp;
//     temp = Double.doubleToLongBits(height);
//     result = (prime * result) + (int) (temp ^ (temp >>> 32));
//     temp = Double.doubleToLongBits(width);
//     result = (prime * result) + (int) (temp ^ (temp >>> 32));
//     return result;
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if (this == obj) {
//       return true;
//     }
//     if (obj == null) {
//       return false;
//     }
//     if (getClass() != obj.getClass()) {
//       return false;
//     }
//     final Size other = (Size) obj;
//     if (Double.doubleToLongBits(height) != Double
//         .doubleToLongBits(other.height)) {
//       return false;
//     }
//     if (Double.doubleToLongBits(width) != Double.doubleToLongBits(other.width)) {
//       return false;
//     }
//     return true;
//   }
// 
//   @Override
//   public String toString() {
//     return "Size [width=" + width + ", height=" + height + "]";
//   }
// 
// }


// Path: src/main/java/com/github/haixing_hu/javafx/pane/FillPane.java
import java.util.WeakHashMap;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.WritableIntegerValue;
import javafx.beans.value.WritableObjectValue;
import javafx.geometry.Bounds;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import com.github.haixing_hu.javafx.geometry.Size;


  public WritableObjectValue<Orientation> orientationProperty() {
    return orientation;
  }

  public void setMarginWidth(int marginWidth) {
    this.marginWidth.set(marginWidth);
  }

  public int getMarginWidth() {
    return marginWidth.get();
  }

  public WritableIntegerValue marginHeightProperty() {
    return marginHeight;
  }

  public void setMarginHeight(int marginHeight) {
    this.marginHeight.set(marginHeight);
  }

  public int getMarginHeight() {
    return marginHeight.get();
  }

  public WritableIntegerValue marginWidthProperty() {
    return marginWidth;
  }

  @Override
  protected Size computeSize(double wHint, double hHint, boolean flushCache) {