LayoutFarm.Text.EditableTextFlowLayer.ReCalculateContentSizeHorizontalFlow C# (CSharp) Method

ReCalculateContentSizeHorizontalFlow() static private method

static private ReCalculateContentSizeHorizontalFlow ( EditableTextFlowLayer layer ) : Size
layer EditableTextFlowLayer
return Size
        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);
        }