+ children.remove(child);
+ layoutChildren();
+ }
+
+ /**
+ * Reset a child widget's original/preferred size.
+ *
+ * @param child the widget to manage
+ */
+ public void resetSize(final TWidget child) {
+ // For this layout, adding is the same as replacing.
+ add(child);
+ }
+
+ // ------------------------------------------------------------------------
+ // StretchLayoutManager ---------------------------------------------------
+ // ------------------------------------------------------------------------
+
+ /**
+ * Resize/reposition child widgets based on difference between current
+ * dimensions and the original dimensions.
+ */
+ private void layoutChildren() {
+ double widthRatio = (double) width / originalWidth;
+ if (Math.abs(widthRatio) > Double.MAX_VALUE) {
+ widthRatio = 1;
+ }
+ double heightRatio = (double) height / originalHeight;
+ if (Math.abs(heightRatio) > Double.MAX_VALUE) {
+ heightRatio = 1;
+ }
+ for (TWidget child: children.keySet()) {
+ Rectangle rect = children.get(child);
+ child.setDimensions((int) (rect.getX() * widthRatio),
+ (int) (rect.getY() * heightRatio),
+ (int) (rect.getWidth() * widthRatio),
+ (int) (rect.getHeight() * heightRatio));
+ }