public int AddLeader(BlockArea ba, FontState fontState, float red, float green, float blue, int leaderPattern, int leaderLengthMinimum, int leaderLengthOptimum, int leaderLengthMaximum, int ruleThickness, int ruleStyle, int leaderPatternWidth, int leaderAlignment) { LineArea la = ba.getCurrentLineArea(); if (la == null) { return(-1); } la.changeFont(fontState); la.changeColor(red, green, blue); if (leaderLengthOptimum <= (la.getRemainingWidth())) { la.AddLeader(leaderPattern, leaderLengthMinimum, leaderLengthOptimum, leaderLengthMaximum, ruleStyle, ruleThickness, leaderPatternWidth, leaderAlignment); } else { la = ba.createNextLineArea(); if (la == null) { return(-1); } la.changeFont(fontState); la.changeColor(red, green, blue); if (leaderLengthMinimum <= la.getContentWidth()) { la.AddLeader(leaderPattern, leaderLengthMinimum, leaderLengthOptimum, leaderLengthMaximum, ruleStyle, ruleThickness, leaderPatternWidth, leaderAlignment); } else { FonetDriver.ActiveDriver.FireFonetWarning( "Leader doesn't fit into line, it will be clipped to fit."); la.AddLeader(leaderPattern, la.getRemainingWidth(), leaderLengthOptimum, leaderLengthMaximum, ruleStyle, ruleThickness, leaderPatternWidth, leaderAlignment); } } return(1); }
protected static int addRealText(BlockArea ba, FontState fontState, float red, float green, float blue, WrapOption wrapOption, LinkSet ls, int whiteSpaceCollapse, char[] data, int start, int end, TextState textState, VerticalAlign vAlign) { int ts, te; char[] ca; ts = start; te = end; ca = data; LineArea la = ba.getCurrentLineArea(); if (la == null) { return(start); } la.changeFont(fontState); la.changeColor(red, green, blue); la.changeWrapOption(wrapOption); la.changeWhiteSpaceCollapse(whiteSpaceCollapse); la.changeVerticalAlign(vAlign); ba.setupLinkSet(ls); ts = la.addText(ca, ts, te, ls, textState); while (ts != -1) { la = ba.createNextLineArea(); if (la == null) { return(ts); } la.changeFont(fontState); la.changeColor(red, green, blue); la.changeWrapOption(wrapOption); la.changeWhiteSpaceCollapse(whiteSpaceCollapse); ba.setupLinkSet(ls); ts = la.addText(ca, ts, te, ls, textState); } return(-1); }
public override Status Layout(Area area) { if (this.marker == MarkerBreakAfter) { return(new Status(Status.OK)); } if (this.marker == MarkerStart) { AccessibilityProps mAccProps = propMgr.GetAccessibilityProps(); AuralProps mAurProps = propMgr.GetAuralProps(); BorderAndPadding bap = propMgr.GetBorderAndPadding(); BackgroundProps bProps = propMgr.GetBackgroundProps(); MarginInlineProps mProps = propMgr.GetMarginInlineProps(); RelativePositionProps mRelProps = propMgr.GetRelativePositionProps(); string id = this.properties.GetProperty("id").GetString(); int align = this.properties.GetProperty("text-align").GetEnum(); int valign = this.properties.GetProperty("vertical-align").GetEnum(); int overflow = this.properties.GetProperty("overflow").GetEnum(); this.breakBefore = this.properties.GetProperty("break-before").GetEnum(); this.breakAfter = this.properties.GetProperty("break-after").GetEnum(); this.width = this.properties.GetProperty("width").GetLength().MValue(); this.height = this.properties.GetProperty("height").GetLength().MValue(); this.contwidth = this.properties.GetProperty("content-width").GetLength().MValue(); this.contheight = this.properties.GetProperty("content-height").GetLength().MValue(); this.wauto = this.properties.GetProperty("width").GetLength().IsAuto(); this.hauto = this.properties.GetProperty("height").GetLength().IsAuto(); this.cwauto = this.properties.GetProperty("content-width").GetLength().IsAuto(); this.chauto = this.properties.GetProperty("content-height").GetLength().IsAuto(); this.startIndent = this.properties.GetProperty("start-indent").GetLength().MValue(); this.endIndent = this.properties.GetProperty("end-indent").GetLength().MValue(); this.spaceBefore = this.properties.GetProperty("space-before.optimum").GetLength().MValue(); this.spaceAfter = this.properties.GetProperty("space-after.optimum").GetLength().MValue(); this.scaling = this.properties.GetProperty("scaling").GetEnum(); area.getIDReferences().CreateID(id); if (this.areaCurrent == null) { this.areaCurrent = new ForeignObjectArea(propMgr.GetFontState(area.getFontInfo()), area.getAllocationWidth()); this.areaCurrent.start(); areaCurrent.SetWidth(this.width); areaCurrent.SetHeight(this.height); areaCurrent.SetContentWidth(this.contwidth); areaCurrent.setContentHeight(this.contheight); areaCurrent.setScaling(this.scaling); areaCurrent.setAlign(align); areaCurrent.setVerticalAlign(valign); areaCurrent.setOverflow(overflow); areaCurrent.setSizeAuto(wauto, hauto); areaCurrent.setContentSizeAuto(cwauto, chauto); areaCurrent.setPage(area.getPage()); int numChildren = this.children.Count; if (numChildren > 1) { throw new FonetException("Only one child element is allowed in an instream-foreign-object"); } if (this.children.Count > 0) { FONode fo = (FONode)children[0]; Status status; if ((status = fo.Layout(this.areaCurrent)).isIncomplete()) { return(status); } this.areaCurrent.end(); } } this.marker = 0; if (breakBefore == BreakBefore.PAGE || ((spaceBefore + areaCurrent.getEffectiveHeight()) > area.spaceLeft())) { return(new Status(Status.FORCE_PAGE_BREAK)); } if (breakBefore == BreakBefore.ODD_PAGE) { return(new Status(Status.FORCE_PAGE_BREAK_ODD)); } if (breakBefore == BreakBefore.EVEN_PAGE) { return(new Status(Status.FORCE_PAGE_BREAK_EVEN)); } } if (this.areaCurrent == null) { return(new Status(Status.OK)); } if (area is BlockArea) { BlockArea ba = (BlockArea)area; LineArea la = ba.getCurrentLineArea(); if (la == null) { return(new Status(Status.AREA_FULL_NONE)); } la.addPending(); if (areaCurrent.getEffectiveWidth() > la.getRemainingWidth()) { la = ba.createNextLineArea(); if (la == null) { return(new Status(Status.AREA_FULL_NONE)); } } la.addInlineArea(areaCurrent, GetLinkSet()); } else { area.addChild(areaCurrent); area.increaseHeight(areaCurrent.getEffectiveHeight()); } if (this.isInTableCell) { startIndent += forcedStartOffset; } areaCurrent.setStartIndent(startIndent); areaCurrent.setPage(area.getPage()); if (breakAfter == BreakAfter.PAGE) { this.marker = MarkerBreakAfter; return(new Status(Status.FORCE_PAGE_BREAK)); } if (breakAfter == BreakAfter.ODD_PAGE) { this.marker = MarkerBreakAfter; return(new Status(Status.FORCE_PAGE_BREAK_ODD)); } if (breakAfter == BreakAfter.EVEN_PAGE) { this.marker = MarkerBreakAfter; return(new Status(Status.FORCE_PAGE_BREAK_EVEN)); } areaCurrent = null; return(new Status(Status.OK)); }
public override Status Layout(Area area) { if (this.marker == MarkerStart) { AccessibilityProps mAccProps = propMgr.GetAccessibilityProps(); AuralProps mAurProps = propMgr.GetAuralProps(); BorderAndPadding bap = propMgr.GetBorderAndPadding(); BackgroundProps bProps = propMgr.GetBackgroundProps(); MarginInlineProps mProps = propMgr.GetMarginInlineProps(); RelativePositionProps mRelProps = propMgr.GetRelativePositionProps(); this.align = this.properties.GetProperty("text-align").GetEnum(); this.startIndent = this.properties.GetProperty("start-indent").GetLength().MValue(); this.endIndent = this.properties.GetProperty("end-indent").GetLength().MValue(); this.spaceBefore = this.properties.GetProperty("space-before.optimum").GetLength().MValue(); this.spaceAfter = this.properties.GetProperty("space-after.optimum").GetLength().MValue(); this.width = this.properties.GetProperty("width").GetLength().MValue(); this.height = this.properties.GetProperty("height").GetLength().MValue(); this.src = this.properties.GetProperty("src").GetString(); this.id = this.properties.GetProperty("id").GetString(); area.getIDReferences().CreateID(id); this.marker = 0; } try { FonetImage img = FonetImageFactory.Make(src); if ((width == 0) || (height == 0)) { double imgWidth = img.Width; double imgHeight = img.Height; if ((width == 0) && (height == 0)) { width = (int)((imgWidth * 1000d)); height = (int)((imgHeight * 1000d)); } else if (height == 0) { height = (int)((imgHeight * ((double)width)) / imgWidth); } else if (width == 0) { width = (int)((imgWidth * ((double)height)) / imgHeight); } } double ratio = (double)width / (double)height; Length maxWidth = this.properties.GetProperty("max-width").GetLength(); Length maxHeight = this.properties.GetProperty("max-height").GetLength(); if (maxWidth != null && width > maxWidth.MValue()) { width = maxWidth.MValue(); height = (int)(((double)width) / ratio); } if (maxHeight != null && height > maxHeight.MValue()) { height = maxHeight.MValue(); width = (int)(ratio * ((double)height)); } int areaWidth = area.getAllocationWidth() - startIndent - endIndent; int pageHeight = area.getPage().getBody().getMaxHeight() - spaceBefore; if (height > pageHeight) { height = pageHeight; width = (int)(ratio * ((double)height)); } if (width > areaWidth) { width = areaWidth; height = (int)(((double)width) / ratio); } if (area.spaceLeft() < (height + spaceBefore)) { return(new Status(Status.AREA_FULL_NONE)); } this.imageArea = new ImageArea(propMgr.GetFontState(area.getFontInfo()), img, area.getAllocationWidth(), width, height, startIndent, endIndent, align); if ((spaceBefore != 0) && (this.marker == 0)) { area.addDisplaySpace(spaceBefore); } if (marker == 0) { area.GetMyRefs().ConfigureID(id, area); } imageArea.start(); imageArea.end(); if (spaceAfter != 0) { area.addDisplaySpace(spaceAfter); } if (breakBefore == BreakBefore.PAGE || ((spaceBefore + imageArea.GetHeight()) > area.spaceLeft())) { return(new Status(Status.FORCE_PAGE_BREAK)); } if (breakBefore == BreakBefore.ODD_PAGE) { return(new Status(Status.FORCE_PAGE_BREAK_ODD)); } if (breakBefore == BreakBefore.EVEN_PAGE) { return(new Status(Status.FORCE_PAGE_BREAK_EVEN)); } if (area is BlockArea) { BlockArea ba = (BlockArea)area; LineArea la = ba.getCurrentLineArea(); if (la == null) { return(new Status(Status.AREA_FULL_NONE)); } la.addPending(); if (imageArea.getContentWidth() > la.getRemainingWidth()) { la = ba.createNextLineArea(); if (la == null) { return(new Status(Status.AREA_FULL_NONE)); } } la.addInlineArea(imageArea, GetLinkSet()); } else { area.addChild(imageArea); area.increaseHeight(imageArea.getContentHeight()); } imageArea.setPage(area.getPage()); if (breakAfter == BreakAfter.PAGE) { this.marker = MarkerBreakAfter; return(new Status(Status.FORCE_PAGE_BREAK)); } if (breakAfter == BreakAfter.ODD_PAGE) { this.marker = MarkerBreakAfter; return(new Status(Status.FORCE_PAGE_BREAK_ODD)); } if (breakAfter == BreakAfter.EVEN_PAGE) { this.marker = MarkerBreakAfter; return(new Status(Status.FORCE_PAGE_BREAK_EVEN)); } } catch (FonetImageException imgex) { FonetDriver.ActiveDriver.FireFonetError("Error while creating area : " + imgex.Message); } return(new Status(Status.OK)); }