Looks good
On 2021/12/13 14:29:25 Harbs wrote: > I just committed a fix for that. Sorry… > > Let me know if I messed up anything else. > > > On Dec 13, 2021, at 4:23 PM, Yishay Weiss <yish...@apache.org> wrote: > > > > I’m afraid u did. > > > > This line > > > > var /** @type {SVGStyleElement} */ style = new SVGStyleElement(); > > > > Results in > > > > TypeError: Illegal constructor > > > > > > On 2021/12/12 13:49:21 Harbs wrote: > >> Someone who’s using Spark DropDownListButton: > >> > >> Please check that I didn’t break this… > >> > >> Thanks, > >> Harbs > >> > >>> On Dec 12, 2021, at 3:46 PM, ha...@apache.org wrote: > >>> > >>> This is an automated email from the ASF dual-hosted git repository. > >>> > >>> harbs pushed a commit to branch develop > >>> in repository https://gitbox.apache.org/repos/asf/royale-asjs.git > >>> > >>> > >>> The following commit(s) were added to refs/heads/develop by this push: > >>> new 39b4dcf Removed innerHTML from DropDownListButton > >>> 39b4dcf is described below > >>> > >>> commit 39b4dcf092c451675db4d7e762ea6747574be6f3 > >>> Author: Harbs <ha...@in-tools.com> > >>> AuthorDate: Sun Dec 12 15:46:42 2021 +0200 > >>> > >>> Removed innerHTML from DropDownListButton > >>> --- > >>> .../supportClasses/DropDownListButton.as | 161 > >>> +++++++++++++++------ > >>> 1 file changed, 118 insertions(+), 43 deletions(-) > >>> > >>> diff --git > >>> a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as > >>> > >>> b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as > >>> index 420e1df..de5c2cc 100644 > >>> --- > >>> a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as > >>> +++ > >>> b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as > >>> @@ -20,8 +20,21 @@ > >>> package spark.components.supportClasses > >>> { > >>> import spark.components.Button; > >>> + COMPILE::JS > >>> + { > >>> + import org.apache.royale.svg.elements.Svg; > >>> + import org.apache.royale.svg.elements.ClipPath; > >>> + import org.apache.royale.svg.elements.Text; > >>> + import org.apache.royale.svg.elements.Rect; > >>> + import org.apache.royale.svg.elements.Path; > >>> + import org.apache.royale.core.WrappedHTMLElement; > >>> + import org.apache.royale.core.WrappedHTMLElement; > >>> + import org.apache.royale.svg.elements.Svg; > >>> + import org.apache.royale.svg.elements.ClipPath; > >>> + import org.apache.royale.svg.GraphicShape; > >>> + } > >>> > >>> - /** > >>> + /** > >>> */ > >>> public class DropDownListButton extends Button > >>> { > >>> @@ -30,7 +43,7 @@ package spark.components.supportClasses > >>> > >>> /** > >>> * Constructor. > >>> - * > >>> + * > >>> * @langversion 3.0 > >>> * @playerversion Flash 10 > >>> * @playerversion AIR 1.5 > >>> @@ -38,57 +51,119 @@ package spark.components.supportClasses > >>> */ > >>> public function DropDownListButton() > >>> { > >>> - super(); > >>> instanceId = instanceCounter.toString(); > >>> instanceCounter++; > >>> + super(); > >>> } > >>> > >>> private var instanceId:String; > >>> > >>> - override public function setActualSize(w:Number, h:Number):void > >>> - { > >>> - super.setActualSize(w, h); > >>> - COMPILE::JS > >>> - { > >>> - updateSkin(w, h); > >>> - } > >>> - } > >>> + override public function setActualSize(w:Number, h:Number):void > >>> + { > >>> + super.setActualSize(w, h); > >>> + COMPILE::JS > >>> + { > >>> + updateSkin(w, h); > >>> + } > >>> + } > >>> > >>> - COMPILE::JS > >>> - override public function set label(value:String):void > >>> - { > >>> - super.label = value; > >>> - updateSkin(width, height); > >>> - } > >>> + COMPILE::JS > >>> + override public function set label(value:String):void > >>> + { > >>> + super.label = value; > >>> + updateSkin(width, height); > >>> + } > >>> > >>> - COMPILE::JS > >>> - private function updateSkin(w:Number, h:Number):void > >>> - { > >>> - var clipid:String = "txtClip" + instanceId; > >>> + COMPILE::JS > >>> + private function updateSkin(w:Number, h:Number):void > >>> + { > >>> if (h < 4) return; > >>> - element.innerHTML = '<svg width="' + w + 'px" height="' + > >>> - h + 'px" xmlns="http://www.w3.org/2000/svg"><clipPath > >>> id="' + clipid + '"><rect x="0" y="0" height="' + h + > >>> - 'px" width="' + (w - 29) + > >>> 'px"/></clipPath><text y="3px" clip-path="url(#' + clipid + ')">' + > >>> - label + '</text><style><![CDATA[' + > >>> - 'text{ dominant-baseline: hanging;' + > >>> - /* font: 12px Verdana, Helvetica, Arial, sans-serif;*/ > >>> - '}]]></style><rect x="' + > >>> - (w - 26) + 'px" width="1px" height="' + (h - 4) + > >>> 'px"/><path d="M' + > >>> - (w - 21) + ',5 L ' + (w - 13) + ',5 L ' + > >>> - (w - 17) + ',12 L ' + (w - 21) + ',5"</path></svg>'; > >>> - > >>> - } > >>> + text.element.textContent = label; > >>> + svg.width = w; > >>> + svg.element.style.width = w + "px"; > >>> + svg.height = h; > >>> + svg.element.style.height = h + "px"; > >>> + rect.x = w - 26; > >>> + rect.height = h - 4; > >>> + var d:String = 'M' + (w - 21) + ',5 L ' + (w - 13) + > >>> ',5 L ' + > >>> + (w - 17) + ',12 L ' + (w - 21) + ',5'; > >>> + path.element.setAttribute("d",d); > >>> + // element.innerHTML = '<svg width="' + w + 'px" > >>> height="' + > >>> + // h + 'px" > >>> xmlns="http://www.w3.org/2000/svg"><clipPath id="' + clipid + '"><rect > >>> x="0" y="0" height="' + h + > >>> + // 'px" width="' + (w - 29) + > >>> 'px"/></clipPath><text y="3px" clip-path="url(#' + clipid + ')">' + > >>> + // label + '</text><style><![CDATA[' + > >>> + // 'text{ dominant-baseline: hanging;' + > >>> + // /* font: 12px Verdana, Helvetica, Arial, > >>> sans-serif;*/ > >>> + // '}]]></style><rect x="' + > >>> + // (w - 26) + 'px" width="1px" height="' + (h - 4) > >>> + 'px"/><path d="M' + > >>> + // (w - 21) + ',5 L ' + (w - 13) + ',5 L ' + > >>> + // (w - 17) + ',12 L ' + (w - 21) + > >>> ',5"</path></svg>'; > >>> + > >>> + } > >>> > >>> - > >>> //-------------------------------------------------------------------------- > >>> - // > >>> - // Overridden methods > >>> - // > >>> - > >>> //-------------------------------------------------------------------------- > >>> - > >>> - override public function get measuredHeight():Number > >>> - { > >>> - return 21; // maybe measure font someday if fontSize is large > >>> - } > >>> + override protected function createElement():WrappedHTMLElement > >>> + { > >>> + var elem:WrappedHTMLElement = super.createElement(); > >>> + svg = new Svg(); > >>> + clipPath = new ClipPath(); > >>> + var clipid:String = "txtClip" + instanceId; > >>> + clipPath.id = clipid; > >>> + clipRect = new Rect(); > >>> + clipRect.x = 0; > >>> + clipRect.y = 0; > >>> + clipPath.addElement(clipRect); > >>> + svg.addElement(clipPath); > >>> + text = new Text(); > >>> + text.y = 3; > >>> + text.element.setAttribute("clip-path",'url(#' + clipid > >>> + ')'); > >>> + svg.addElement(text) > >>> + var style:SVGStyleElement = new SVGStyleElement(); > >>> + style.innerHTML = '<![CDATA[' + > >>> + 'text{ dominant-baseline: hanging;' + > >>> + /* font: 12px Verdana, Helvetica, Arial, > >>> sans-serif;*/ > >>> + '}]]>'; > >>> + svg.element.appendChild(style); > >>> + rect = new Rect(); > >>> + rect.width = 1; > >>> + svg.addElement(rect); > >>> + path = new Path(); > >>> + svg.addElement(path); > >>> + return elem; > >>> + } > >>> + COMPILE::JS > >>> + private var svg:Svg; > >>> + COMPILE::JS > >>> + private var clipPath:ClipPath; > >>> + COMPILE::JS > >>> + private var clipRect:Rect; > >>> + COMPILE::JS > >>> + private var text:Text; > >>> + COMPILE::JS > >>> + private var rect:Rect; > >>> + COMPILE::JS > >>> + private var path:Path; > >>> + //style > >>> + > >>> + /** > >>> + * svg > >>> + * clipPath > >>> + * rect > >>> + * text > >>> + * style > >>> + * rect > >>> + * path > >>> + */ > >>> + > >>> + > >>> //-------------------------------------------------------------------------- > >>> + // > >>> + // Overridden methods > >>> + // > >>> + > >>> //-------------------------------------------------------------------------- > >>> + > >>> + override public function get measuredHeight():Number > >>> + { > >>> + return 21; // maybe measure font someday if fontSize is > >>> large > >>> + } > >>> > >>> } > >>> } > >>> \ No newline at end of file > >> > >> > >