Bump. I really need to solve this. Any ideas? Thanks!
--- In [email protected], "greg_lafrance" <glafra...@...> wrote: > > I created a custom border class to create a dashed line border, and I > added two custom style properties "dashlen" and "gaplen", but I can't > set them. > > In the attached code, the default dashlen and gaplen are 5. > > I create three VBox using the DashBorder, and although I have created > a type selector style for DashBorder and a class selector style > tightDashBorder, neither one is applied. > > Also, I get errors when I try to access the style properties dashlen > and gaplen in the <mx:VBox> tag. I can access the borderColor style > property though. > > What more must I do to fix this? Thanks in advance!!! > > -------------------- DashBorder.as --------------------------- > package > { > import mx.skins.RectangularBorder; > import mx.styles.CSSStyleDeclaration; > import mx.styles.StyleManager; > > [Style(name="dashlen",type="Number",format="Length",inherit="no")] > [Style(name="gaplen",type="Number",format="Length",inherit="no")] > > public class DashBorder extends RectangularBorder{ > private static var classConstructed:Boolean = classConstruct(); > private var bStypePropChanged:Boolean = false; > private var dashlen:Number = 5; > private var gaplen:Number = 5; > > public function DashBorder(){ > super(); > } > > private static function classConstruct():Boolean { > if(!StyleManager.getStyleDeclaration("DashBorder")){ > var myBorderStyles:CSSStyleDeclaration = new > CSSStyleDeclaration(); > myBorderStyles.defaultFactory = function():void{ > this.dashlen = 5; > this.gaplen = 5; > } > StyleManager.setStyleDeclaration("DashBorder", > myBorderStyles, true); > } > return true; > } > > override public function styleChanged(styleProp:String):void { > super.styleChanged(styleProp); > if (styleProp=="dashlen" || styleProp=="gaplen"){ > bStypePropChanged=true; > invalidateDisplayList(); > return; > } > } > > override protected function updateDisplayList > (unscaledWidth:Number, unscaledHeight:Number):void{ > super.updateDisplayList(unscaledWidth, unscaledHeight); > var borderThickness:int = getStyle("borderThickness"); > var borderColor:int = getStyle("borderColor"); > graphics.clear(); > graphics.lineStyle(borderThickness, borderColor, 1) > > if (bStypePropChanged==true){ > this.dashlen = getStyle("dashlen"); > this.gaplen = getStyle("gaplen"); > bStypePropChanged=false; > } > drawBorder(this.x, this.y, unscaledWidth, unscaledHeight, > this.dashlen, this.gaplen); > } > > public function drawLine(x1:Number, y1:Number, x2:Number, > y2:Number, > dashlen:Number, gaplen:Number): void { > if((x1 != x2) || (y1 != y2)){ > var incrlen:Number = dashlen + gaplen; > > var len:Number = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) > * (y1 - y2)); > var angle:Number = Math.atan((y2 - y1) / (x2 - x1)); > var steps:uint = len / (dashlen + gaplen); > > var dashstepx:Number = dashlen * Math.cos(angle); > if (x2 < x1) dashstepx *= -1; > > var dashstepy:Number = dashlen * Math.sin(angle); > > var gapstepx:Number = gaplen * Math.cos(angle); > if (x2 < x1) gapstepx *= -1; > > var gapstepy:Number = gaplen * Math.sin(angle); > var stepcount:uint = 0; > > while ((stepcount++) < steps) { > > var dashstartx:Number; > var dashstarty:Number; > var dashendx:Number; > var dashendy:Number; > > if(x1 == x2 && y1 != y2){ > dashstartx = dashendx = x1; > if(y2 > y1){ > dashstarty = y1 + ((stepcount-1) * (dashlen + > gaplen)); > dashendy = dashstarty + dashlen; > }else{ > dashstarty = y1 - ((stepcount-1) * (dashlen + > gaplen)); > dashendy = dashstarty - dashlen; > } > }else if(y1 == y2 && x1 != x2){ > dashstarty = dashendy = y1; > if(x2 > x1){ > dashstartx = x1 + ((stepcount-1) * (dashlen + gaplen)); > dashendx = dashstartx + dashlen; > }else{ > dashstartx = x1 - ((stepcount-1) * (dashlen + gaplen)); > dashendx = dashstartx - dashlen; > } > } > graphics.moveTo(dashstartx, dashstarty); > graphics.lineTo(dashendx, dashendy); > } > } > } > > private function drawBorder(x1:Number, y1:Number, width:Number, > height:Number, > dashlen:Number, gaplen:Number) : void { > drawLine(x1, y1, x1 + width, y1, dashlen, gaplen); > drawLine(x1 + width, y1, x1 + width, y1 + height, dashlen, > gaplen); > drawLine(x1 + width, y1 + height, x1, y1 + height, dashlen, > gaplen); > drawLine(x1, y1 + height, x1, y1, dashlen, gaplen); > } > } > } > ------------------- Test.mxml ---------------------------- > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> > <mx:Style> > DashBorder { > dashlen: 10; > dashgap: 10; > } > > .tightDashBorder { > dashlen: 2; > dashgap: 2; > } > </mx:Style> > <mx:VBox borderSkin="DashBorder" backgroundColor="0xCCCC99" > backgroundAlpha="0.8" cornerRadius="14" paddingLeft="20" > paddingTop="20" > paddingRight="20" paddingBottom="20" borderThickness="1" > borderColor="0xFF0000" > width="400" height="200" styleName="tightDashBorder"> > </mx:VBox> > <mx:VBox borderSkin="DashBorder" backgroundColor="0xCCCC99" > backgroundAlpha="0.8" cornerRadius="14" paddingLeft="20" > paddingTop="20" > paddingRight="20" paddingBottom="20" borderThickness="1" > borderColor="0xFF0000" > width="30" height="30"> > </mx:VBox> > <mx:VBox id="vb" borderSkin="DashBorder" > backgroundColor="0xCCCC99" > backgroundAlpha="0.8" cornerRadius="14" paddingLeft="20" > paddingTop="20" > paddingRight="20" paddingBottom="20" borderThickness="1" > borderColor="0xFF0000" > width="10" height="10"> > </mx:VBox> > </mx:Application> >

