package skins { import flash.display.GradientType; import flash.geom.Matrix; import mx.skins.ProgrammaticSkin; import mx.utils.ColorUtil; public class ComboSkin extends ProgrammaticSkin { private var backgroundColor: uint = 0xFFFFFF; private var padding: uint = 1; private var borderThickness: uint = 2; private var borderColor: uint; private var borderAlpha: Number = 0.5; private var backgroundAlpha: Number = 1; private var radius: uint = 0; override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { graphics.clear(); drawRoundRect(0, 0, unscaledWidth, unscaledHeight, 0, 0, 0); borderColor = getStyle('borderColor'); backgroundColor = getStyle('fillColors')[0]; var showArrow: Boolean = false; switch (name) { case "upSkin": break; case "overSkin": showArrow = true; break; case "downSkin": showArrow = true; backgroundAlpha = 1; break; case "disabledSkin": alpha = 0.3; break; } var arrowZoneWidth: Number = 24; var fieldWidth: Number = unscaledWidth; if (showArrow) { radius = 6; fieldWidth -= arrowZoneWidth; } var colsBorder: Array; colsBorder = [ColorUtil.adjustBrightness(borderColor, 40), borderColor]; with (graphics) { beginFill(backgroundColor, backgroundAlpha); drawRoundRect(0, 0, fieldWidth, unscaledHeight); endFill(); beginFill(0xFFFFFF, 0.3); lineStyle(1, colsBorder[1], 1, true); moveTo(0, 0); lineTo(fieldWidth, 0); lineStyle(1, colsBorder[0], 1, true); lineTo(fieldWidth, unscaledHeight); lineTo(0, unscaledHeight); lineTo(0, 0); endFill(); //cuts lineStyle(1, 0xFFFFFF, 0.5, true); moveTo(0,0); lineTo(1, 1); moveTo(0,unscaledHeight); lineTo(1, unscaledHeight-1); //right if (!showArrow) { moveTo(unscaledWidth, 0); lineTo(unscaledWidth-1, 1); moveTo(unscaledWidth, unscaledHeight); lineTo(unscaledWidth-1, unscaledHeight-1); } else { var adj: int = 10; var thickness: int = 1; var alphas: Array = [0.6, 0.6, 0.45, 0.45]; var borderAlpha: Number = 0.55; if ('downSkin' == name) { adj = -20; thickness = 2; for (var alpha: String in alphas) { alphas[alpha] -= 0.3; } borderAlpha -= 0.3; } colsBorder = [0xFFFFFF, ColorUtil.adjustBrightness(backgroundColor, adj)]; lineStyle(thickness, colsBorder[1], 0.6, true); beginFill(backgroundColor, 1); drawRoundRectComplex(fieldWidth, 0, arrowZoneWidth, unscaledHeight, 0, radius, 0, radius); endFill(); lineStyle(1, colsBorder[0], borderAlpha, true); var cols: Array = [ 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF ]; var matrix: Matrix = new Matrix(); matrix.createGradientBox(unscaledWidth, unscaledHeight, Math.PI/2); beginGradientFill(GradientType.LINEAR, cols, alphas, [0, 100, 130, 255], matrix); drawRoundRectComplex(fieldWidth+1, 1, arrowZoneWidth - 2, unscaledHeight - 2, 0, radius, 0, radius); } } var cX: int = unscaledWidth - 12; var cY: int = unscaledHeight/2; with (graphics) { //Down lineStyle(0, 0, 0, true); beginFill(ColorUtil.adjustBrightness(borderColor, -80)); moveTo(cX + 4, cY - 3); lineTo(cX - 4, cY - 3); lineTo(cX, cY + 3); lineTo(cX + 4, cY - 3); endFill(); } } } }