////////////////////////////////////////////////////////////////////////////////
//
//  ADOBE SYSTEMS INCORPORATED
//  Copyright 2008 Adobe Systems Incorporated
//  All Rights Reserved.
//
//  NOTICE: Adobe permits you to use, modify, and distribute this file
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////

package mx.core
{

import flash.events.IEventDispatcher;
import flash.geom.Matrix;
import flash.geom.Matrix3D;
import flash.geom.Vector3D;

/**
 *  The ILayoutElement interface is used primarily by the layout classes to query,
 *  size and position the elements of GroupBase containers.
 *  
 *  @langversion 3.0
 *  @playerversion Flash 10
 *  @playerversion AIR 1.5
 *  @productversion Flex 4
 */
public interface ILayoutElement extends IEventDispatcher
{
/**
     *  The horizontal distance in pixels from the left edge of the component to the
     *  anchor target's left edge.
     *
     *  <p>By default the anchor target is the container's content area. In layouts
     *  with advanced constraints, the target can be a constraint column.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format
     *  "anchorTargetName:value". For example, "col1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get left():Object;
    
    /**
     *  @private
     */
    function set left(value:Object):void;

    /**
     *  The horizontal distance in pixels from the right edge of the component to the
     *  anchor target's right edge.
     *
     *  <p>By default the anchor target is the container's content area. In layouts
     *  with advanced constraints, the target can be a constraint column.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format
     *  "anchorTargetName:value". For example, "col1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get right():Object;
    
    /**
     *  @private
     */
    function set right(value:Object):void;

    /**
     *  The vertical distance in pixels from the top edge of the component to the
     *  anchor target's top edge.
     *
     *  <p>By default the anchor target is the container's content area. In layouts
     *  with advanced constraints, the target can be a constraint row.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format
     *  "anchorTargetName:value". For example, "row1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get top():Object;
    
    /**
     *  @private
     */
    function set top(value:Object):void;

    /**
     *  The vertical distance in pixels from the bottom edge of the component to the
     *  anchor target's bottom edge.
     *
     *  <p>By default the anchor target is the container's content area. In layouts
     *  with advanced constraints, the target can be a constraint row.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format:
     *  "anchorTargetName:value". For example, "row1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get bottom():Object;
    
    /**
     *  @private
     */
    function set bottom(value:Object):void;

    /**
     *  The horizontal distance in pixels from the center of the component to the
     *  center of the anchor target's content area.
     *
     *  <p>The default anchor target is the container itself.</p>
     *
     *  <p>In layouts with advanced constraints, the anchor target can be a constraint column.
     *  Then the content area is the space between the preceding column
     *  (or container side) and the target column.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format
     *  "constraintColumnId:value". For example, "col1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get horizontalCenter():Object;
    
    /**
     *  @private
     */
    function set horizontalCenter(value:Object):void;

    /**
     *  The vertical distance in pixels from the center of the component to the
     *  center of the anchor target's content area.
     *
     *  <p>The default anchor target is the container itself.</p>
     *
     *  <p>In layouts with advanced constraints, the anchor target can be a constraint row.
     *  Then the content area is the space between the preceding row
     *  (or container side) and the target row.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format
     *  "constraintColumnId:value". For example, "row1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get verticalCenter():Object;
    
    /**
     *  @private
     */
    function set verticalCenter(value:Object):void;

    /**
     *  The vertical distance in pixels from the anchor target to
     *  the control's baseline position.
     *
     *  <p>By default the anchor target is the top edge of the container's
     *  content area. In layouts with advanced constraints, the target can be
     *  a constraint row.</p>
     *
     *  <p>Setting the property to a number or to a numerical string like "10"
     *  specifies use of the default anchor target.</p>
     *
     *  <p>To specify an anchor target, set the property value to a string in the format:
     *  "anchorTargetName:value". For example, "row1:10".</p>
     *
     *  @default null
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get baseline():Object;
    
    /**
     *  @private
     */
    function set baseline(value:Object):void;

    /**
     *  The y-coordinate of the baseline
     *  of the first line of text of the component.
     *
     *  <p>This property is used to implement
     *  the <code>baseline</code> constraint style.
     *  It is also used to align the label of a FormItem
     *  with the controls in the FormItem.</p>
     *
     *  <p>Each component should override this property.</p>
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get baselinePosition():Number;
    
    /**
     *  Specifies the width of a component as a percentage
     *  of its parent's size. Allowed values are 0-100.
     *  Setting the <code>width</code> or <code>explicitWidth</code> properties
     *  resets this property to NaN.
     *
     *  <p>This property returns a numeric value only if the property was
     *  previously set; it does not reflect the exact size of the component
     *  in percent.</p>
     *
     *  @default NaN
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get percentWidth():Number;
    
    /**
     *  @private
     */
    function set percentWidth(value:Number):void;

    /**
     *  Specifies the height of a component as a percentage
     *  of its parent's size. Allowed values are 0-100.
     *  Setting the <code>height</code> or <code>explicitHeight</code> properties
     *  resets this property to NaN.
     *
     *  <p>This property returns a numeric value only if the property was
     *  previously set; it does not reflect the exact size of the component
     *  in percent.</p>
     *
     *  @default NaN
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get percentHeight():Number;
    
    /**
     *  @private
     */
    function set percentHeight(value:Number):void;
 
    /**
     *  @copy mx.core.UIComponent#includeInLayout
     *
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */   
    function get includeInLayout():Boolean;
    
    /**
     *  @private
     */
    function set includeInLayout(value:Boolean):void;
    
    /**
     *  Returns the element's preferred width.   
     * 
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is <code>true</code>,
     *  the method returns the element's bounding box width.  
     *  The bounding box is in the element's parent
     *  coordinate space and is calculated from  the element's preferred size and
     *  layout transform matrix.
     *
     *  @return Returns the element's preferred width.  Preferred width is
     *  usually based on the default element size and any explicit overrides.
     *  For UIComponent this is the same value as returned by 
     *  the <code>getExplicitOrMeasuredWidth()</code> method.
     * 
     *  @see #getPreferredBoundsHeight()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getPreferredBoundsWidth(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the element's preferred height.  
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is <code>true</code>,
     *  the method returns the element's bounding box height.  
     *  The bounding box is in the element's parent
     *  coordinate space and is calculated from  the element's preferred size and
     *  layout transform matrix.
     *
     *  @return Returns the element's preferred height.  Preferred height is
     *  usually based on the default element size and any explicit overrides.
     *  For UIComponent this is the same value as returned by 
     *  the <code>getExplicitOrMeasuredHeight()</code> method.
     *
     *  @see #getPreferredBoundsWidth()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getPreferredBoundsHeight(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the element's minimum width.
     * 
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is <code>true</code>,
     *  the method returns the element's bounding box width. 
     *  The bounding box is in the element's parent
     *  coordinate space and is calculated from the element's minimum size and
     *  layout transform matrix.
     *
     *  @return The element's maximum width.
     *
     *  @see #getMinBoundsHeight()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getMinBoundsWidth(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the element's minimum height.
     * 
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is <code>true</code>,
     *  the method returns the element's bounding box height. 
     *  The bounding box is in the element's parent
     *  coordinate space and is calculated from the element's minimum size and
     *  layout transform matrix.
     *
     *  @return The element's maximum height.
     *
     *  @see #getMinBoundsWidth()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getMinBoundsHeight(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the element's maximum width.
     * 
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  the element's bounding box width. The bounding box is in the element's parent
     *  coordinate space and is calculated from the element's maximum size and
     *  layout transform matrix.
     *
     *  @return The element's maximum width.
     *
     *  @see #getMaxBoundsHeight()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getMaxBoundsWidth(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the element's maximum height.
     * 
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  the element's bounding box height. The bounding box is in the element's parent
     *  coordinate space and is calculated from the element's maximum size and
     *  layout transform matrix.
     *
     *  @return The element's maximum height.
     *
     *  @see #getMaxBoundsWidth()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getMaxBoundsHeight(postLayoutTransform:Boolean = true):Number;
    
    /**
     *  Returns the x coordinate of the element's bounds at the specified element size.
     * 
     *  <p>This method is typically used by layouts during a call to the 
     *  <code>measure()</code> method to predict what
     *  the element position will be, if the element is resized to particular dimensions.</p>
     * 
     *  @param width The element's bounds width, or NaN to use the preferred width.
     *  @param height The element's bounds height, or NaN to use the preferred height.
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  x coordinate of the element's bounding box top-left corner.
     *  The bounding box is in element's parent coordinate space and is calculated
     *  from the specified bounds size, layout position and layout transform matrix.
     *
     *  @return The x coordinate of the element's bounds at the specified element size.
     *
     *  @see #setLayoutBoundsSize()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getBoundsXAtSize(width:Number, height:Number, postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the y coordinate of the element's bounds at the specified element size.
     * 
     *  This method is typically used by layouts during a call to 
     *  the <code>measure()</code> to predict what
     *  the element position will be, if the element is resized to particular dimensions.
     * 
     *  @param width The element's bounds width, or NaN to use the preferred width.
     *  @param height The element's bounds height, or NaN to use the preferred height.
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  the y coordinate of the element's bounding box top-left corner.
     *  The bounding box is in element's parent coordinate space and is calculated
     *  from the specified bounds size, layout position and layout transform matrix.
     *  
     *  @return The y coordinate of the element's bounds at the specified element size.
     *
     *  @see #setLayoutBoundsSize()
     *  @see #getLayoutBoundsY()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getBoundsYAtSize(width:Number, height:Number, postLayoutTransform:Boolean = true):Number;
    
    /**
     *  Returns the element's layout width. This is the size that the element uses
     *  to draw on screen.
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  the element's bounding box width. The bounding box is in element's parent
     *  coordinate space and is calculated from the element's layout size and
     *  layout transform matrix.
     *  
     *  @return The element's layout width.
     *
     *  @see #getLayoutBoundsHeight()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getLayoutBoundsWidth(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the element's layout height. This is the size that the element uses
     *  to draw on screen.
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  the element's bounding box width. The bounding box is in the element's parent
     *  coordinate space and is calculated from the element's layout size and
     *  layout transform matrix.
     *  
     *  @return The element's layout height.
     *
     *  @see #getLayoutBoundsWidth()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getLayoutBoundsHeight(postLayoutTransform:Boolean = true):Number;
    
    /**
     *  Returns the x coordinate that the element uses to draw on screen.
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  x coordinate of the element's bounding box top-left corner.
     *  The bounding box is in the element's parent coordinate space and is calculated
     *  from the element's layout size, layout position and layout transform matrix.
     * 
     *  @return The x coordinate that the element uses to draw on screen.
     * 
     *  @see #getLayoutBoundsY()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getLayoutBoundsX(postLayoutTransform:Boolean = true):Number;

    /**
     *  Returns the y coordinate that the element uses to draw on screen.
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the method returns
     *  y coordinate of the element's bounding box top-left corner.
     *  The bounding box is in the element's parent coordinate space and is calculated
     *  from the element's layout size, layout position, and layout transform matrix.
     * 
     *  @return The y coordinate that the element uses to draw on screen.
     * 
     *  @see #getLayoutBoundsX()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getLayoutBoundsY(postLayoutTransform:Boolean = true):Number;

    /**
     *  Sets the coordinates that the element uses to draw on screen.
     *
     *  <p>Note that calls to the <code>setLayoutBoundSize()</code> method can affect the layout position, so 
     *  call <code>setLayoutBoundPosition()</code> after calling <code>setLayoutBoundSize()</code>.</p>
     *
     *  @param x The x-coordinate of the top-left corner of the bounding box. 
     *
     *  @param y The y-coordinate of the top-left corner of the bounding box.
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is <code>true</code>, 
     *  the element is positioned in such a way that the top-left corner of its bounding box is (x, y).
     *  The bounding box is in the element's parent coordinate space and is calculated
     *  from the element's layout size, layout position and layout transform matrix.
     *
     *  @see #setLayoutBoundsSize()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function setLayoutBoundsPosition(x:Number, y:Number, postLayoutTransform:Boolean = true):void;

    /**
     *  Sets the layout size of the element.  
     *  This is the size that the element uses to draw on screen.
     *  
     *  <p>If the <code>width</code> and/or <code>height</code> parameters are left unspecified (NaN),
     *  Flex sets the element's layout size to its preferred width and/or preferred height.</p>
     * 
     *  <p>Note that calls to the <code>setLayoutBoundSize()</code> method can affect the layout position, so 
     *  call <code>setLayoutBoundPosition()</code> after calling <code>setLayoutBoundSize()</code>.</p>
     *
     *  @param width The element's layout width.
     *
     *  @param height The element's layout height.
     *
     *  @param postLayoutTransform When <code>postLayoutTransform</code> is true, the specified sizes
     *  are those of the element's bounding box.
     *  The bounding box is in the element's parent coordinate space and is calculated
     *  from the element's layout size, layout position, and layout transform matrix.
     * 
     *  @see #setLayoutBoundsPosition()
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function setLayoutBoundsSize(width:Number,
                                 height:Number,
                                 postLayoutTransform:Boolean = true):void;

    /**
     *  Returns the transform matrix that is used to calculate the component's
     *  layout relative to its siblings.
     *
     *  <p>This matrix is typically defined by the
     *  component's 2D properties such as <code>x</code>, <code>y</code>,
     *  <code>rotation</code>, <code>scaleX</code>, <code>scaleY</code>,
     *  <code>transformX</code>, and <code>transformY</code>.
     *  Some components may have additional transform properties that
     *  are applied on top of the layout matrix to determine the final,
     *  computed matrix.  For example <code>UIComponent</code>
     *  defines the <code>offsets</code> property.</p>
     *  
     *  @return The layout transform Matrix for this element.
     *  Do not directly modify the return value; call the <code>setLayoutMatrix()</code> method instead.
     * 
     *  @see #setLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  @see #setLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getLayoutMatrix():Matrix;

    /**
     *  Sets the transform Matrix that is used to calculate the component's layout
     *  size and position relative to its siblings.
     *
     *  <p>The matrix is typically defined by the
     *  component's 2D properties such as <code>x</code>, <code>y</code>,
     *  <code>rotation</code>, <code>scaleX</code>, <code>scaleY</code>,
     *  <code>transformX</code>, and <code>transformY</code>.
     *  Some components may have additional transform properties that
     *  are applied on top of the layout matrix to determine the final,
     *  computed matrix.  For example <code>UIComponent</code>
     *  defines the <code>offsets</code>.</p>
     *  
     *  <p>Note that layout Matrix is factored in the <code>getPreferredSize()</code>,
     *  <code>getMinSize()</code>, <code>getMaxSize()</code>, <code>getLayoutSize()</code> 
     *  methods when computed in parent coordinates
     *  as well as in <code>getLayoutPosition()</code> in both parent and child coordinates.
     *  Layouts that calculate the transform matrix explicitly typically call
     *  this method and work with sizes in child coordinates.
     *  Layouts calling this method pass <code>false</code>
     *  to the <code>invalidateLayout()</code> method so that a subsequent layout pass is not
     *  triggered.</p>
     *
     *  @param Matrix The matrix.
     *
     *  @param invalidateLayout <code>true</code> to cause the parent container 
     *  to re-layout its children. You typically pass <code>true</code>
     *  to the <code>invalidateLayout()</code> method.
     * 
     *  @see #getLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  @see #setLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function setLayoutMatrix(value:Matrix, invalidateLayout:Boolean):void;
    
    /**
     *  Contains <code>true</code> if the element has 3D Matrix.
     *
     *  <p>Use <code>hasLayoutMatrix3D</code> instead of calling and examining the
     *  return value of <code>getLayoutMatrix3D()</code> because that method returns a valid
     *  matrix even when the element is in 2D.</p>
     * 
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function get hasLayoutMatrix3D():Boolean;

    /**
     *  Returns the layout transform Matrix3D for this element.
     * 
     *  <p>This matrix is typically defined by the
     *  component's transform properties such as <code>x</code>, <code>y</code>, 
     *  <code>z</code>, <code>rotationX</code>, <code>rotationY</code>,
     *  <code>rotationZ</code>, <code>scaleX</code>, <code>scaleY</code>,
     *  <code>scaleZ</code>, <code>transformX</code>, and <code>transformY</code>.
     *  Some components may have additional transform properties that
     *  are applied on top of the layout matrix to determine the final,
     *  computed matrix.  For example <code>UIComponent</code>
     *  defines the <code>offsets</code> property.</p>
     * 
     *  @return The layout transform Matrix3D for this element.
     *  Do not directly modify the return value but call the <code>setLayoutMatrix()</code> method instead.
     *  
     *  @see #getLayoutMatrix()
     *  @see #setLayoutMatrix()
     *  @see #setLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function getLayoutMatrix3D():Matrix3D;

    /**
     *  Sets the transform Matrix3D that is used to calculate the component's layout
     *  size and position relative to its siblings.
     *
     *  <p>This matrix is typically defined by the
     *  component's transform properties such as <code>x</code>, <code>y</code>, 
     *  <code>z</code>, <code>rotationX</code>, <code>rotationY</code>,
     *  <code>rotationZ</code>, <code>scaleX</code>, <code>scaleY</code>,
     *  <code>scaleZ</code>, <code>transformX</code>, and <code>transformY</code>.
     *  Some components may have additional transform properties that
     *  are applied on top of the layout matrix to determine the final,
     *  computed matrix.  For example <code>UIComponent</code>
     *  defines the <code>offsets</code> property.</p>
     *  
     *  <p>Note that layout Matrix3D is factored in the <code>getPreferredSize()</code>,
     *  <code>getMinSize()</code>, <code>getMaxSize()</code>, <code>getLayoutSize()</code> 
     *  when computed in parent coordinates
     *  as well as in <code>getLayoutPosition()</code> in both parent and child coordinates.
     *  Layouts that calculate the transform matrix explicitly typically call
     *  this method and work with sizes in child coordinates.
     *  Layouts calling this method pass <code>false</code>
     *  to the <code>invalidateLayout()</code> method so that a subsequent layout pass is not
     *  triggered.</p>
     *
     *  @param Matrix The matrix.
     *
     *  @param invalidateLayout <code>true</code> to cause the parent container 
     *  to re-layout its children. You typically pass <code>true</code>
     *  to the <code>invalidateLayout()</code> method.
     * 
     *  @see #getLayoutMatrix()
     *  @see #setLayoutMatrix()
     *  @see #getLayoutMatrix3D()
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function setLayoutMatrix3D(value:Matrix3D, invalidateLayout:Boolean):void;

    /**
     *  A utility method to update the rotation, scale, and translation of the 
     *  transform while keeping a particular point, specified in the component's 
     *  own coordinate space, fixed in the parent's coordinate space.  
     *  This function will assign the rotation, scale, and translation values 
     *  provided, then update the x/y/z properties as necessary to keep 
     *  the transform center fixed.
     *
     *  @param transformCenter The point, in the component's own coordinates, 
     *  to keep fixed relative to its parent.
     *
     *  @param scale The new values for the scale of the transform.
     *
     *  @param rotation the new values for the rotation of the transform
     *
     *  @param translation The new values for the translation of the transform.
     *
     *  @param postLayoutScale The new values for the post-layout scale 
     *  of the transform.
     *
     *  @param postLayoutRotation The new values for the post-layout rotation 
     *  of the transform.
     *
     *  @param postLayoutTranslation The new values for the post-layout translation 
     *  of the transform.
     *
     *  @param invalidateLayout If <code>true</code>, the parent container size and display are
     *  invalidated. Layouts calling this method pass <code>false</code>
     *  so that a subsequent layout pass is not triggered.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    function transformAround(transformCenter:Vector3D,
                                    scale:Vector3D = null,
                                    rotation:Vector3D = null,
                                    translation:Vector3D = null,
                                    postLayoutScale:Vector3D = null,
                                    postLayoutRotation:Vector3D = null,
                                    postLayoutTranslation:Vector3D = null,
                                    invalidateLayout:Boolean = true):void;    
}

}
