{
// DebugLog.log("Canvas Processing ID is active. Wont delete");
return;
}
final RenderNode first = box.getFirstChild();
if (first == null)
{
return;
}
if (first.isFinished() == false)
{
// DebugLog.log("First child is active. Wont delete");
return;
}
if ((first.getNodeType() & LayoutNodeTypes.MASK_BOX) == LayoutNodeTypes.MASK_BOX)
{
final RenderBox nextBox = (RenderBox) first;
if (nextBox.isDeepFinished() == false)
{
// DebugLog.log("First child is not deep-finished. Wont delete");
return;
}
}
RenderNode last = first;
while (true)
{
final RenderNode next = last.getNext();
if (next == null)
{
break;
}
if ((next.getNodeType() & LayoutNodeTypes.MASK_BOX) == LayoutNodeTypes.MASK_BOX &&
(next.getNodeType() & LayoutNodeTypes.MASK_BOX_INLINE) != LayoutNodeTypes.MASK_BOX_INLINE)
{
final RenderBox nextBox = (RenderBox) next;
if (next.isFinished() == false && nextBox.isDeepFinished() == false)
{
break;
}
}
if (next.isBreakAfter())
{
break;
}
last = next;
}
if (last == first &&
(first.getNodeType() == LayoutNodeTypes.TYPE_NODE_FINISHEDNODE))
{
// In this case, we can skip the replace-action below ..
// DebugLog.log("Already finish node");
return;
}
// So lets get started. We remove all nodes between (and inclusive)
// node and last.
final long nodeY = first.getY();
final long width = box.getContentAreaX2() - box.getContentAreaX1();
final long lastY2 = last.getY() + last.getHeight();
final long height = lastY2 - nodeY;
// make sure that the finished-box inherits the margins ..
final long marginsTop = first.getEffectiveMarginTop();
final long marginsBottom = last.getEffectiveMarginBottom();
final boolean breakAfter = last.isBreakAfter();
final FinishedRenderNode replacement =
new FinishedRenderNode(width, height, marginsTop, marginsBottom, breakAfter, lastSeenStateKey);
// DebugLog.log("Removing childs of " + box + " as this box is finished.");
// Log.debug (" (" + last.getInstanceId() + ") " +
// (box.getLastChild() == last) + " " + (box.getFirstChild() == first));
int counter = 0;
RenderNode removeNode = first;
while (removeNode != last)
{
final RenderNode next = removeNode.getNext();
if (removeNode.isOpen())
{
throw new IllegalStateException("A node is still open. We should not have come that far.");
}
box.remove(removeNode);