def makePositioner(self, reference): # Use two widgets so that setPixelSize() consistently affects dimensions # excluding positioner border in quirks and strict modes SimplePanel outer = SimplePanel() outer.addStyleName(CSS_DRAGDROP_POSITIONER) DOM.setStyleAttribute(outer.getElement(), "margin", "0px") # place off screen for border calculation RootPanel.get().add(outer, -500, -500) # Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid # DOMUtil.getVerticalBorders(outer) outer.setWidget(DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) SimplePanel inner = SimplePanel() DOM.setStyleAttribute(inner.getElement(), "margin", "0px") DOM.setStyleAttribute(inner.getElement(), "border", "none") int offsetWidth = reference.getOffsetWidth() - DOMUtil.getHorizontalBorders(outer) int offsetHeight = reference.getOffsetHeight() - DOMUtil.getVerticalBorders(outer) inner.setPixelSize(offsetWidth, offsetHeight) outer.setWidget(inner) return outer
# Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid # DOMUtil.getVerticalBorders(outer) outer.setWidget(DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) int width = 0 int height = 0 if dropTarget instanceof HorizontalPanel: for Iterator iterator = context.selectedWidgets.iterator(); iterator.hasNext();: Widget widget = (Widget) iterator.next() width += widget.getOffsetWidth() height = Math.max(height, widget.getOffsetHeight()) else: for Iterator iterator = context.selectedWidgets.iterator(); iterator.hasNext();: Widget widget = (Widget) iterator.next() width = Math.max(width, widget.getOffsetWidth()) height += widget.getOffsetHeight() SimplePanel inner = SimplePanel() inner.setPixelSize(width - DOMUtil.getHorizontalBorders(outer), height - DOMUtil.getVerticalBorders(outer)) outer.setWidget(inner) return outer