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