ChangeDisplayType() public static method

public static ChangeDisplayType ( CssBox box, CssDisplay newdisplay ) : void
box CssBox
newdisplay CssDisplay
return void
Beispiel #1
0
        //TODO: review here, fixed position can be reference sibling?
#if DEBUG
        ///// <summary>
        ///// ToString override.
        ///// </summary>
        ///// <returns></returns>
        //public override string ToString()
        //{
        //    var tag = HtmlElement != null ? string.Format("<{0}>", HtmlElement.Name) : "anon";

        //    if (IsBlock)
        //    {
        //        return string.Format("{0}{1} Block {2}, Children:{3}", ParentBox == null ? "Root: " : string.Empty, tag, FontSize, Boxes.Count);
        //    }
        //    else if (this.CssDisplay == CssDisplay.None)
        //    {
        //        return string.Format("{0}{1} None", ParentBox == null ? "Root: " : string.Empty, tag);
        //    }
        //    else
        //    {
        //        if (this.MayHasSomeTextContent)
        //        {
        //            return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag,
        //                this.CssDisplay.ToCssStringValue(), this.dbugCopyTextContent());
        //        }
        //        else
        //        {
        //            return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag,
        //                this.CssDisplay.ToCssStringValue(), "");
        //        }
        //    }
        //}
#endif


        //-----------------------------------------------------------------
        public static CssBox AddNewAnonInline(CssBox parent)
        {
            BoxSpec spec   = CssBox.UnsafeGetBoxSpec(parent);
            CssBox  newBox = new CssBox(spec.GetAnonVersion(), parent._rootgfx);

            parent.AppendChild(newBox);
            CssBox.ChangeDisplayType(newBox, Css.CssDisplay.Inline);
            return(newBox);
        }
