public void Accept() { EditableRun v = null; int sourceLineId = feeder.CurrentLineId; if (this.currentRelocatorLineId == sourceLineId) { } else if (sourceLineId > this.currentRelocatorLineId) { v = feeder.UnsafeRemoveCurrent(); currentLine.UnsafeAddLast(v); if (feeder.IsUnStableBlankLine) { feeder.RemoveCurrentBlankLine(); } } else { v = feeder.CurrentRun; EditableTextLine sourceLine = v.OwnerEditableLine; sourceLine.SplitToNewLine(v); feeder.Read(); currentRelocatorLineId = sourceLineId + 1; currentLine = sourceLines[currentRelocatorLineId]; } isFirstRunOfLine = false; }
static Size ReCalculateContentSizeHorizontalFlow(EditableTextFlowLayer layer) { if (layer.lineCollection == null) { return(Size.Empty); } FlowFeeder flowFeeder = FlowFeeder.GetNewFlowFeeder(); flowFeeder.Load(layer); int curX = 0; int curY = 0; bool lastestIsBlock = false; int maxHeightInRow = 0; int maxWidth = 0; int curY_fromTop = 0; bool isFirstRunOfLine = true; int childCount = 0; EditableRun lastNotNullElement = null; while (flowFeeder.Read()) { EditableRun currentRun = flowFeeder.CurrentRun; if (currentRun != null) { #if DEBUG vinv_dbug_BeginSetElementBound(currentRun); #endif lastNotNullElement = currentRun; childCount++; if (lastestIsBlock || currentRun.IsBlockElement) { curX = 0; if (!isFirstRunOfLine) { if (maxWidth < curX) { maxWidth = curX; } curY = curY_fromTop + maxHeightInRow; curY_fromTop = curY; maxHeightInRow = 0; } lastestIsBlock = currentRun.IsBlockElement; if (lastestIsBlock) { } if (!currentRun.HasCalculatedSize) { EditableRun.InnerTextRunTopDownReCalculateContentSize(currentRun); } #if DEBUG else { vinv_dbug_WriteInfo(dbugVisitorMessage.SKIP, currentRun); } #endif int v_ds_height = currentRun.Height; if (v_ds_height > maxHeightInRow) { maxHeightInRow = v_ds_height; } curX += currentRun.Width; if (curX > maxWidth) { maxWidth = curX; } isFirstRunOfLine = false; } else { lastestIsBlock = currentRun.IsBlockElement; if (!currentRun.HasCalculatedSize) { EditableRun.InnerTextRunTopDownReCalculateContentSize(currentRun); } #if DEBUG else { vinv_dbug_WriteInfo(dbugVisitorMessage.SKIP, currentRun); } #endif int v_ds_height = currentRun.Height; if (v_ds_height > maxHeightInRow) { maxHeightInRow = v_ds_height; } curX += currentRun.Width; if (curX > maxWidth) { maxWidth = curX; } isFirstRunOfLine = false; } #if DEBUG vinv_dbug_EndSetElementBound(currentRun); #endif } else { if (flowFeeder.ReadState == 1) { curX = 0; curY = curY_fromTop + maxHeightInRow; curY_fromTop = curY; maxHeightInRow = 0; } else { } } } if (curX > maxWidth) { maxWidth = curX; } int finalHeight = curY_fromTop + maxHeightInRow; FlowFeeder.FreeFlowFeeder(flowFeeder); return(new Size(maxWidth, finalHeight)); }