1  /*
     2   Copyright aswing.org, see the LICENCE.txt.
     3  */
     4   
     5  import org.aswing.*;
     6  import org.aswing.graphices.*;
     7  import org.aswing.plaf.*;
     8   
     9  /**
    10   *
    11   * @author iiley
    12   */
    13  class org.aswing.plaf.basic.icon.RadioButtonIcon implements Icon, UIResource{
    14      private var shadow:ASColor;
    15      private var darkShadow:ASColor;
    16      private var highlight:ASColor;
    17      private var lightHighlight:ASColor;
    18  
    19  	private static var instance:Icon;
    20  	/**
    21  	 * this make shared instance and construct when use.
    22  	 */	
    23  	public static function createInstance():Icon{
    24  		if(instance == null){
    25  			instance = new RadioButtonIcon();
    26  		}
    27  		return instance;
    28  	}
    29  
    30  	private function RadioButtonIcon(){
    31  		super();
    32  		var table:UIDefaults = UIManager.getLookAndFeelDefaults();
    33  		shadow = table.getColor("RadioButton.shadow");
    34  		darkShadow = table.getColor("RadioButton.darkShadow");
    35  		highlight = table.getColor("RadioButton.light");
    36  		lightHighlight = table.getColor("RadioButton.highlight");
    37  	}
    38  
    39  	public function getIconWidth():Number{
    40  		return 13;
    41  	}
    42  
    43  	public function getIconHeight():Number{
    44  		return 13;
    45  	}
    46  
    47  	public function paintIcon(com:Component, g:Graphics, x:Number, y:Number):Void{
    48  		var rb:JRadioButton = JRadioButton(com);
    49  		var model:ButtonModel = rb.getModel();
    50  		var drawDot:Boolean = model.isSelected();
    51  		
    52  		var periphery:ASColor = darkShadow;
    53  		var middle:ASColor = highlight;
    54  		var inner:ASColor = shadow;
    55  		var dot:ASColor = rb.getForeground();
    56  		
    57  		// Set up colors per RadioButtonModel condition
    58  		if (!model.isEnabled()) {
    59  			periphery = middle = inner = rb.getBackground();
    60  			dot = darkShadow;
    61  		} else if (model.isPressed()) {
    62  			periphery = shadow;
    63  			inner = darkShadow;
    64  		}
    65  		
    66  		var w:Number = getIconWidth();
    67  		var h:Number = getIconHeight();
    68  		var cx:Number = x + w/2;
    69  		var cy:Number = y + h/2;
    70  		var xr:Number = w/2;
    71  		var yr:Number = h/2;
    72  		
    73  		
    74  	    var colors:Array = [0xD5D5D5, 0x8D8D8D];
    75  		var alphas:Array = [100, 100];
    76      	var ratios:Array = [0, 255];
    77  	    var matrix:Object = {matrixType:"box", x:cx-xr, y:cy-yr, w:xr*2, h:yr*2, r:(90/180)*Math.PI};        
    78  	    var gBrush:GradientBrush=new GradientBrush(GradientBrush.LINEAR, colors, alphas, ratios, matrix);
    79  		g.fillEllipse(gBrush, cx-xr, cy-yr, xr*2, yr*2);
    80  		
    81  		
    82  		xr--;
    83  		yr--;
    84  		var sbrush:SolidBrush = new SolidBrush(middle);
    85  		g.fillEllipse(sbrush, cx-xr, cy-yr, xr*2, yr*2);
    86  		
    87  		xr--;
    88  		yr--;
    89  		sbrush = new SolidBrush(shadow, 1);
    90  		g.fillEllipse(sbrush, cx-xr, cy-yr, xr*2, yr*2);
    91  		
    92  		if(drawDot){
    93  			xr = w/5;
    94  			yr = h/5;
    95  			var brush:Brush = new SolidBrush(middle);
    96  			brush = new SolidBrush(dot);
    97  			g.fillEllipse(brush, cx-xr, cy-yr, xr*2, yr*2);			
    98  		}
    99  	}
   100  	public function uninstallIcon(com:Component):Void{
   101  	}
   102  }
   103