Показать сообщение отдельно
Старый 21.05.2009, 15:35
r_r_f_r вне форума Посмотреть профиль Отправить личное сообщение для r_r_f_r Найти все сообщения от r_r_f_r
  № 4  
Ответить с цитированием
r_r_f_r

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
Ключевое слово viewMetricsAndPadding.

И криво написанный результат(стили не работают, уж даж не помню как их делать)

Код AS3:
package
{
	import flash.display.Graphics;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
 
	import mx.containers.Box;
	import mx.core.EdgeMetrics;
 
[Style(name="linePadding", type="Number", format="Length", inherit="no")]
[Style(name="titleFontFamily", type="String", inherit="yes")]
[Style(name="titleFontColor", type="uint", format="Color", inherit="no")]
[Style(name="titleFontSize", type="Number", format="Length", inherit="no")]
[Style(name="paddingLeft", type="Number", format="Length", inherit="no")]
 
[Style(name="lineColor", type="uint", format="Color", inherit="no")]
 
	public class XaBox extends Box
	{
		private var _linePadding:Number = 5;
		private var _tf:TextField;
		private var _tfFormat:TextFormat = new TextFormat();
		private var _lineColor:uint = 0x000000;
		public function XaBox()
		{
			super();
		}
 
		override protected function createChildren():void
		{
			super.createChildren();
			_tf = new TextField();
			_tf.autoSize = TextFieldAutoSize.LEFT;
			rawChildren.addChild(_tf);
 
			_tf.defaultTextFormat = _tfFormat;
 
		}
 
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
		{
			super.updateDisplayList(unscaledWidth,unscaledHeight);
			if (_titleChange)
			{
				_tf.text = _title;
 
				_titleChange = false;
			}
 
			var gr:Graphics = graphics;
			gr.clear();
 
			gr.lineStyle(1,_lineColor,1);
			gr.moveTo(_linePadding/2 + 10,_linePadding/2);
			_tf.x = _linePadding/2 + 10;
			_tf.y = _linePadding/2-_tf.height/2;
			gr.lineTo(_linePadding/2,_linePadding/2);
			gr.lineTo(_linePadding/2,unscaledHeight - _linePadding/2);
			gr.lineTo(unscaledWidth - _linePadding/2,unscaledHeight - _linePadding/2);
			gr.lineTo(unscaledWidth - _linePadding/2,_linePadding/2);
			gr.lineTo(unscaledWidth - _linePadding/2,_linePadding/2);
			gr.lineTo(_linePadding/2 + _tf.getBounds(this).right,_linePadding/2);
		}
 
		private var _font:String;
		private var _color:uint;
		private var _size:Object;
		override public function stylesInitialized():void
		{
			super.stylesInitialized();
			_linePadding = getStyle('linePadding') ? getStyle('linePadding') : 10;
			_font = getStyle('titleFontFamily') ? getStyle('titleFontFamily') : "Arial";
			_color = getStyle('titleFontColor') ? getStyle('titleFontColor') : 0x000000;
			_size = getStyle('titleFontSize') ? getStyle('titleFontSize') : 10;
			_lineColor = getStyle('lineColor') ? getStyle('lineColor') : 0xFF0000;
		}
 
		override public function styleChanged(styleProp:String):void
		{
			if (styleProp == "paddingLeft" || styleProp == "paddingTop")
			{
				super.setStyle(styleProp, getStyle(styleProp)+_linePadding);
			}
			else if (styleProp == "linePadding")
			{
				_linePadding = getStyle("linePadding");
			}
			else if (styleProp == "lineColor") // дописываем свои всякие интересности
			{
				_lineColor = getStyle("lineColor");
			}
			else
			{
				super.styleChanged(styleProp);
			}
			if (_tf)
			{
				_tfFormat.font = _font;
				_tfFormat.color = _color;
				_tfFormat.size = _size;
				_tf.defaultTextFormat = _tfFormat;
			}
			invalidateDisplayList();
		}
 
		private var _title:String = "Title";
		private var _titleChange:Boolean = false;
		public function set title(value:String):void
		{
			if (_title != value)
			{
				_titleChange = true;
				_title = value;
				invalidateDisplayList();
			}
		}
 
		public function get title():String
		{
			return _title;
		}
 
		override public function get viewMetricsAndPadding():EdgeMetrics
		{
			var metr:EdgeMetrics = super.viewMetricsAndPadding;
			metr.right += _linePadding;
			metr.bottom += _linePadding;
			return metr;
		}
	}
}
Нужно либо в теме, либо в цсс, либо при объявлении указать paddingLeft & top.