internal void Remove(int lineId)
        {
#if DEBUG
            if (lineId < 0)
            {
                throw new NotSupportedException();
            }
#endif
            if ((layerFlags & FLOWLAYER_HAS_MULTILINE) == 0)
            {
                return;
            }
            List <EditableTextLine> lines = (List <EditableTextLine>)lineCollection;
            if (lines.Count < 2)
            {
                return;
            }

            EditableTextLine tobeRemovedLine = lines[lineId];
            tobeRemovedLine.editableFlowLayer = null;
            int cy = tobeRemovedLine.Top;
            lines.RemoveAt(lineId); int j = lines.Count;
            for (int i = lineId; i < j; ++i)
            {
                EditableTextLine line = lines[i];
                line.SetTop(cy); line.SetLineNumber(i); cy += line.ActualLineHeight;
            }

            if (lines.Count == 1)
            {
                lineCollection         = lines[0];
                FlowLayerHasMultiLines = false;
            }
        }
 void AppendLine(EditableTextLine line)
 {
     if ((layerFlags & FLOWLAYER_HAS_MULTILINE) != 0)
     {
         List <EditableTextLine> lines = (List <EditableTextLine>)lineCollection;
         int lineCount             = lines.Count;
         EditableTextLine lastLine = lines[lineCount - 1];
         line.SetLineNumber(lineCount);
         line.SetTop(lastLine.Top + lastLine.ActualLineHeight);
         lines.Add(line);
     }
     else
     {
         EditableTextLine        onlyLine    = (EditableTextLine)lineCollection;
         List <EditableTextLine> newLineList = new List <EditableTextLine>();
         newLineList.Add(onlyLine);
         line.SetTop(onlyLine.ActualLineHeight);
         line.SetLineNumber(1);
         newLineList.Add(line);
         lineCollection         = newLineList;
         FlowLayerHasMultiLines = true;
     }
 }
        void InsertLine(int insertAt, EditableTextLine textLine)
        {
            if (insertAt < 0)
            {
                throw new NotSupportedException();
            }

            List <EditableTextLine> lines = lineCollection as List <EditableTextLine>;

            if (lines != null)
            {
                int j = lines.Count;
                if (insertAt > j - 1)
                {
                    AppendLine(textLine);
                }
                else
                {
                    EditableTextLine line = lines[insertAt];
                    int cy = line.Top;
                    textLine.SetTop(cy);
                    textLine.SetLineNumber(insertAt);
                    cy += line.ActualLineHeight;
                    for (int i = insertAt; i < j; i++)
                    {
                        line = lines[i];
                        line.SetTop(cy);
                        line.SetLineNumber(i + 1);
                        cy += line.ActualLineHeight;
                    }
                    textLine.editableFlowLayer = this;
                    lines.Insert(insertAt, textLine);
                }
            }
            else
            {
                lines = new List <EditableTextLine>();
                lines.Add((EditableTextLine)lineCollection);
                lineCollection         = lines;
                FlowLayerHasMultiLines = true;
                int j = lines.Count;
                if (insertAt > j - 1)
                {
                    AppendLine(textLine);
                }
                else
                {
                    EditableTextLine line = lines[insertAt];
                    int cy = line.Top;
                    textLine.SetTop(cy);
                    textLine.SetLineNumber(insertAt);
                    cy += line.ActualLineHeight;
                    for (int i = insertAt; i < j; i++)
                    {
                        line = lines[i];
                        line.SetTop(cy);
                        line.SetLineNumber(i + 1);
                        cy += line.ActualLineHeight;
                    }
                    textLine.editableFlowLayer = this;
                    lines.Insert(insertAt, textLine);
                }
            }
        }
        void InsertLine(int insertAt, EditableTextLine textLine)
        {
            if (insertAt < 0)
            {
                throw new NotSupportedException();
            }

            List<EditableTextLine> lines = lineCollection as List<EditableTextLine>;
            if (lines != null)
            {
                int j = lines.Count;
                if (insertAt > j - 1)
                {
                    AppendLine(textLine);
                }
                else
                {
                    EditableTextLine line = lines[insertAt];
                    int cy = line.Top;
                    textLine.SetTop(cy);
                    textLine.SetLineNumber(insertAt);
                    cy += line.ActualLineHeight;
                    for (int i = insertAt; i < j; i++)
                    {
                        line = lines[i];
                        line.SetTop(cy);
                        line.SetLineNumber(i + 1);
                        cy += line.ActualLineHeight;
                    }
                    textLine.editableFlowLayer = this;
                    lines.Insert(insertAt, textLine);
                }
            }
            else
            {
                lines = new List<EditableTextLine>();
                lines.Add((EditableTextLine)lineCollection);
                lineCollection = lines;
                FlowLayerHasMultiLines = true;
                int j = lines.Count;
                if (insertAt > j - 1)
                {
                    AppendLine(textLine);
                }
                else
                {
                    EditableTextLine line = lines[insertAt];
                    int cy = line.Top;
                    textLine.SetTop(cy);
                    textLine.SetLineNumber(insertAt);
                    cy += line.ActualLineHeight;
                    for (int i = insertAt; i < j; i++)
                    {
                        line = lines[i];
                        line.SetTop(cy);
                        line.SetLineNumber(i + 1);
                        cy += line.ActualLineHeight;
                    }
                    textLine.editableFlowLayer = this;
                    lines.Insert(insertAt, textLine);
                }
            }
        }
 void AppendLine(EditableTextLine line)
 {
     if ((layerFlags & FLOWLAYER_HAS_MULTILINE) != 0)
     {
         List<EditableTextLine> lines = (List<EditableTextLine>)lineCollection;
         int lineCount = lines.Count;
         EditableTextLine lastLine = lines[lineCount - 1];
         line.SetLineNumber(lineCount);
         line.SetTop(lastLine.Top + lastLine.ActualLineHeight);
         lines.Add(line);
     }
     else
     {
         EditableTextLine onlyLine = (EditableTextLine)lineCollection;
         List<EditableTextLine> newLineList = new List<EditableTextLine>();
         newLineList.Add(onlyLine);
         line.SetTop(onlyLine.ActualLineHeight);
         line.SetLineNumber(1);
         newLineList.Add(line);
         lineCollection = newLineList;
         FlowLayerHasMultiLines = true;
     }
 }