current.prunePendingInlineBoxes(); int totalLineWidth = positionHorizontally(c, current, 0); current.setContentWidth(totalLineWidth); positionVertically(c, block, current, markerData); alignLine(c, current, maxAvailableWidth); finishPendingInlineLayers(c, pendingInlineLayers); pendingInlineLayers.clear();
private static void positionInlineVertically(LayoutContext c, VerticalAlignContext vaContext, InlineLayoutBox iB) { InlineBoxMeasurements iBMeasurements = calculateInlineMeasurements(c, iB, vaContext); vaContext.pushMeasurements(iBMeasurements); positionInlineChildrenVertically(c, iB, vaContext); vaContext.popMeasurements(); }
public void calculateTextDecoration(LayoutContext c) { List decorations = InlineBoxing.calculateTextDecorations(this, getBaseline(), getStyle().getFSFontMetrics(c)); setTextDecorations(decorations); }
LineBox currentLine = newLine(c, initialY, box); LineBox previousLine = null; if (openInlineBoxes != null) { openInlineBoxes = new ArrayList(openInlineBoxes); currentIB = addOpenInlineBoxes( c, currentLine, openInlineBoxes, maxAvailableWidth, iBMap); if (hasTrimmableLeadingSpace( currentLine, style, lbContext, zeroWidthInlineBlock)) { trimmedLeadingSpace = true; trimLeadingSpace(lbContext); addFirstLetterBox(c, currentLine, currentIB, lbContext, maxAvailableWidth, remainingWidth); remainingWidth -= firstLetter.getInlineWidth(); } else { lbContext.saveEnd(); InlineText inlineText = layoutText( c, iB.getStyle(), remainingWidth - fit, lbContext, false); if (!lbContext.isUnbreakable() || saveLine(currentLine, c, box, minimumLineHeight, maxAvailableWidth, pendingFloats, hasFirstLinePEs, pendingInlineLayers, markerData, contentStart, isAlwaysBreak(c, box, breakAtLine, lineOffset)); lineOffset++; markerData = null;
FSFontMetrics strutM = container.getStyle().getFSFontMetrics(c); VerticalAlignContext vaContext = new VerticalAlignContext(); InlineBoxMeasurements measurements = getInitialMeasurements(c, container, strutM); vaContext.setInitialMeasurements(measurements); List lBDecorations = calculateTextDecorations( container, measurements.getBaseline(), strutM); if (lBDecorations != null) { positionInlineContentVertically(c, vaContext, child); moveLineContents(current, -vaContext.getInlineTop()); if (lBDecorations != null) { for (Iterator i = lBDecorations.iterator(); i.hasNext(); ) {
private static InlineBoxMeasurements calculateInlineMeasurements(LayoutContext c, InlineLayoutBox iB, VerticalAlignContext vaContext) { FSFontMetrics fm = iB.getStyle().getFSFontMetrics(c); CalculatedStyle style = iB.getStyle(); float lineHeight = style.getLineHeight(c); int halfLeading = Math.round((lineHeight - iB.getStyle().getFont(c).size) / 2); if (halfLeading > 0) { halfLeading = Math.round((lineHeight - (fm.getDescent() + fm.getAscent())) / 2); } iB.setBaseline(Math.round(fm.getAscent())); alignInlineContent(c, iB, fm.getAscent(), fm.getDescent(), vaContext); List decorations = calculateTextDecorations(iB, iB.getBaseline(), fm); if (decorations != null) { iB.setTextDecorations(decorations); } InlineBoxMeasurements result = new InlineBoxMeasurements(); result.setBaseline(iB.getY() + iB.getBaseline()); result.setInlineTop(iB.getY() - halfLeading); result.setInlineBottom(Math.round(result.getInlineTop() + lineHeight)); result.setTextTop(iB.getY()); result.setTextBottom((int) (result.getBaseline() + fm.getDescent())); RectPropertySet padding = iB.getPadding(c); BorderPropertySet border = iB.getBorder(c); result.setPaintingTop((int)Math.floor(iB.getY() - border.top() - padding.top())); result.setPaintingBottom((int)Math.ceil(iB.getY() + fm.getAscent() + fm.getDescent() + border.bottom() + padding.bottom())); return result; }
private static void positionInlineBlockVertically( LayoutContext c, VerticalAlignContext vaContext, BlockBox inlineBlock) { int baseline = inlineBlock.calcInlineBaseline(c); int ascent = baseline; int descent = inlineBlock.getHeight() - baseline; alignInlineContent(c, inlineBlock, ascent, descent, vaContext); vaContext.updateInlineTop(inlineBlock.getY()); vaContext.updatePaintingTop(inlineBlock.getY()); vaContext.updateInlineBottom(inlineBlock.getY() + inlineBlock.getHeight()); vaContext.updatePaintingBottom(inlineBlock.getY() + inlineBlock.getHeight()); }
public static StrutMetrics createDefaultStrutMetrics(LayoutContext c, Box container) { FSFontMetrics strutM = container.getStyle().getFSFontMetrics(c); InlineBoxMeasurements measurements = getInitialMeasurements(c, container, strutM); return new StrutMetrics( strutM.getAscent(), measurements.getBaseline(), strutM.getDescent()); }
public void createMarkerData(LayoutContext c) { if (getMarkerData() != null) { return; } StrutMetrics strutMetrics = InlineBoxing.createDefaultStrutMetrics(c, this); boolean imageMarker = false; MarkerData result = new MarkerData(); result.setStructMetrics(strutMetrics); CalculatedStyle style = getStyle(); IdentValue listStyle = style.getIdent(CSSName.LIST_STYLE_TYPE); String image = style.getStringProperty(CSSName.LIST_STYLE_IMAGE); if (! image.equals("none")) { result.setImageMarker(makeImageMarker(c, strutMetrics, image)); imageMarker = result.getImageMarker() != null; } if (listStyle != IdentValue.NONE && ! imageMarker) { if (listStyle == IdentValue.CIRCLE || listStyle == IdentValue.SQUARE || listStyle == IdentValue.DISC) { result.setGlyphMarker(makeGlyphMarker(strutMetrics)); } else { result.setTextMarker(makeTextMarker(c, listStyle)); } } setMarkerData(result); }
LineBox currentLine = newLine(c, initialY, box); LineBox previousLine = null; if (openInlineBoxes != null) { openInlineBoxes = new ArrayList(openInlineBoxes); currentIB = addOpenInlineBoxes( c, currentLine, openInlineBoxes, maxAvailableWidth, iBMap); if (hasTrimmableLeadingSpace( currentLine, style, lbContext, zeroWidthInlineBlock)) { trimmedLeadingSpace = true; trimLeadingSpace(lbContext); addFirstLetterBox(c, currentLine, currentIB, lbContext, maxAvailableWidth, remainingWidth); remainingWidth -= firstLetter.getInlineWidth(); } else { lbContext.saveEnd(); InlineText inlineText = layoutText( c, iB.getStyle(), remainingWidth - fit, lbContext, false); if (lbContext.isUnbreakable() && ! currentLine.isContainsContent()) { saveLine(currentLine, c, box, minimumLineHeight, maxAvailableWidth, pendingFloats, hasFirstLinePEs, pendingInlineLayers, markerData, contentStart, isAlwaysBreak(c, box, breakAtLine, lineOffset)); lineOffset++; markerData = null;
FSFontMetrics strutM = container.getStyle().getFSFontMetrics(c); VerticalAlignContext vaContext = new VerticalAlignContext(); InlineBoxMeasurements measurements = getInitialMeasurements(c, container, strutM); vaContext.setInitialMeasurements(measurements); List lBDecorations = calculateTextDecorations( container, measurements.getBaseline(), strutM); if (lBDecorations != null) { positionInlineContentVertically(c, vaContext, child); moveLineContents(current, -vaContext.getInlineTop()); if (lBDecorations != null) { for (Iterator i = lBDecorations.iterator(); i.hasNext(); ) {
alignInlineContent(c, iB, fm.getAscent(), fm.getDescent(), vaContext); List decorations = calculateTextDecorations(iB, iB.getBaseline(), fm); if (decorations != null) { iB.setTextDecorations(decorations);
private static void positionInlineBlockVertically( LayoutContext c, VerticalAlignContext vaContext, BlockBox inlineBlock) { int baseline = inlineBlock.calcInlineBaseline(c); int ascent = baseline; int descent = inlineBlock.getHeight() - baseline; alignInlineContent(c, inlineBlock, ascent, descent, vaContext); vaContext.updateInlineTop(inlineBlock.getY()); vaContext.updatePaintingTop(inlineBlock.getY()); vaContext.updateInlineBottom(inlineBlock.getY() + inlineBlock.getHeight()); vaContext.updatePaintingBottom(inlineBlock.getY() + inlineBlock.getHeight()); }
public static StrutMetrics createDefaultStrutMetrics(LayoutContext c, Box container) { FSFontMetrics strutM = container.getStyle().getFSFontMetrics(c); InlineBoxMeasurements measurements = getInitialMeasurements(c, container, strutM); return new StrutMetrics( strutM.getAscent(), measurements.getBaseline(), strutM.getDescent()); }
public void createMarkerData(LayoutContext c) { if (getMarkerData() != null) { return; } StrutMetrics strutMetrics = InlineBoxing.createDefaultStrutMetrics(c, this); boolean imageMarker = false; MarkerData result = new MarkerData(); result.setStructMetrics(strutMetrics); CalculatedStyle style = getStyle(); IdentValue listStyle = style.getIdent(CSSName.LIST_STYLE_TYPE); String image = style.getStringProperty(CSSName.LIST_STYLE_IMAGE); if (! image.equals("none")) { result.setImageMarker(makeImageMarker(c, strutMetrics, image)); imageMarker = result.getImageMarker() != null; } if (listStyle != IdentValue.NONE && ! imageMarker) { if (listStyle == IdentValue.CIRCLE || listStyle == IdentValue.SQUARE || listStyle == IdentValue.DISC) { result.setGlyphMarker(makeGlyphMarker(strutMetrics)); } else { result.setTextMarker(makeTextMarker(c, listStyle)); } } setMarkerData(result); }
current.prunePendingInlineBoxes(); int totalLineWidth = positionHorizontally(c, current, 0); current.setContentWidth(totalLineWidth); positionVertically(c, block, current, markerData); alignLine(c, current, maxAvailableWidth); finishPendingInlineLayers(c, pendingInlineLayers); pendingInlineLayers.clear();
private static void positionInlineVertically(LayoutContext c, VerticalAlignContext vaContext, InlineLayoutBox iB) { InlineBoxMeasurements iBMeasurements = calculateInlineMeasurements(c, iB, vaContext); vaContext.pushMeasurements(iBMeasurements); positionInlineChildrenVertically(c, iB, vaContext); vaContext.popMeasurements(); }
public void calculateTextDecoration(LayoutContext c) { List decorations = InlineBoxing.calculateTextDecorations(this, getBaseline(), getStyle().getFSFontMetrics(c)); setTextDecorations(decorations); }