         {
             if (stageText.stage)
             {
-                var globalPoint:Point = parent.localToGlobal(localViewPort.topLeft);
-                var globalRect:Rectangle = new Rectangle(globalPoint.x, globalPoint.y);
+                var globalTopLeft:Point = parent.localToGlobal(localViewPort.topLeft);
+
+                // Transform the bottom-right corner of the local rect
+                // instead of setting width/height to account for any
+                // transformations applied to ancestor objects.
+                var globalBottomRight:Point = parent.localToGlobal(localViewPort.bottomRight);
+                var globalRect:Rectangle = new Rectangle();
+                
+                // StageText can't deal with upside-down or mirrored rectangles
+                // or non-integer values. Fix those here.
+                globalRect.x = Math.floor(Math.min(globalTopLeft.x, globalBottomRight.x));
+                globalRect.y = Math.floor(Math.min(globalTopLeft.y, globalBottomRight.y));
+                var globalWidth:Number = Math.ceil(Math.abs(globalBottomRight.x - globalTopLeft.x));
+                var globalHeight:Number = Math.ceil(Math.abs(globalBottomRight.y - globalTopLeft.y));
     
                 if (_visible && calcAncestorsVisible()) 
                 {

    /**
     *  Storage for the autoCorrect property.
     */
    private var _autoCorrect:Boolean = false;
    
    /**
     *  @private

    {
        super();
        
        // This needs to be true so that we can show the soft keyboard if the
        // user taps on the padding instead of on the StageText. If 
        // needsSoftKeyboard isn't set to true, requestSoftKeyboard would do
        // nothing.
        needsSoftKeyboard = true;
        
        _multiline = multiline;
        getStageText(true);
        