Beispiel #2
0
        internal CssBox CreateBox(CssBox parentBox, HtmlElement childElement, bool fullmode)
        {
            //-----------------------------------------
            //1. create new box
            //-----------------------------------------
            //some box has predefined behaviour
            CssBox newBox = null;

            switch (childElement.WellknownElementName)
            {
            case WellKnownDomNodeName.br:
                //special treatment for br
                newBox = new CssBox(childElement.Spec, parentBox.RootGfx);
                newBox.SetController(childElement);
                CssBox.SetAsBrBox(newBox);
                CssBox.ChangeDisplayType(newBox, CssDisplay.Block);
                parentBox.AppendChild(newBox);
                childElement.SetPrincipalBox(newBox);
                return(newBox);

            case WellKnownDomNodeName.img:

                //auto append newBox to parentBox
                newBox = CreateImageBox(parentBox, childElement);
                childElement.SetPrincipalBox(newBox);
                return(newBox);

            case WellKnownDomNodeName.hr:
                newBox = new CssBoxHr(childElement.Spec, parentBox.RootGfx);
                newBox.SetController(childElement);
                parentBox.AppendChild(newBox);
                childElement.SetPrincipalBox(newBox);
                return(newBox);

            //-----------------------------------------------------
            //TODO: simplify this ...
            //table-display elements, fix display type
            case WellKnownDomNodeName.td:
            case WellKnownDomNodeName.th:
                newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, true);
                break;

            case WellKnownDomNodeName.col:
                newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumn);
                break;

            case WellKnownDomNodeName.colgroup:
                newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumnGroup);
                break;

            case WellKnownDomNodeName.tr:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRow);
                break;

            case WellKnownDomNodeName.tbody:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRowGroup);
                break;

            case WellKnownDomNodeName.table:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.Table);
                break;

            case WellKnownDomNodeName.caption:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableCaption);
                break;

            case WellKnownDomNodeName.thead:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableHeaderGroup);
                break;

            case WellKnownDomNodeName.tfoot:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableFooterGroup);
                break;

            //---------------------------------------------------
            case WellKnownDomNodeName.canvas:
            case WellKnownDomNodeName.input:

                newBox = this.CreateCustomCssBox(parentBox, childElement, childElement.Spec);
                if (newBox != null)
                {
                    childElement.SetPrincipalBox(newBox);
                    return(newBox);
                }
                goto default;     //else goto default ***

            //---------------------------------------------------
            case WellKnownDomNodeName.svg:
            {
                //1. create svg container node
                newBox = _svgCreator.CreateSvgBox(parentBox, childElement, childElement.Spec);
                childElement.SetPrincipalBox(newBox);
                return(newBox);
            }

            case WellKnownDomNodeName.NotAssign:
            case WellKnownDomNodeName.Unknown:
            {
                //custom tag
                //check if this is tag is registered as custom element
                //-----------------------------------------------
                if (childElement.HasCustomPrincipalBoxGenerator)
                {
                    var childbox = childElement.GetPrincipalBox(parentBox, this);
                    parentBox.AppendChild(childbox);
                    return(childbox);
                }

                //-----------------------------------------------
                LayoutFarm.Composers.CreateCssBoxDelegate foundBoxGen;
                if (((HtmlDocument)childElement.OwnerDocument).TryGetCustomBoxGenerator(childElement.Name, out foundBoxGen))
                {
                    //create custom box
                    newBox = foundBoxGen(childElement, parentBox, childElement.Spec, this);
                }
                if (newBox == null)
                {
                    goto default;
                }
                else
                {
                    childElement.SetPrincipalBox(newBox);
                    return(newBox);
                }
            }

            default:
            {
                BoxSpec childSpec = childElement.Spec;
                switch (childSpec.CssDisplay)
                {
                //not fixed display type
                case CssDisplay.TableCell:
                    newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, false);
                    break;

                case CssDisplay.TableColumn:
                    newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumn);
                    break;

                case CssDisplay.TableColumnGroup:
                    newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumnGroup);
                    break;

                case CssDisplay.ListItem:
                    newBox = ListItemBoxCreator.CreateListItemBox(parentBox, childElement);
                    break;

                default:
                    newBox = new CssBox(childSpec, parentBox.RootGfx);
                    newBox.SetController(childElement);
                    parentBox.AppendChild(newBox);
                    break;
                }
            }
            break;
            }

            childElement.SetPrincipalBox(newBox);
            UpdateChildBoxes(childElement, fullmode);
            return(newBox);
        }
        public static CssBox CreateListItemBox(CssBox parent, HtmlElement childElement)
        {
            var spec   = childElement.Spec;
            var newBox = new CssBoxListItem(spec, parent.RootGfx);

            newBox.SetController(childElement);
            parent.AppendChild(newBox);
            if (spec.ListStyleType != CssListStyleType.None)
            {
                //create sub item collection
                var itemBulletBox = new CssBox(spec.GetAnonVersion(), parent.RootGfx);
                newBox.BulletBox = itemBulletBox;
                CssBox.UnsafeSetParent(itemBulletBox, newBox);
                CssBox.ChangeDisplayType(itemBulletBox, CssDisplay.Inline);
                //---------------------------------------------------------------
                //set content of bullet
                char[] text_content = null;
                switch (spec.ListStyleType)
                {
                case CssListStyleType.Disc:
                {
                    text_content = discItem;
                }
                break;

                case CssListStyleType.Circle:
                {
                    text_content = circleItem;
                }
                break;

                case CssListStyleType.Square:
                {
                    text_content = squareItem;
                }
                break;

                case CssListStyleType.Decimal:
                {
                    text_content = (GetIndexForList(newBox, childElement).ToString(CultureInfo.InvariantCulture) + ".").ToCharArray();
                }
                break;

                case CssListStyleType.DecimalLeadingZero:
                {
                    text_content = (GetIndexForList(newBox, childElement).ToString("00", CultureInfo.InvariantCulture) + ".").ToCharArray();
                }
                break;

                default:
                {
                    text_content = (BulletNumberFormatter.ConvertToAlphaNumber(GetIndexForList(newBox, childElement), spec.ListStyleType) + ".").ToCharArray();
                }
                break;
                }
                //---------------------------------------------------------------
                CssBox.UnsafeSetTextBuffer(itemBulletBox, text_content);
                List <CssRun> runlist = new List <CssRun>();
                bool          hasSomeCharacter;
                splitter.ParseWordContent(text_content, spec, itemBulletBox.IsBlock, runlist, out hasSomeCharacter);
                RunListHelper.AddRunList(itemBulletBox, spec, runlist, text_content, false);
            }
            return(newBox);
        }