afterShow();
}
protected Point position() {
Size viewport = XDOM.getViewportSize();
int scrollLeft = XDOM.getBodyScrollLeft();
int scrollTop = XDOM.getBodyScrollTop();
int margin = config.getMargin();
int left = 0;
int top = 0;
switch (config.getPosition()) {
case TOP_LEFT:
if (topLeft.size() == 0) {
left = margin + scrollLeft;
top = margin;
} else {
Info prev = topLeft.peek();
top = prev.getAbsoluteTop() + prev.getOffsetHeight() + margin;
left = prev.getAbsoluteLeft();
int bottom = top + getOffsetHeight();
if (bottom > viewport.getHeight()) {
top = config.getMargin();
left = prev.getAbsoluteLeft() + config.getWidth() + margin + scrollLeft;
}
}
topLeft.add(this);
break;
case TOP_RIGHT:
if (topRight.size() == 0) {
left = viewport.getWidth() - config.getWidth() - margin + scrollLeft;
top = config.getMargin();
} else {
Info prev = topRight.peek();
top = prev.getAbsoluteTop() + prev.getOffsetHeight() + margin;
left = prev.getAbsoluteLeft();
int bottom = top + getOffsetHeight();
if (bottom > viewport.getHeight()) {
top = margin;
left = prev.getAbsoluteLeft() - config.getWidth() - margin + scrollLeft;
}
}
topRight.add(this);
break;
case BOTTOM_LEFT: {
int height = config.getHeight() == -1 ? getOffsetHeight() : config.getHeight();
if (bottomLeft.size() == 0) {
top = viewport.getHeight() - height - margin + scrollTop;
left = margin + scrollLeft;
} else {
Info prev = bottomLeft.peek();
left = prev.getAbsoluteLeft() + scrollLeft;
top = prev.getAbsoluteTop() - height - margin;
if (top < 0) {
top = viewport.getHeight() - height - margin + scrollTop;
left = prev.getAbsoluteLeft() + prev.getOffsetWidth() + margin + scrollLeft;
}
}
bottomLeft.add(this);
}
break;
case BOTTOM_RIGHT: {
int height = config.getHeight() == -1 ? getOffsetHeight() : config.getHeight();
if (bottomRight.size() == 0) {
top = viewport.getHeight() - height - margin - XDOM.getBodyScrollTop();
left = viewport.getWidth() - config.getWidth() - margin + scrollLeft - XDOM.getScrollBarWidth();
} else {
Info prev = bottomRight.peek();
top = prev.getAbsoluteTop() - height - margin;
left = prev.getAbsoluteLeft() + scrollLeft;
if (top < 0) {
top = viewport.getHeight() - height - margin + scrollTop;
left = prev.getAbsoluteLeft() - prev.getOffsetWidth() - margin + scrollLeft;
}
}
bottomRight.add(this);
}