internal static LayoutFarm.HtmlBoxes.CssBox CreateCssBox( LayoutFarm.WebDom.IHtmlElement domE, LayoutFarm.HtmlBoxes.CssBox parentBox, LayoutFarm.Css.BoxSpec spec, LayoutFarm.HtmlBoxes.HtmlHost htmlhost) { //create cssbox //test only! var newspec = new BoxSpec(); BoxSpec.InheritStyles(newspec, spec); newspec.BackgroundColor = Color.Blue; newspec.Width = new CssLength(50, CssUnitOrNames.Pixels); newspec.Height = new CssLength(50, CssUnitOrNames.Pixels); newspec.Position = CssPosition.Absolute; newspec.Freeze(); //freeze before use HtmlElement htmlElement = (HtmlElement)domE; var newBox = new CssBox(newspec, parentBox.RootGfx); newBox.SetController(domE); htmlElement.SetPrincipalBox(newBox); //auto set bc of the element parentBox.AppendChild(newBox); htmlhost.UpdateChildBoxes(htmlElement, true); //---------- return newBox; }
internal static CssBox CreateIsolateBox(IFonts iFonts, RootGraphic rootgfx) { var spec = new BoxSpec(); spec.CssDisplay = CssDisplay.Block; spec.Freeze(); var box = new CssIsolateBox(spec, rootgfx); //------------------------------------ box.ReEvaluateFont(iFonts, 10); //------------------------------------ return box; }
internal static CssBox CreateBridgeBox(IFonts iFonts, LayoutFarm.RenderElement containerElement, RootGraphic rootgfx) { var spec = new BoxSpec(); spec.CssDisplay = CssDisplay.Block; spec.Freeze(); var box = new RenderElementBridgeCssBox(spec, containerElement, rootgfx); //------------------------------------ box.ReEvaluateFont(iFonts, 10); //------------------------------------ return box; }
internal void ApplyCacheTemplate(string elemName, string class_value, BoxSpec currentBoxSpec, BoxSpec parentSpec) { //1. tag name key int tagNameKey = ustrTable.AddStringIfNotExist(elemName); //2. class name key int classNameKey = 0; if (class_value != null) { classNameKey = ustrTable.AddStringIfNotExist(class_value); } //find cache in the same level var templateKey = new CssTemplateKey(tagNameKey, classNameKey); //BoxSpec boxTemplate = SearchUpBoxSpec(templateKey); BoxSpec boxTemplate = null; if (boxTemplate != null) { BoxSpec.CloneAllStyles(currentBoxSpec, boxTemplate); } else { //create template for specific key boxTemplate = new BoxSpec(); //copy current spec to boxTemplate BoxSpec.CloneAllStyles(boxTemplate, currentBoxSpec); //*** //---------------------------- //1. tag name CssRuleSetGroup ruleGroup = activeSheet.GetRuleSetForTagName(elemName); if (ruleGroup != null) { //currentBoxSpec.VersionNumber++; foreach (WebDom.CssPropertyDeclaration decl in ruleGroup.GetPropertyDeclIter()) { SpecSetter.AssignPropertyValue(boxTemplate, parentSpec, decl); } } //---------------------------- //2. series of class if (class_value != null) { //currentBoxSpec.VersionNumber++; string[] classNames = class_value.Split(_whiteSplitter, StringSplitOptions.RemoveEmptyEntries); int j = classNames.Length; if (j > 0) { for (int i = 0; i < j; ++i) { CssRuleSetGroup ruleSetGroup = activeSheet.GetRuleSetForClassName(classNames[i]); if (ruleSetGroup != null) { foreach (var propDecl in ruleSetGroup.GetPropertyDeclIter()) { SpecSetter.AssignPropertyValue(boxTemplate, parentSpec, propDecl); } //--------------------------------------------------------- //find subgroup for more specific conditions int subgroupCount = ruleSetGroup.SubGroupCount; for (int m = 0; m < subgroupCount; ++m) { //find if selector condition match with this box CssRuleSetGroup ruleSetSubGroup = ruleSetGroup.GetSubGroup(m); var selector = ruleSetSubGroup.OriginalSelector; } } } } } boxTemplate.Freeze(); //this.CacheBoxSpec(templateKey, boxTemplate); boxTemplate.IsTemplate = true; //copy back from template to currentBoxSpec BoxSpec.CloneAllStyles(currentBoxSpec, boxTemplate); } }