No, there is no straightforward solution.
You should calculate the visible rectangle manually:
private function getVisibleRectangle(container:Container, child:UIComponent):Rectangle
{
var rect:Rectangle = child.getBounds(child.stage);
var containerMetrics:EdgeMetrics = container.viewMetrics;
var containerPoint:Point = container.localToGlobal(new Point(0, 0));
var containerRect:Rectangle = new Rectangle(containerPoint.x + containerMetrics.left,
containerPoint.y + containerMetrics.top,
container.width - containerMetrics.left - containerMetrics.right,
container.height - containerMetrics.top - containerMetrics.bottom);
if (rect.left >= containerRect.right ||
rect.right <= containerRect.left ||
rect.top >= containerRect.bottom ||
rect.bottom <= containerRect.top)
return null;
rect.left = Math.max(rect.left, containerRect.left);
rect.right = Math.min(rect.right, containerRect.right);
rect.top = Math.max(rect.top, containerRect.top);
rect.bottom = Math.min(rect.bottom, containerRect.bottom);
return rect;
}
Example of usage:
<mx:Panel id="panel" width="200" height="200">
<mx:Canvas backgroundColor="green" width="100" height="100"/>
<mx:Canvas id="canvas" backgroundColor="red" width="500" height="400"
enterFrame="trace(getVisibleRectangle(panel, canvas));"/>
</mx:Panel>