import spark.components.TabBar; static private const exclusions:Array = ["labelDisplay"]; /** * @private */ override public function get colorizeExclusions():Array {return exclusions;} /** * @private */ override protected function initializationComplete():void { super.initializationComplete(); } private var cornerRadius:Number = 4 /** * @private * The borderTop s:Path is just a s:Rect with the bottom edge left out. * Given the rounded corners per the cornerRadius style, the result is * roughly an inverted U with the specified width, height, and cornerRadius. * * Circular arcs are drawn with two curves per flash.display.Graphics.GraphicsUtil. */ private function updateBorderTop(width:Number, height:Number):void { var left:Number = -0.5; var right:Number = width - 0.5; var top:Number = 0.5; var bottom:Number = height; var a:Number = cornerRadius * 0.292893218813453; var s:Number = cornerRadius * 0.585786437626905; var path:String = ""; path += "M " + left + " " + bottom; path += " L " + left + " " + (top + cornerRadius); path += " Q " + left + " " + (top + s) + " " + (left + a) + " " + (top + a); path += " Q " + (left + s) + " " + top + " " + (left + cornerRadius) + " " + top; path += " L " + (right - cornerRadius) + " " + top; path += " Q " + (right - s) + " " + top + " " + (right - a) + " " + (top + a); path += " Q " + right + " " + (top + s) + " " + right + " " + (top + cornerRadius); path += " L " + right + " " + bottom; borderTop.data = path; } /** * @private * The cornerRadius style is specified by the TabBar, not the button itself. * * Rather than bind the corner radius properties of the s:Rect's in the markup * below to hostComponent.owner.getStyle("cornerRadius"), we reset them here, * each time a change in the value of the style is detected. Note that each * corner radius property is explicitly initialized to the default value of * the style; the initial value of the private cornerRadius property. */ private function updateCornerRadius():void { var cr:Number = getStyle("cornerRadius"); if (cornerRadius != cr) { cornerRadius = cr; fill.topLeftRadiusX = cornerRadius; fill.topRightRadiusX = cornerRadius; lowlight.radiusX = cornerRadius; highlight.radiusX = cornerRadius; highlightStroke.topLeftRadiusX = cornerRadius; highlightStroke.topRightRadiusX = cornerRadius; } } /** * @private */ override protected function updateDisplayList(unscaledWidth:Number, unscaleHeight:Number):void { updateCornerRadius(); updateBorderTop(unscaledWidth, unscaledHeight); super.updateDisplayList(unscaledWidth, unscaledHeight); }