VgVisualElement CreateUseElement(VgVisualElement parentNode, SvgUseSpec spec) { VgUseVisualElement vgVisElem = new VgUseVisualElement(spec, _vgVisualDoc); AssignAttributes(spec); if (spec.Href != null) { //add to waiting list _waitingList.Add(vgVisElem); } //text x,y parentNode.AddChildElement(vgVisElem); return(vgVisElem); }
VgVisualElement CreatePath(VgVisualElement parentNode, SvgPathSpec pathSpec, SvgElement node) { VgVisualElement vgVisElem = new VgVisualElement(WellknownSvgElementName.Path, pathSpec, _vgVisualDoc); //** //#if DEBUG // if (node.ElemId == "x11") // { // vgVisElem.dbugNote = node.ElemId; // } //#endif //d AssignAttributes(pathSpec); vgVisElem.VxsPath = CreateVxsFromPathDefinition(pathSpec.D.ToCharArray()); ResolveMarkers(vgVisElem, pathSpec); if (vgVisElem._pathMarkers != null) { //create primary instance plan for this } parentNode.AddChildElement(vgVisElem); return(vgVisElem); }
VgVisualElement CreateTextElem(VgVisualElement parentNode, SvgElement elem, SvgTextSpec textspec) { //text render element VgVisualElement vgVisElem = new VgVisualElement(WellknownSvgElementName.Text, textspec, _vgVisualDoc); vgVisElem.DomElem = elem; //some att if (textspec.Class != null && _activeSheet1 != null) { //resolve style definition LayoutFarm.WebDom.CssRuleSetGroup ruleSetGroup = _activeSheet1.GetRuleSetForClassName(textspec.Class); if (ruleSetGroup != null) { //assign foreach (LayoutFarm.WebDom.CssPropertyDeclaration propDecl in ruleSetGroup.GetPropertyDeclIter()) { switch (propDecl.WellknownPropertyName) { case LayoutFarm.WebDom.WellknownCssPropertyName.Font: //set font detail break; case LayoutFarm.WebDom.WellknownCssPropertyName.FontStyle: //convert font style break; case LayoutFarm.WebDom.WellknownCssPropertyName.FontSize: textspec.FontSize = propDecl.GetPropertyValue(0).AsLength(); break; case LayoutFarm.WebDom.WellknownCssPropertyName.FontFamily: textspec.FontFace = propDecl.GetPropertyValue(0).ToString(); break; case LayoutFarm.WebDom.WellknownCssPropertyName.Fill: textspec.FillColor = LayoutFarm.WebDom.Parser.CssValueParser.ParseCssColor(propDecl.GetPropertyValue(0).ToString()); break; case LayoutFarm.WebDom.WellknownCssPropertyName.Unknown: { switch (propDecl.UnknownRawName) { case "fill": //svg break; } } break; } } } } ReEvaluateArgs a = new ReEvaluateArgs(_containerWidth, _containerHeight, _emHeight); //temp fix textspec.ActualX = ConvertToPx(textspec.X, ref a); textspec.ActualY = ConvertToPx(textspec.Y, ref a); AssignAttributes(textspec); //text x,y parentNode.AddChildElement(vgVisElem); return(vgVisElem); }
VgVisualElement CreateSvgVisualElement(VgVisualElement parentNode, SvgElement elem) { VgVisualElement vgVisElem = null; bool skipChildrenNode = false; switch (elem.WellknowElemName) { default: throw new NotSupportedException(); //----------------- case WellknownSvgElementName.Unknown: return(null); case WellknownSvgElementName.FeColorMatrix: vgVisElem = CreateFeColorMatrix(parentNode, elem, (SvgFeColorMatrixSpec)elem.ElemSpec); //no more child parentNode.AddChildElement(vgVisElem); return(vgVisElem); case WellknownSvgElementName.Filter: vgVisElem = CreateFilterElem(parentNode, elem, (SvgFilterSpec)elem.ElemSpec); break; case WellknownSvgElementName.RadialGradient: //TODO: add radial grapdient support //this version not support linear gradient return(CreateRadialGradient(parentNode, elem, (SvgRadialGradientSpec)elem.ElemSpec)); case WellknownSvgElementName.LinearGradient: //TODO: add linear grapdient support //this version not support linear gradient return(CreateLinearGradient(parentNode, elem, (SvgLinearGradientSpec)elem.ElemSpec)); case WellknownSvgElementName.Defs: _defsList.Add(elem); return(null); case WellknownSvgElementName.Style: _styleList.Add(elem); return(null); case WellknownSvgElementName.Marker: vgVisElem = CreateMarker(parentNode, (SvgMarkerSpec)elem.ElemSpec); break; case WellknownSvgElementName.Mask: vgVisElem = CreateMask(parentNode, (SvgMaskSpec)elem.ElemSpec); break; case WellknownSvgElementName.Svg: vgVisElem = new VgVisualElement(WellknownSvgElementName.Svg, (SvgVisualSpec)elem.ElemSpec, _vgVisualDoc); break; case WellknownSvgElementName.Rect: vgVisElem = CreateRect(parentNode, (SvgRectSpec)elem.ElemSpec); break; case WellknownSvgElementName.Image: vgVisElem = CreateImage(parentNode, (SvgImageSpec)elem.ElemSpec); break; case WellknownSvgElementName.Polyline: vgVisElem = CreatePolyline(parentNode, (SvgPolylineSpec)elem.ElemSpec); break; case WellknownSvgElementName.Polygon: vgVisElem = CreatePolygon(parentNode, (SvgPolygonSpec)elem.ElemSpec); break; case WellknownSvgElementName.Ellipse: vgVisElem = CreateEllipse(parentNode, (SvgEllipseSpec)elem.ElemSpec); break; case WellknownSvgElementName.Circle: vgVisElem = CreateCircle(parentNode, (SvgCircleSpec)elem.ElemSpec); break; case WellknownSvgElementName.Line: vgVisElem = CreateLine(parentNode, (SvgLineSpec)elem.ElemSpec); break; case WellknownSvgElementName.ClipPath: vgVisElem = CreateClipPath(parentNode, (SvgVisualSpec)elem.ElemSpec); break; case WellknownSvgElementName.Group: vgVisElem = CreateGroup(parentNode, (SvgVisualSpec)elem.ElemSpec); break; //--------------------------------------------- case WellknownSvgElementName.Path: vgVisElem = CreatePath(parentNode, (SvgPathSpec)elem.ElemSpec, elem); skipChildrenNode = true; //*** break; case WellknownSvgElementName.Text: vgVisElem = CreateTextElem(parentNode, elem, (SvgTextSpec)elem.ElemSpec); skipChildrenNode = true; //*** break; case WellknownSvgElementName.Use: vgVisElem = CreateUseElement(parentNode, (SvgUseSpec)elem.ElemSpec); skipChildrenNode = true; break; } if (vgVisElem == null) { //TODO: review here return(null); } //----------------------------------- vgVisElem.DomElem = elem; if (elem.ElemId != null) { //replace duplicated item ??? _registeredElemsById[elem.ElemId] = vgVisElem; } vgVisElem.SetController(elem); #if DEBUG if (skipChildrenNode && !vgVisElem.dbugHasParent) { } #endif //----------------------------------- if (!skipChildrenNode) { parentNode.AddChildElement(vgVisElem); int childCount = elem.ChildCount; for (int i = 0; i < childCount; ++i) { CreateSvgVisualElement(vgVisElem, elem.GetChild(i)); } } return(vgVisElem); }