Component

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;
		}
		/*----------------------------------------*/


	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值