package game.module.chat.components
{
import flash.display.CapsStyle;
import flash.display.LineScaleMode;
import flash.display.Sprite;
import flash.events.Event;
public class Component extends Sprite
{
private var _width : int;
private var _height : int;
private var _enabled:Boolean = true;
private var _isInstallChilded:Boolean = false;
public function Component()
{
//初始化子组件
installChild();
_isInstallChilded = true;
//布局
layout();
}
/** 初始化子组件 */
protected function installChild():void
{
addEventListener(Event.ADDED, addedHandler);
}
/** 布局前 */
private function layoutPre() : void
{
if(isInstallChilded == false) return;
layout();
}
/** 布局 */
protected function layout() : void
{
//绘制
draw();
}
/** 绘制 */
protected function draw() : void
{
if(background == false && border == false)
{
graphics.clear();
return;
}
graphics.clear();
graphics.moveTo(0, 0);
if(border)
{
graphics.lineStyle(borderWidth, borderColor, borderAlpha, true, LineScaleMode.NONE, CapsStyle.ROUND);
}
if(background)
{
graphics.beginFill(backgroundColor, backgroundAlpha);
}
_ellipseHeight = isNaN(ellipseHeight) && !isNaN(ellipseWidth) ? ellipseWidth : ellipseHeight;
var rectX:Number = 0;
var rectY:Number = 0;
var rectWidth:Number = width;
var rectHeight:Number = height;
if(borderWidth > 0)
{
rectX = borderWidth / 2;
rectY = borderWidth / 2;
rectWidth = rectWidth - borderWidth;
rectHeight = rectHeight - borderWidth;
}
graphics.drawRoundRect(rectX, rectY, rectWidth, rectHeight, ellipseWidth, ellipseHeight);
graphics.endFill();
}
private function addedHandler(event:Event):void
{
layout();
}
///
// getter/setters
///
override public function set width(value : Number) : void
{
var newWidth : int = Math.floor(value);
if (_width == newWidth) return;
_width = newWidth;
layoutPre();
dispatchEvent(new Event(Event.RESIZE));
}
override public function get width() : Number
{
return isNaN(_width) ? super.width : _width;
}
/*----------------------------------------*/
override public function set height(value : Number) : void
{
var newHeight : int = Math.floor(value);
if (_height == newHeight) return;
_height = newHeight;
layoutPre();
dispatchEvent(new Event(Event.RESIZE));
}
override public function get height() : Number
{
return isNaN(_height) ? super.height : _height;
}
/*----------------------------------------*/
public function get isInstallChilded():Boolean
{
return _isInstallChilded;
}
/*----------------------------------------*/
public function get enabled():Boolean
{
return _enabled;
}
public function set enabled(value:Boolean):void
{
_enabled = value;
this.alpha = 0.5;
}
/*----------------------------------------*/
/**
* 背景是否开启
* */
private var _background:Boolean = false;
/**
* 背景是否开启
* */
public function set background(value:Boolean):void
{
_background = value;
draw();
}
public function get background():Boolean
{
return _background;
}
/*----------------------------------------*/
/**
* 背景颜色
* */
private var _backgroundColor:Number = 0xcccccc;
/**
* 背景颜色
* */
public function set backgroundColor(value:Number):void
{
background = true;
if(isNaN(value) || value < 0)
{
background = false;
}
else
{
_backgroundColor = value;
}
draw();
}
public function get backgroundColor():Number
{
return _backgroundColor;
}
/*----------------------------------------*/
/**
* 背景透明度
* */
private var _backgroundAlpha:Number = 1;
/**
* 背景透明度
* */
public function set backgroundAlpha(value:Number):void
{
_backgroundAlpha = value;
background = _backgroundAlpha <= 0 ? false : true;
draw();
}
public function get backgroundAlpha():Number
{
return _backgroundAlpha;
}
/*----------------------------------------*/
/**
* 边框是否开启
* */
private var _border:Boolean = false;
/**
* 边框是否开启
* */
public function set border(value:Boolean):void
{
_border = value;
draw();
}
public function get border():Boolean
{
return _border;
}
/*----------------------------------------*/
/**
* 边框粗细,一个整数,以磅为单位表示线条的粗细;
* 有效值为 0 到 255。如果未指定数字,或者未定义该参数,则不绘制线条。
* 如果传递的值小于 0,则默认值为 0。值 0 表示极细的粗细;最大粗细为 255。
* 如果传递的值大于 255,则默认值为 255。
* */
private var _borderWidth:Number = 0;
/**
* 边框粗细,一个整数,以磅为单位表示线条的粗细;
* 有效值为 0 到 255。如果未指定数字,或者未定义该参数,则不绘制线条。
* 如果传递的值小于 0,则默认值为 0。值 0 表示极细的粗细;最大粗细为 255。
* 如果传递的值大于 255,则默认值为 255。
* */
public function set borderWidth(value:Number):void
{
_borderWidth = value;
if(_borderWidth < 0)
{
_borderWidth = 0;
}
else if(_borderWidth > 255)
{
_borderWidth = 255;
}
_border = _borderWidth == 0 ? false : true;
draw();
}
public function get borderWidth():Number
{
return _borderWidth;
}
/*----------------------------------------*/
/**
* 边框颜色
* */
private var _borderColor:Number = 0;
/**
* 边框颜色
* */
public function set borderColor(value:Number):void
{
_borderColor = value;
draw();
}
public function get borderColor():Number
{
return _borderColor;
}
/*----------------------------------------*/
/**
* 边框不透明度
* */
private var _borderAlpha:Number = 1;
/**
* 边框不透明度
* */
public function set borderAlpha(value:Number):void
{
_borderAlpha = value;
draw();
}
public function get borderAlpha():Number
{
return _borderAlpha;
}
/*----------------------------------------*/
/**
* 用于绘制圆角的椭圆的宽度(以像素为单位)。
* */
private var _ellipseWidth:Number = 0;
/**
* 用于绘制圆角的椭圆的宽度(以像素为单位)。
* */
public function set ellipseWidth(value:Number):void
{
_ellipseWidth = value;
draw();
}
public function get ellipseWidth():Number
{
return _ellipseWidth;
}
/*----------------------------------------*/
/**
* 用于绘制圆角的椭圆的宽度(以像素为单位)。
* */
private var _ellipseHeight:Number = NaN;
/**
* 用于绘制圆角的椭圆的高度(以像素为单位)。(可选)如果未指定值,则默认值与为 ellipseWidth 参数提供的值相匹配。
* */
public function set ellipseHeight(value:Number):void
{
_ellipseHeight = value;
draw();
}
public function get ellipseHeight():Number
{
return _ellipseHeight;
}
/*----------------------------------------*/
/**
* 用于绘制圆角(以像素为单位)。
* */
private var _cornerRadius:Number = NaN;
/**
* 用于绘制圆角(以像素为单位)。
* */
public function set cornerRadius(value:Number):void
{
_cornerRadius = value;
_ellipseWidth = _cornerRadius;
_ellipseHeight = _cornerRadius;
draw();
}
public function get cornerRadius():Number
{
return _cornerRadius;
}
/*----------------------------------------*/
}
}
Component
最新推荐文章于 2011-11-18 20:59:04 发布