private void collapseTopMargin( LayoutContext c, boolean calculationRoot, MarginCollapseResult result) { if (! isTopMarginCalculated()) { if (! isSkipWhenCollapsingMargins()) { calcDimensions(c); RectPropertySet margin = getMargin(c); result.update((int) margin.top()); if (! calculationRoot && (int) margin.top() != 0) { setMarginTop(c, 0); } if (isMayCollapseMarginsWithChildren() && isNoTopPaddingOrBorder(c)) { ensureChildren(c); if (getChildrenContentType() == CONTENT_BLOCK) { for (Iterator i = getChildIterator(); i.hasNext();) { BlockBox child = (BlockBox) i.next(); child.collapseTopMargin(c, false, result); if (child.isSkipWhenCollapsingMargins()) { continue; } break; } } } } setTopMarginCalculated(true); } }
private void collapseBottomMargin( LayoutContext c, boolean calculationRoot, MarginCollapseResult result) { if (! isBottomMarginCalculated()) { if (! isSkipWhenCollapsingMargins()) { calcDimensions(c); RectPropertySet margin = getMargin(c); result.update((int) margin.bottom()); if (! calculationRoot && (int) margin.bottom() != 0) { setMarginBottom(c, 0); } if (isMayCollapseMarginsWithChildren() && ! getStyle().isTable() && isNoBottomPaddingOrBorder(c)) { ensureChildren(c); if (getChildrenContentType() == CONTENT_BLOCK) { for (int i = getChildCount() - 1; i >= 0; i--) { BlockBox child = (BlockBox) getChild(i); if (child.isSkipWhenCollapsingMargins()) { continue; } child.collapseBottomMargin(c, false, result); break; } } } } setBottomMarginCalculated(true); } }
private void collapseMargins(LayoutContext c) { if (! isTopMarginCalculated() || ! isBottomMarginCalculated()) { recalcMargin(c); RectPropertySet margin = getMargin(c); if (! isTopMarginCalculated() && ! isBottomMarginCalculated() && isVerticalMarginsAdjoin(c)) { MarginCollapseResult collapsedMargin = _pendingCollapseCalculation != null ? _pendingCollapseCalculation : new MarginCollapseResult(); collapseEmptySubtreeMargins(c, collapsedMargin); setCollapsedBottomMargin(c, margin, collapsedMargin); } else { if (! isTopMarginCalculated()) { MarginCollapseResult collapsedMargin = _pendingCollapseCalculation != null ? _pendingCollapseCalculation : new MarginCollapseResult(); collapseTopMargin(c, true, collapsedMargin); if ((int) margin.top() != collapsedMargin.getMargin()) { setMarginTop(c, collapsedMargin.getMargin()); } } if (! isBottomMarginCalculated()) { MarginCollapseResult collapsedMargin = new MarginCollapseResult(); collapseBottomMargin(c, true, collapsedMargin); setCollapsedBottomMargin(c, margin, collapsedMargin); } } } }
private void collapseBottomMargin( LayoutContext c, boolean calculationRoot, MarginCollapseResult result) { if (! isBottomMarginCalculated()) { if (! isSkipWhenCollapsingMargins()) { calcDimensions(c); RectPropertySet margin = getMargin(c); result.update((int) margin.bottom()); if (! calculationRoot && (int) margin.bottom() != 0) { setMarginBottom(c, 0); } if (isMayCollapseMarginsWithChildren() && ! getStyle().isTable() && isNoBottomPaddingOrBorder(c)) { ensureChildren(c); if (getChildrenContentType() == CONTENT_BLOCK) { for (int i = getChildCount() - 1; i >= 0; i--) { BlockBox child = (BlockBox) getChild(i); if (child.isSkipWhenCollapsingMargins()) { continue; } child.collapseBottomMargin(c, false, result); break; } } } } setBottomMarginCalculated(true); } }
private void collapseTopMargin( LayoutContext c, boolean calculationRoot, MarginCollapseResult result) { if (! isTopMarginCalculated()) { if (! isSkipWhenCollapsingMargins()) { calcDimensions(c); RectPropertySet margin = getMargin(c); result.update((int) margin.top()); if (! calculationRoot && (int) margin.top() != 0) { setMarginTop(c, 0); } if (isMayCollapseMarginsWithChildren() && isNoTopPaddingOrBorder(c)) { ensureChildren(c); if (getChildrenContentType() == CONTENT_BLOCK) { for (Iterator i = getChildIterator(); i.hasNext();) { BlockBox child = (BlockBox) i.next(); child.collapseTopMargin(c, false, result); if (child.isSkipWhenCollapsingMargins()) { continue; } break; } } } } setTopMarginCalculated(true); } }
private void collapseMargins(LayoutContext c) { if (! isTopMarginCalculated() || ! isBottomMarginCalculated()) { recalcMargin(c); RectPropertySet margin = getMargin(c); if (! isTopMarginCalculated() && ! isBottomMarginCalculated() && isVerticalMarginsAdjoin(c)) { MarginCollapseResult collapsedMargin = _pendingCollapseCalculation != null ? _pendingCollapseCalculation : new MarginCollapseResult(); collapseEmptySubtreeMargins(c, collapsedMargin); setCollapsedBottomMargin(c, margin, collapsedMargin); } else { if (! isTopMarginCalculated()) { MarginCollapseResult collapsedMargin = _pendingCollapseCalculation != null ? _pendingCollapseCalculation : new MarginCollapseResult(); collapseTopMargin(c, true, collapsedMargin); if ((int) margin.top() != collapsedMargin.getMargin()) { setMarginTop(c, collapsedMargin.getMargin()); } } if (! isBottomMarginCalculated()) { MarginCollapseResult collapsedMargin = new MarginCollapseResult(); collapseBottomMargin(c, true, collapsedMargin); setCollapsedBottomMargin(c, margin, collapsedMargin); } } } }
private void collapseEmptySubtreeMargins(LayoutContext c, MarginCollapseResult result) { RectPropertySet margin = getMargin(c); result.update((int) margin.top()); result.update((int) margin.bottom()); setMarginTop(c, 0); setTopMarginCalculated(true); setMarginBottom(c, 0); setBottomMarginCalculated(true); ensureChildren(c); if (getChildrenContentType() == CONTENT_BLOCK) { for (Iterator i = getChildIterator(); i.hasNext();) { BlockBox child = (BlockBox) i.next(); child.collapseEmptySubtreeMargins(c, result); } } }
private void collapseEmptySubtreeMargins(LayoutContext c, MarginCollapseResult result) { RectPropertySet margin = getMargin(c); result.update((int) margin.top()); result.update((int) margin.bottom()); setMarginTop(c, 0); setTopMarginCalculated(true); setMarginBottom(c, 0); setBottomMarginCalculated(true); ensureChildren(c); if (getChildrenContentType() == CONTENT_BLOCK) { for (Iterator i = getChildIterator(); i.hasNext();) { BlockBox child = (BlockBox) i.next(); child.collapseEmptySubtreeMargins(c, result); } } }
private BlockBox getNextCollapsableSibling(MarginCollapseResult collapsedMargin) { BlockBox next = (BlockBox) getNextSibling(); while (next != null) { if (next instanceof AnonymousBlockBox) { ((AnonymousBlockBox) next).provideSiblingMarginToFloats( collapsedMargin.getMargin()); } if (! next.isSkipWhenCollapsingMargins()) { break; } else { next = (BlockBox) next.getNextSibling(); } } return next; }
private BlockBox getNextCollapsableSibling(MarginCollapseResult collapsedMargin) { BlockBox next = (BlockBox) getNextSibling(); while (next != null) { if (next instanceof AnonymousBlockBox) { ((AnonymousBlockBox) next).provideSiblingMarginToFloats( collapsedMargin.getMargin()); } if (! next.isSkipWhenCollapsingMargins()) { break; } else { next = (BlockBox) next.getNextSibling(); } } return next; }
private void setCollapsedBottomMargin(LayoutContext c, RectPropertySet margin, MarginCollapseResult collapsedMargin) { BlockBox next = null; if (! isInline()) { next = getNextCollapsableSibling(collapsedMargin); } if (! (next == null || next instanceof AnonymousBlockBox) && collapsedMargin.hasMargin()) { next._pendingCollapseCalculation = collapsedMargin; setMarginBottom(c, 0); } else if ((int) margin.bottom() != collapsedMargin.getMargin()) { setMarginBottom(c, collapsedMargin.getMargin()); } }
private void setCollapsedBottomMargin(LayoutContext c, RectPropertySet margin, MarginCollapseResult collapsedMargin) { BlockBox next = null; if (! isInline()) { next = getNextCollapsableSibling(collapsedMargin); } if (! (next == null || next instanceof AnonymousBlockBox) && collapsedMargin.hasMargin()) { next._pendingCollapseCalculation = collapsedMargin; setMarginBottom(c, 0); } else if ((int) margin.bottom() != collapsedMargin.getMargin()) { setMarginBottom(c, collapsedMargin.getMargin()); } }