public virtual void AddChild(IRenderer renderer)
        {
            // https://www.webkit.org/blog/116/webcore-rendering-iii-layout-basics
            // "The rules can be summarized as follows:"...
            int?positioning = renderer.GetProperty <int?>(Property.POSITION);

            if (positioning == null || positioning == LayoutPosition.RELATIVE || positioning
                == LayoutPosition.STATIC)
            {
                childRenderers.Add(renderer);
            }
            else
            {
                if (positioning == LayoutPosition.FIXED)
                {
                    iText.Layout.Renderer.AbstractRenderer root = this;
                    while (root.parent is iText.Layout.Renderer.AbstractRenderer)
                    {
                        root = (iText.Layout.Renderer.AbstractRenderer)root.parent;
                    }
                    if (root == this)
                    {
                        positionedRenderers.Add(renderer);
                    }
                    else
                    {
                        root.AddChild(renderer);
                    }
                }
            }
        }
 protected internal AbstractRenderer(iText.Layout.Renderer.AbstractRenderer other
                                     )
 {
     this.childRenderers      = other.childRenderers;
     this.positionedRenderers = other.positionedRenderers;
     this.modelElement        = other.modelElement;
     this.flushed             = other.flushed;
     this.occupiedArea        = other.occupiedArea.Clone();
     this.parent = other.parent;
     this.properties.AddAll(other.properties);
     this.isLastRendererForModelElement = other.isLastRendererForModelElement;
 }