public VerticalAlignContext createChild(Box root) { VerticalAlignContext result = new VerticalAlignContext(); VerticalAlignContext vaRoot = getRoot(); result.setParent(vaRoot); InlineBoxMeasurements initial = (InlineBoxMeasurements)vaRoot._measurements.get(0); result.pushMeasurements(initial); if (vaRoot._children == null) { vaRoot._children = new ArrayList(); } vaRoot._children.add(new ChildContextData(root, result)); return result; }
private void merge(VerticalAlignContext context) { updateInlineBottom(context.getInlineBottom()); updateInlineTop(context.getInlineTop()); updatePaintingBottom(context.getPaintingBottom()); updatePaintingTop(context.getPaintingTop()); }
} else { FSFontMetrics strutM = container.getStyle().getFSFontMetrics(c); VerticalAlignContext vaContext = new VerticalAlignContext(); InlineBoxMeasurements measurements = getInitialMeasurements(c, container, strutM); vaContext.setInitialMeasurements(measurements); vaContext.alignChildren(); current.setHeight(vaContext.getLineBoxHeight()); int paintingTop = vaContext.getPaintingTop(); int paintingBottom = vaContext.getPaintingBottom(); if (vaContext.getInlineTop() < 0) { moveLineContents(current, -vaContext.getInlineTop()); if (lBDecorations != null) { for (Iterator i = lBDecorations.iterator(); i.hasNext(); ) { TextDecoration lBDecoration = (TextDecoration)i.next(); lBDecoration.setOffset(lBDecoration.getOffset() - vaContext.getInlineTop()); paintingTop -= vaContext.getInlineTop(); paintingBottom -= vaContext.getInlineTop(); strutMetrics.setBaseline(measurements.getBaseline() - vaContext.getInlineTop()); markerData.setReferenceLine(current); current.setMarkerData(markerData); current.setBaseline(measurements.getBaseline() - vaContext.getInlineTop());
public void alignChildren() { List children = getChildren(); for (int i = 0; i < children.size(); i++) { ChildContextData data = (ChildContextData)children.get(i); data.align(); merge(data.getVerticalAlignContext()); } }
public void align() { IdentValue vAlign = _root.getStyle().getIdent( CSSName.VERTICAL_ALIGN); int delta = 0; if (vAlign == IdentValue.TOP) { delta = _verticalAlignContext.getRoot().getInlineTop() - _verticalAlignContext.getInlineTop(); } else if (vAlign == IdentValue.BOTTOM) { delta = _verticalAlignContext.getRoot().getInlineBottom() - _verticalAlignContext.getInlineBottom(); } else { throw new RuntimeException("internal error"); } _verticalAlignContext.moveTrackedValues(delta); moveContextContents(delta); } }
private static void positionInlineContentVertically(LayoutContext c, VerticalAlignContext vaContext, Box child) { VerticalAlignContext vaTarget = vaContext; if (! child.getStyle().isLength(CSSName.VERTICAL_ALIGN)) { IdentValue vAlign = child.getStyle().getIdent( CSSName.VERTICAL_ALIGN); if (vAlign == IdentValue.TOP || vAlign == IdentValue.BOTTOM) { vaTarget = vaContext.createChild(child); } } if (child instanceof InlineLayoutBox) { InlineLayoutBox iB = (InlineLayoutBox) child; positionInlineVertically(c, vaTarget, iB); } else { // any other Box class positionInlineBlockVertically(c, vaTarget, (BlockBox)child); } }
} else { FSFontMetrics strutM = container.getStyle().getFSFontMetrics(c); VerticalAlignContext vaContext = new VerticalAlignContext(); InlineBoxMeasurements measurements = getInitialMeasurements(c, container, strutM); vaContext.setInitialMeasurements(measurements); vaContext.alignChildren(); current.setHeight(vaContext.getLineBoxHeight()); int paintingTop = vaContext.getPaintingTop(); int paintingBottom = vaContext.getPaintingBottom(); if (vaContext.getInlineTop() < 0) { moveLineContents(current, -vaContext.getInlineTop()); if (lBDecorations != null) { for (Iterator i = lBDecorations.iterator(); i.hasNext(); ) { TextDecoration lBDecoration = (TextDecoration)i.next(); lBDecoration.setOffset(lBDecoration.getOffset() - vaContext.getInlineTop()); paintingTop -= vaContext.getInlineTop(); paintingBottom -= vaContext.getInlineTop(); strutMetrics.setBaseline(measurements.getBaseline() - vaContext.getInlineTop()); markerData.setReferenceLine(current); current.setMarkerData(markerData); current.setBaseline(measurements.getBaseline() - vaContext.getInlineTop());
public void alignChildren() { List children = getChildren(); for (int i = 0; i < children.size(); i++) { ChildContextData data = (ChildContextData)children.get(i); data.align(); merge(data.getVerticalAlignContext()); } }
public void align() { IdentValue vAlign = _root.getStyle().getIdent( CSSName.VERTICAL_ALIGN); int delta = 0; if (vAlign == IdentValue.TOP) { delta = _verticalAlignContext.getRoot().getInlineTop() - _verticalAlignContext.getInlineTop(); } else if (vAlign == IdentValue.BOTTOM) { delta = _verticalAlignContext.getRoot().getInlineBottom() - _verticalAlignContext.getInlineBottom(); } else { throw new RuntimeException("internal error"); } _verticalAlignContext.moveTrackedValues(delta); moveContextContents(delta); } }
private static void positionInlineContentVertically(LayoutContext c, VerticalAlignContext vaContext, Box child) { VerticalAlignContext vaTarget = vaContext; if (! child.getStyle().isLength(CSSName.VERTICAL_ALIGN)) { IdentValue vAlign = child.getStyle().getIdent( CSSName.VERTICAL_ALIGN); if (vAlign == IdentValue.TOP || vAlign == IdentValue.BOTTOM) { vaTarget = vaContext.createChild(child); } } if (child instanceof InlineLayoutBox) { InlineLayoutBox iB = (InlineLayoutBox) child; positionInlineVertically(c, vaTarget, iB); } else if (child instanceof Box) { positionInlineBlockVertically(c, vaTarget, (BlockBox)child); } }
private void merge(VerticalAlignContext context) { updateInlineBottom(context.getInlineBottom()); updateInlineTop(context.getInlineTop()); updatePaintingBottom(context.getPaintingBottom()); updatePaintingTop(context.getPaintingTop()); }
public VerticalAlignContext createChild(Box root) { VerticalAlignContext result = new VerticalAlignContext(); VerticalAlignContext vaRoot = getRoot(); result.setParent(vaRoot); InlineBoxMeasurements initial = (InlineBoxMeasurements)vaRoot._measurements.get(0); result.pushMeasurements(initial); if (vaRoot._children == null) { vaRoot._children = new ArrayList(); } vaRoot._children.add(new ChildContextData(root, result)); return result; }