示例#1
0
        public Element CreateElementNS(String namespaceURI, String tagName)
        {
            Element element = null;

            if (namespaceURI == Namespaces.Html)
            {
                element = HTMLElement.Factory(tagName);
            }
            else if (namespaceURI == Namespaces.Svg)
            {
                element = SVGElement.Create(tagName);
            }
            else if (namespaceURI == Namespaces.MathML)
            {
                element = MathMLElement.Create(tagName);
            }
            else if (namespaceURI == Namespaces.Xml)
            {
                element = XMLElement.Create(tagName);
            }
            else
            {
                element = new Element {
                    NamespaceURI = namespaceURI, NodeName = tagName
                }
            };

            element.OwnerDocument = this;
            return(element);
        }
示例#2
0
        /// <summary>
        /// Create the SVG image.
        /// </summary>
        /// <param name="container">Containing element.</param>
        /// <param name="options">Dictionary of options.</param>
        /// <returns>Newly created SVG image.</returns>
        private static SVGElement createDom_(Element container, Options options)
        {
            // Sadly browsers (Chrome vs Firefox) are currently inconsistent in laying
            // out content in RTL mode.  Therefore Blockly forces the use of LTR,
            // then manually positions content in RTL as needed.
            container.SetAttribute("dir", "LTR");
            // Closure can be trusted to create HTML widgets with the proper direction.
            goog.ui.Component.setDefaultRightToLeft(options.RTL);

            // Load CSS.
            Css.inject(options.hasCss, options.pathToMedia);
#if false
            // Build the SVG DOM.

            /*
             * <svg
             * xmlns="http://www.w3.org/2000/svg"
             * xmlns:html="http://www.w3.org/1999/xhtml"
             * xmlns:xlink="http://www.w3.org/1999/xlink"
             * version="1.1"
             * class="blocklySvg">
             * ...
             * </svg>
             */
            var svg = Core.createSvgElement("svg", new Dictionary <string, object>()
            {
                { "xmlns", "http://www.w3.org/2000/svg" },
                { "xmlns:html", "http://www.w3.org/1999/xhtml" },
                { "xmlns:xlink", "http://www.w3.org/1999/xlink" },
                { "version", "1.1" },
                { "class", "blocklySvg" }
            }, container);

            /*
             * <defs>
             * ... filters go here ...
             * </defs>
             */
            var defs = Core.createSvgElement("defs", new Dictionary <string, object>(), svg);
            var rnd  = Script.Random().ToString().Substring(2);

            /*
             * <filter id="blocklyEmbossFilter837493">
             *      <feGaussianBlur in="SourceAlpha" stdDeviation="1" result="blur"/>
             *      <feSpecularLighting in="blur" surfaceScale="1" specularConstant="0.5"
             *                                              specularExponent="10" lighting-color="white"
             *                                              result="specOut">
             *        <fePointLight x="-5000" y="-10000" z="20000"/>
             *      </feSpecularLighting>
             *      <feComposite in="specOut" in2="SourceAlpha" operator="in"
             *                               result="specOut"/>
             *      <feComposite in="SourceGraphic" in2="specOut" operator="arithmetic"
             *                               k1="0" k2="1" k3="1" k4="0"/>
             * </filter>
             */
            var embossFilter = Core.createSvgElement("filter", new Dictionary <string, object>()
            {
                { "id", "blocklyEmbossFilter" + rnd }
            }, defs);
            Core.createSvgElement("feGaussianBlur", new Dictionary <string, object>()
            {
                { "in", "SourceAlpha" }, { "stdDeviation", 1 }, { "result", "blur" }
            }, embossFilter);
            var feSpecularLighting = Core.createSvgElement("feSpecularLighting", new Dictionary <string, object>()
            {
                { "in", "blur" }, { "surfaceScale", 1 }, { "specularConstant", 0.5 },
                { "specularExponent", 10 }, { "lighting-color", "white" }, { "result", "specOut" }
            },
                                                           embossFilter);
            Core.createSvgElement("fePointLight", new Dictionary <string, object>()
            {
                { "x", -5000 }, { "y", -10000 }, { "z", 20000 }
            }, feSpecularLighting);
            Core.createSvgElement("feComposite", new Dictionary <string, object>()
            {
                { "in", "specOut" }, { "in2", "SourceAlpha" }, { "operator", "in" },
                { "result", "specOut" }
            }, embossFilter);
            Core.createSvgElement("feComposite", new Dictionary <string, object>()
            {
                { "in", "SourceGraphic" }, { "in2", "specOut" }, { "operator", "arithmetic" },
                { "k1", 0 }, { "k2", 1 }, { "k3", 1 }, { "k4", 0 }
            }, embossFilter);
            options.embossFilterId = embossFilter.Id;

            /*
             * <pattern id="blocklyDisabledPattern837493" patternUnits="userSpaceOnUse"
             *                 width="10" height="10">
             *      <rect width="10" height="10" fill="#aaa" />
             *      <path d="M 0 0 L 10 10 M 10 0 L 0 10" stroke="#cc0" />
             * </pattern>
             */
            var disabledPattern = Core.createSvgElement("pattern", new Dictionary <string, object>()
            {
                { "id", "blocklyDisabledPattern" + rnd },
                { "patternUnits", "userSpaceOnUse" },
                { "width", 10 }, { "height", 10 }
            }, defs);
            Core.createSvgElement("rect", new Dictionary <string, object>()
            {
                { "width", 10 }, { "height", 10 }, { "fill", "#aaa" }
            }, disabledPattern);
            Core.createSvgElement("path", new Dictionary <string, object>()
            {
                { "d", "M 0 0 L 10 10 M 10 0 L 0 10" }, { "stroke", "#cc0" }
            }, disabledPattern);
            options.disabledPatternId = disabledPattern.Id;

            /*
             * <pattern id="blocklyGridPattern837493" patternUnits="userSpaceOnUse">
             *      <rect stroke="#888" />
             *      <rect stroke="#888" />
             * </pattern>
             */
            var gridPattern = Core.createSvgElement("pattern", new Dictionary <string, object>()
            {
                { "id", "blocklyGridPattern" + rnd },
                { "patternUnits", "userSpaceOnUse" }
            }, defs);
            if (options.gridOptions.length > 0 && options.gridOptions.spacing > 0)
            {
                Core.createSvgElement("line", new Dictionary <string, object>()
                {
                    { "stroke", options.gridOptions.colour }
                },
                                      gridPattern);
                if (options.gridOptions.length > 1)
                {
                    Core.createSvgElement("line", new Dictionary <string, object>()
                    {
                        { "stroke", options.gridOptions.colour }
                    },
                                          gridPattern);
                }
                // x1, y1, x1, x2 properties will be set later in updateGridPattern_.
            }
            options.gridPattern = gridPattern;
#else
            var opt         = Script.NewObject();
            var gridOptions = Script.NewObject();
            Script.Set(gridOptions, "spacing", options.gridOptions.spacing);
            Script.Set(gridOptions, "colour", options.gridOptions.colour);
            Script.Set(gridOptions, "length", options.gridOptions.length);
            Script.Set(gridOptions, "snap", options.gridOptions.snap);
            Script.Set(opt, "gridOptions", gridOptions);
            var svg = SVGElement.Create(Script.CreateSvgDom(container.Instance, opt));
            options.embossFilterId    = (string)Script.Get(opt, "embossFilterId");
            options.disabledPatternId = (string)Script.Get(opt, "disabledPatternId");
            options.gridPattern       = SVGElement.Create(Script.Get(opt, "gridPattern"));
#endif
            return(svg);
        }