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; } }