public override void DrawChildContent(Canvas canvas, Rectangle updateArea)
{
if ((layerFlags & IS_LAYER_HIDDEN) != 0)
{
return;
}
this.BeginDrawingChildContent();
if ((layerFlags & FLOWLAYER_HAS_MULTILINE) != 0)
{
List<EditableTextLine> lines = (List<EditableTextLine>)lineCollection;
int renderAreaTop = updateArea.Top;
int renderAreaBottom = updateArea.Bottom;
bool foundFirstLine = false;
int j = lines.Count;
for (int i = 0; i < j; ++i)
{
EditableTextLine line = lines[i];
#if DEBUG
if (this.OwnerRenderElement is RenderBoxBase)
{
debug_RecordLineInfo((RenderBoxBase)OwnerRenderElement, line);
}
#endif
int y = line.Top;
LinkedListNode<EditableRun> curNode = line.First;
if (!foundFirstLine)
{
if (y + line.ActualLineHeight < renderAreaTop)
{
continue;
}
else
{
foundFirstLine = true;
}
}
else
{
if (y > renderAreaBottom)
{
break;
}
}
updateArea.OffsetY(-y);
canvas.OffsetCanvasOriginY(y);
while (curNode != null)
{
EditableRun child = curNode.Value;
if (child.IntersectOnHorizontalWith(ref updateArea))
{
int x = child.X;
canvas.OffsetCanvasOriginX(x);
updateArea.OffsetX(-x);
child.DrawToThisCanvas(canvas, updateArea);
canvas.OffsetCanvasOriginX(-x);
updateArea.OffsetX(x);
}
curNode = curNode.Next;
}
canvas.OffsetCanvasOriginY(-y);
updateArea.OffsetY(y);
}
}
else
{
EditableTextLine line = (EditableTextLine)lineCollection;
#if DEBUG
if (OwnerRenderElement is RenderBoxBase)
{
debug_RecordLineInfo((RenderBoxBase)OwnerRenderElement, line);
}
#endif
LinkedListNode<EditableRun> curNode = line.First;
if (curNode != null)
{
int y = line.Top;
canvas.OffsetCanvasOriginY(y);
updateArea.OffsetY(-y);
while (curNode != null)
{
EditableRun child = curNode.Value;
if (child.IntersectOnHorizontalWith(ref updateArea))
{
int x = child.X;
canvas.OffsetCanvasOriginX(x);
updateArea.OffsetX(-x);
child.DrawToThisCanvas(canvas, updateArea);
canvas.OffsetCanvasOriginX(-x);
updateArea.OffsetX(x);
}
curNode = curNode.Next;
}
canvas.OffsetCanvasOriginY(-y);
updateArea.OffsetY(y);
}
}
this.FinishDrawingChildContent();
}