static private InternalGetPrincipalBox ( |
||
element | ||
리턴 |
//public CssBox BuildCssRenderTree( // HtmlElement hostElement, // HtmlElement domElement, // RenderElement containerElement) //{ // var rootgfx = containerElement.Root; // IFonts ifonts = rootgfx.SampleIFonts; // HtmlDocument htmldoc = domElement.OwnerDocument as HtmlDocument; // HtmlElement startAtHtmlElement = (HtmlElement)domElement; // htmldoc.SetDocumentState(DocumentState.Building); // TopDownActiveCssTemplate activeTemplate = new TopDownActiveCssTemplate(htmldoc.CssActiveSheet); // PrepareStylesAndContentOfChildNodes(startAtHtmlElement, activeTemplate); // //1.css box for doc root: create new if not exist // CssBox docRoot = HtmlElement.InternalGetPrincipalBox((HtmlElement)htmldoc.RootNode); // if (docRoot == null) // { // docRoot = HtmlHost.CreateBridgeBox(ifonts, containerElement, rootgfx); // ((HtmlElement)htmldoc.RootNode).SetPrincipalBox(docRoot); // } // //---------------------------------------------------------------- // CssBox bridgeBox = HtmlHost.CreateBridgeBox(ifonts, containerElement, rootgfx); // docRoot.AppendChild(bridgeBox); // domElement.SetPrincipalBox(bridgeBox); // //---------------------------------------------------------------- // this.htmlHost.UpdateChildBoxes(startAtHtmlElement, true); // htmldoc.SetDocumentState(DocumentState.Idle); // //---------------------------------------------------------------- // //SetTextSelectionStyle(htmlCont, cssData); // return bridgeBox; //} //---------------------------------------------------------------- public void RefreshCssTree(DomElement startAt) { HtmlElement startAtElement = (HtmlElement)startAt; startAtElement.OwnerDocument.SetDocumentState(DocumentState.Building); //---------------------------------------------------------------- //clear active template TopDownActiveCssTemplate activeTemplate = new TopDownActiveCssTemplate(((HtmlDocument)startAtElement.OwnerDocument).CssActiveSheet); PrepareStylesAndContentOfChildNodes(startAtElement, activeTemplate); CssBox existingCssBox = HtmlElement.InternalGetPrincipalBox(startAtElement); if (existingCssBox != null) { existingCssBox.Clear(); } //---------------------------------------------------------------- this.htmlHost.UpdateChildBoxes(startAtElement, false); startAtElement.OwnerDocument.SetDocumentState(DocumentState.Idle); //---------------------------------------------------------------- }
public void ChangeBackgroundColor(Color backgroundColor) { if (elem == null) { return; } BoxSpec boxSpec = elem.Spec; if (boxSpec.BackgroundColor == backgroundColor) { return; } var existingRuleSet = elem.ElementRuleSet; if (existingRuleSet == null) { //create new one elem.ElementRuleSet = existingRuleSet = new CssRuleSet(); elem.IsStyleEvaluated = false; } //------------------------------------- existingRuleSet.RemoveCssProperty(WellknownCssPropertyName.BackgroundColor); existingRuleSet.AddCssCodeProperty( new CssPropertyDeclaration( WellknownCssPropertyName.BackgroundColor, new CssCodeColor(CssColorConv.ConvertToCssColor(backgroundColor)))); elem.SkipPrincipalBoxEvalulation = false; CssBox cssbox = HtmlElement.InternalGetPrincipalBox(elem); if (cssbox != null) { #if DEBUG cssbox.dbugMark1++; #endif CssBox.InvalidateComputeValue(cssbox); } HtmlElement.InvokeNotifyChangeOnIdleState( elem, ElementChangeKind.Spec); InvalidateCssBox(cssbox); }
static void AssignStylesFromTranslatedAttributesHTML5(HtmlElement tag) { //some html attr contains css value if (tag.AttributeCount > 0) { foreach (var attr in tag.GetAttributeIterForward()) { //attr switch by wellknown property name switch ((WebDom.WellknownName)attr.LocalNameIndex) { case WebDom.WellknownName.Align: { //deprecated in HTML4.1 //string value = attr.Value.ToLower(); //if (value == "left" // || value == "center" // || value == "right" // || value == "justify") //{ // WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( // value, WebDom.CssValueHint.Iden); // box.CssTextAlign = UserMapUtil.GetTextAlign(propValue); //} //else //{ // WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( // value, WebDom.CssValueHint.Iden); // box.VerticalAlign = UserMapUtil.GetVerticalAlign(propValue); //} //break; } break; case WebDom.WellknownName.Background: //deprecated in HTML4.1 //box.BackgroundImageBinder = new ImageBinder(attr.Value.ToLower()); break; case WebDom.WellknownName.BackgroundColor: //deprecated in HTML5 //box.BackgroundColor = CssValueParser.GetActualColor(attr.Value.ToLower()); break; case WebDom.WellknownName.Border: { //not support in HTML5 //CssLength borderLen = TranslateLength(UserMapUtil.MakeBorderLength(attr.Value.ToLower())); //if (!borderLen.HasError) //{ // if (borderLen.Number > 0) // { // box.BorderLeftStyle = // box.BorderTopStyle = // box.BorderRightStyle = // box.BorderBottomStyle = CssBorderStyle.Solid; // } // box.BorderLeftWidth = // box.BorderTopWidth = // box.BorderRightWidth = // box.BorderBottomWidth = borderLen; // if (tag.WellknownTagName == WellknownHtmlTagName.TABLE && borderLen.Number > 0) // { // //Cascades to the TD's the border spacified in the TABLE tag. // var borderWidth = CssLength.MakePixelLength(1); // ForEachCellInTable(box, cell => // { // //for all cells // cell.BorderLeftStyle = cell.BorderTopStyle = cell.BorderRightStyle = cell.BorderBottomStyle = CssBorderStyle.Solid; // CssConstants.Solid; // cell.BorderLeftWidth = cell.BorderTopWidth = cell.BorderRightWidth = cell.BorderBottomWidth = borderWidth; // }); // } //} } break; case WebDom.WellknownName.BorderColor: //box.BorderLeftColor = // box.BorderTopColor = // box.BorderRightColor = // box.BorderBottomColor = CssValueParser.GetActualColor(attr.Value.ToLower()); break; case WebDom.WellknownName.CellSpacing: //html5 not support in HTML5, use CSS instead //box.BorderSpacingHorizontal = box.BorderSpacingVertical = TranslateLength(attr); break; case WebDom.WellknownName.CellPadding: { //html5 not support in HTML5, use CSS instead *** // CssLength len01 = UserMapUtil.ParseGenericLength(attr.Value.ToLower()); // if (len01.HasError && (len01.Number > 0)) // { // CssLength len02 = CssLength.MakePixelLength(len01.Number); // ForEachCellInTable(box, cell => // { //#if DEBUG // // cell.dbugBB = dbugTT++; //#endif // cell.PaddingLeft = cell.PaddingTop = cell.PaddingRight = cell.PaddingBottom = len02; // }); // } // else // { // ForEachCellInTable(box, cell => // cell.PaddingLeft = cell.PaddingTop = cell.PaddingRight = cell.PaddingBottom = len01); // } } break; case WebDom.WellknownName.Color: //deprecate // box.Color = CssValueParser.GetActualColor(attr.Value.ToLower()); break; case WebDom.WellknownName.Dir: { WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( attr.Value.ToLower(), WebDom.CssValueHint.Iden); //assign var spec = tag.Spec; spec.CssDirection = UserMapUtil.GetCssDirection(propValue); } break; case WebDom.WellknownName.Face: //deprecate //box.FontFamily = CssParser.ParseFontFamily(attr.Value.ToLower()); break; case WebDom.WellknownName.Height: { var spec = tag.Spec; spec.Height = TranslateLength(attr); } break; case WebDom.WellknownName.HSpace: //deprecated //box.MarginRight = box.MarginLeft = TranslateLength(attr); break; case WebDom.WellknownName.Nowrap: //deprecate //box.WhiteSpace = CssWhiteSpace.NoWrap; break; case WebDom.WellknownName.Size: { //deprecate //switch (tag.WellknownTagName) //{ // case WellknownHtmlTagName.HR: // { // box.Height = TranslateLength(attr); // } break; // case WellknownHtmlTagName.FONT: // { // var ruleset = activeTemplate.ParseCssBlock("", attr.Value.ToLower()); // foreach (WebDom.CssPropertyDeclaration propDecl in ruleset.GetAssignmentIter()) // { // //assign each property // AssignPropertyValue(box, box.ParentBox, propDecl); // } // //WebDom.CssCodePrimitiveExpression prim = new WebDom.CssCodePrimitiveExpression(value, // //box.SetFontSize(value); // } break; //} } break; case WebDom.WellknownName.VAlign: { //w3.org //valign for table display elements: //col,colgroup,tbody,td,tfoot,th,thead,tr WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( attr.Value.ToLower(), WebDom.CssValueHint.Iden); tag.Spec.VerticalAlign = UserMapUtil.GetVerticalAlign(propValue); } break; case WebDom.WellknownName.VSpace: //deprecated //box.MarginTop = box.MarginBottom = TranslateLength(attr); break; case WebDom.WellknownName.Width: { var spec = tag.Spec; spec.Width = TranslateLength(attr); } break; case WellknownName.Src: { var cssBoxImage = HtmlElement.InternalGetPrincipalBox(tag) as CssBoxImage; if (cssBoxImage != null) { string imgsrc; //ImageBinder imgBinder = null; if (tag.TryGetAttribute(WellknownName.Src, out imgsrc)) { CssBoxImage cssBoxImage1 = HtmlElement.InternalGetPrincipalBox(tag) as CssBoxImage; PixelFarm.Drawing.ImageBinder imgbinder1 = cssBoxImage1.ImageBinder; if (imgbinder1.ImageSource != imgsrc) { //var clientImageBinder = new ClientImageBinder(imgsrc); //imgbinder1 = clientImageBinder; //clientImageBinder.SetOwner(tag); cssBoxImage1.ImageBinder = new PixelFarm.Drawing.ImageBinder(imgsrc); } } else { //var clientImageBinder = new ClientImageBinder(null); //imgBinder = clientImageBinder; //clientImageBinder.SetOwner(tag); } } } break; } } } }