具有不同旋转值的多个文本区域导致边框非常错误

时间:2009-11-05 05:01:09

标签: flex flash actionscript-3 text

如果您有两个textareas,其中一个旋转值除了0而另一个没有旋转值或值为0,并且您'标记'从一个w /旋转到一个w / out的焦点。 textArea w / out旋转周围的边框将旋转。如果将非旋转文本字段的旋转值设置为非零数字,甚至是0.01,则可以解决问题,这会导致文本渲染中出现大量其他问题,因此它不是解决方案。

我发现将focusThickness样式设置为0会移除边框,这是一个很好的解决方案但不是很好的解决方案,任何人都有更好的解决方案吗?以下是一些示例代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:VBox width="100%" height="100%">
    <mx:TextArea id="source" width="100%" fontWeight="bold" fontSize="20" height="50" rotation="5" />
    <mx:TextArea id="dest" width="100%" height="50" />
</mx:VBox>

以下是它的样子: alt text http://img.skitch.com/20091105-fftxukst1ncggynekatj6937nn.jpg

1 个答案:

答案 0 :(得分:1)

这是一个扩展TextArea的类,并覆盖adjustFocusRect方法来修复此错误。

package
{
    import flash.display.DisplayObject;
    import flash.geom.Point;

    import mx.controls.TextArea;
    import mx.core.IFlexDisplayObject;
    import mx.core.IInvalidating;
    import mx.core.IProgrammaticSkin;
    import mx.core.mx_internal;
    import mx.managers.IFocusManager;
    import mx.styles.IStyleClient;

    use namespace mx_internal;

    public class TextArea2 extends TextArea
    {
        override protected function adjustFocusRect(obj:DisplayObject = null):void
        {
            super.adjustFocusRect(obj);

            var focusObj:IFlexDisplayObject = IFlexDisplayObject(getFocusObject());
            if (focusObj)
            {
                if ( !rotation ) {
                    DisplayObject(focusObj).rotation = 0;
                }
            }
        }
    }
}