package com.mkalugin.corchy.internal.ui.location;
import org.eclipse.jface.util.Geometry;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
public enum InitialShellPosition {
SYSTEM_DEFAULT {
@Override
public Point calculatePosition(Display display, Shell parent, Point initialSize) {
return null;
}
},
CENTERED {
@Override
public Point calculatePosition(Display display, Shell parent, Point initialSize) {
return calculateCenteredPosition(display, parent, initialSize, 1, 2);
}
},
SHIFTED_CENTERED {
@Override
public Point calculatePosition(Display display, Shell parent, Point initialSize) {
return calculateCenteredPosition(display, parent, initialSize, 2, 3);
}
};
public abstract Point calculatePosition(Display display, Shell parent, Point initialSize);
static Point calculateCenteredPosition(Display display, Shell parent, Point initialSize, int factorA, int factorB) {
Monitor monitor = display.getPrimaryMonitor();
if (parent != null) {
monitor = parent.getMonitor();
}
Rectangle monitorBounds = monitor.getClientArea();
Point centerPoint;
if (parent != null) {
centerPoint = Geometry.centerPoint(parent.getBounds());
} else {
centerPoint = Geometry.centerPoint(monitorBounds);
}
return new Point(centerPoint.x - (initialSize.x / 2), Math.max(
monitorBounds.y, Math.min(centerPoint.y
- (initialSize.y * factorA / factorB), monitorBounds.y
+ monitorBounds.height - initialSize.y)));
}
}