http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/5ed4d983/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/source/HBaselineLayout.as.html ---------------------------------------------------------------------- diff --git a/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/source/HBaselineLayout.as.html b/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/source/HBaselineLayout.as.html index 9690a3f..7867059 100644 --- a/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/source/HBaselineLayout.as.html +++ b/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/source/HBaselineLayout.as.html @@ -23,185 +23,185 @@ <link rel="stylesheet" type="text/css" href="../SourceStyles.css"/> </head> -<body><pre><span class="ActionScriptpackage">package</span> <span class="ActionScriptBracket/Brace">{</span> - -<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">core</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">ILayoutElement</span>; -<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">events</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">PropertyChangeEvent</span>; -<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">formatters</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">NumberBase</span>; - -<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">spark</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">components</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">supportClasses</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">GroupBase</span>; -<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">spark</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">layouts</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">HorizontalLayout</span>; - -<span class="ActionScriptReserved">public</span> <span class="ActionScriptclass">class</span> <span class="ActionScriptDefault_Text">HBaselineLayout</span> <span class="ActionScriptReserved">extends</span> <span class="ActionScriptDefault_Text">HorizontalLayout</span> -<span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">HBaselineLayout</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">super</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptComment">//---------------------------------- -</span> <span class="ActionScriptComment">// globalBaseline -</span> <span class="ActionScriptComment">//---------------------------------- -</span> - <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Inspectable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"General"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> - - <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">NaN</span>; - <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">globalBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">Number</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">return</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">set</span> <span class="ActionScriptDefault_Text">globalBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">value</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptDefault_Text">_globalBaseline</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">value</span>; - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">target</span>:<span class="ActionScriptDefault_Text">GroupBase</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">target</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">target</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">invalidateSize</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">invalidateDisplayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptComment">//---------------------------------- -</span> <span class="ActionScriptComment">// actualBaseline -</span> <span class="ActionScriptComment">//---------------------------------- -</span> - <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">_actualBaseline</span>:<span class="ActionScriptDefault_Text">Number</span>; - - <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Bindable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"propertyChange"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> - <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Inspectable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"General"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> - - <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">actualBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">Number</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">return</span> <span class="ActionScriptDefault_Text">_actualBaseline</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">setActualBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">value</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">value</span> <span class="ActionScriptOperator">==</span> <span class="ActionScriptDefault_Text">_actualBaseline</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptReserved">return</span>; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">oldValue</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">_actualBaseline</span>; - <span class="ActionScriptDefault_Text">_actualBaseline</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">value</span>; - <span class="ActionScriptDefault_Text">dispatchEvent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">PropertyChangeEvent</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">createUpdateEvent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptString">"actualBaseline"</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">oldValue</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">value</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptComment">//---------------------------------- -</span> <span class="ActionScriptComment">// verticalAlign -</span> <span class="ActionScriptComment">//---------------------------------- -</span> - <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Inspectable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"General"</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">enumeration</span><span class="ActionScriptOperator">=</span><span class="ActionScriptString">"top,bottom,middle,justify,contentJustify,baseline"</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">defaultValue</span><span class="ActionScriptOperator">=</span><span class="ActionScriptString">"top"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> - <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">verticalAlign</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">String</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">return</span> <span class="ActionScriptReserved">super</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">verticalAlign</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptASDoc">/** - * @private - */</span> - <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">measure</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">super</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">measure</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">target</span>:<span class="ActionScriptDefault_Text">GroupBase</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">target</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">target</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptDefault_Text">verticalAlign</span> <span class="ActionScriptOperator">!=</span> <span class="ActionScriptString">"baseline"</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptReserved">return</span>; - - <span class="ActionScriptDefault_Text">measureBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptReserved">true</span> <span class="ActionScriptComment">/*usePreferredSize*/</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">_globalBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>; - - <span class="ActionScriptComment">// The measured height is the sum of the space above and below the baseline -</span> <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingTop</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingTop</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingBottom</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">measuredBaselineBottom</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingBottom</span>; - <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">measuredHeight</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">round</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">measuredBaselineBottom</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptASDoc">/** - * @private - */</span> - <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">updateDisplayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">unscaledWidth</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">unscaledHeight</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptReserved">super</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">updateDisplayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">unscaledWidth</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">unscaledHeight</span><span class="ActionScriptBracket/Brace">)</span>; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">target</span>:<span class="ActionScriptDefault_Text">GroupBase</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">target</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">target</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptDefault_Text">verticalAlign</span> <span class="ActionScriptOperator">!=</span> <span class="ActionScriptString">"baseline"</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptReserved">return</span>; - - <span class="ActionScriptDefault_Text">measureBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptReserved">false</span> <span class="ActionScriptComment">/*usePreferredSize*/</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">_globalBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>; - - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingTop</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingTop</span>; - - <span class="ActionScriptComment">// Adjust the position of the elements -</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">contentHeight</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">count</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">numElements</span>; - <span class="ActionScriptReserved">for</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">i</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptDefault_Text">i</span> <span class="ActionScriptOperator"><</span> <span class="ActionScriptDefault_Text">count</span>; <span class="ActionScriptDefault_Text">i</span><span class="ActionScriptOperator">++</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">element</span>:<span class="ActionScriptDefault_Text">ILayoutElement</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getElementAt</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">i</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">includeInLayout</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptReserved">continue</span>; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaseline</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baseline</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">Number</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">=</span> 0; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">baselinePosition</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baselinePosition</span>; - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">y</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">-</span> <span class="ActionScriptDefault_Text">baselinePosition</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">setLayoutBoundsPosition</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getLayoutBoundsX</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">y</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptDefault_Text">contentHeight</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">max</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">contentHeight</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getLayoutBoundsHeight</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">y</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptComment">// Adjust the content height -</span> <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingBottom</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">contentHeight</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingBottom</span>; - <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">setContentSize</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">contentWidth</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">contentHeight</span><span class="ActionScriptBracket/Brace">)</span>; - - <span class="ActionScriptComment">// Update the baseline -</span> <span class="ActionScriptDefault_Text">setActualBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">measuredBaselineTop</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - - <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">measuredBaselineTop</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// How much space is needed above the baseline to fit all the elements -</span> <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">measuredBaselineBottom</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// How much space is needed below the baseline to fit all the elements -</span> - <span class="ActionScriptASDoc">/** - * @private - */</span> - <span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">measureBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">usePreferredSize</span>:<span class="ActionScriptDefault_Text">Boolean</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaseline</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// The current element's explicit baseline constraint -</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaselineTop</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// The portiono of the current element that's above the baseline -</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaselineBottom</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// The portion of the current element that's below the baseline -</span> - <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> 0; - <span class="ActionScriptDefault_Text">measuredBaselineBottom</span> <span class="ActionScriptOperator">=</span> 0; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">count</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">numElements</span>; - <span class="ActionScriptReserved">for</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">i</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptDefault_Text">i</span> <span class="ActionScriptOperator"><</span> <span class="ActionScriptDefault_Text">count</span>; <span class="ActionScriptDefault_Text">i</span><span class="ActionScriptOperator">++</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptBracket/Brace">{</span> - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">element</span>:<span class="ActionScriptDefault_Text">ILayoutElement</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getElementAt</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">i</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">includeInLayout</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptReserved">continue</span>; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementHeight</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">usePreferredSize</span> <span class="ActionScriptOperator">?</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getPreferredBoundsHeight</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span> : - <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getLayoutBoundsHeight</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baseline</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">Number</span>; - <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> - <span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">=</span> 0; - - <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">baselinePosition</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baselinePosition</span>; - - <span class="ActionScriptDefault_Text">elementBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">baselinePosition</span> <span class="ActionScriptOperator">-</span> <span class="ActionScriptDefault_Text">elementBaseline</span>; - <span class="ActionScriptDefault_Text">elementBaselineBottom</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">elementHeight</span> <span class="ActionScriptOperator">-</span> <span class="ActionScriptDefault_Text">elementBaselineTop</span>; - - <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">max</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaselineTop</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">measuredBaselineTop</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptDefault_Text">measuredBaselineBottom</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">max</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaselineBottom</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">measuredBaselineBottom</span><span class="ActionScriptBracket/Brace">)</span>; - <span class="ActionScriptBracket/Brace">}</span> - <span class="ActionScriptBracket/Brace">}</span> -<span class="ActionScriptBracket/Brace">}</span> +<body><pre><span class="ActionScriptpackage">package</span> <span class="ActionScriptBracket/Brace">{</span> + +<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">core</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">ILayoutElement</span>; +<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">events</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">PropertyChangeEvent</span>; +<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">formatters</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">NumberBase</span>; + +<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">spark</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">components</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">supportClasses</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">GroupBase</span>; +<span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">spark</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">layouts</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">HorizontalLayout</span>; + +<span class="ActionScriptReserved">public</span> <span class="ActionScriptclass">class</span> <span class="ActionScriptDefault_Text">HBaselineLayout</span> <span class="ActionScriptReserved">extends</span> <span class="ActionScriptDefault_Text">HorizontalLayout</span> +<span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">HBaselineLayout</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">super</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptComment">//---------------------------------- +</span> <span class="ActionScriptComment">// globalBaseline +</span> <span class="ActionScriptComment">//---------------------------------- +</span> + <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Inspectable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"General"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> + + <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">NaN</span>; + <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">globalBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">Number</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">return</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">set</span> <span class="ActionScriptDefault_Text">globalBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">value</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptDefault_Text">_globalBaseline</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">value</span>; + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">target</span>:<span class="ActionScriptDefault_Text">GroupBase</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">target</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">target</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">invalidateSize</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">invalidateDisplayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptComment">//---------------------------------- +</span> <span class="ActionScriptComment">// actualBaseline +</span> <span class="ActionScriptComment">//---------------------------------- +</span> + <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">_actualBaseline</span>:<span class="ActionScriptDefault_Text">Number</span>; + + <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Bindable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"propertyChange"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> + <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Inspectable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"General"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> + + <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">actualBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">Number</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">return</span> <span class="ActionScriptDefault_Text">_actualBaseline</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">setActualBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">value</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">value</span> <span class="ActionScriptOperator">==</span> <span class="ActionScriptDefault_Text">_actualBaseline</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptReserved">return</span>; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">oldValue</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">_actualBaseline</span>; + <span class="ActionScriptDefault_Text">_actualBaseline</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">value</span>; + <span class="ActionScriptDefault_Text">dispatchEvent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">PropertyChangeEvent</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">createUpdateEvent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptString">"actualBaseline"</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">oldValue</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">value</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptComment">//---------------------------------- +</span> <span class="ActionScriptComment">// verticalAlign +</span> <span class="ActionScriptComment">//---------------------------------- +</span> + <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Inspectable</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"General"</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">enumeration</span><span class="ActionScriptOperator">=</span><span class="ActionScriptString">"top,bottom,middle,justify,contentJustify,baseline"</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">defaultValue</span><span class="ActionScriptOperator">=</span><span class="ActionScriptString">"top"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span> + <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">verticalAlign</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">String</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">return</span> <span class="ActionScriptReserved">super</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">verticalAlign</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptASDoc">/** + * @private + */</span> + <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">measure</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">super</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">measure</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">target</span>:<span class="ActionScriptDefault_Text">GroupBase</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">target</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">target</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptDefault_Text">verticalAlign</span> <span class="ActionScriptOperator">!=</span> <span class="ActionScriptString">"baseline"</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptReserved">return</span>; + + <span class="ActionScriptDefault_Text">measureBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptReserved">true</span> <span class="ActionScriptComment">/*usePreferredSize*/</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">_globalBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>; + + <span class="ActionScriptComment">// The measured height is the sum of the space above and below the baseline +</span> <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingTop</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingTop</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingBottom</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">measuredBaselineBottom</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingBottom</span>; + <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">measuredHeight</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">round</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">measuredBaselineBottom</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptASDoc">/** + * @private + */</span> + <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">updateDisplayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">unscaledWidth</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">unscaledHeight</span>:<span class="ActionScriptDefault_Text">Number</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptReserved">super</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">updateDisplayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">unscaledWidth</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">unscaledHeight</span><span class="ActionScriptBracket/Brace">)</span>; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">target</span>:<span class="ActionScriptDefault_Text">GroupBase</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">this</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">target</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">target</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptDefault_Text">verticalAlign</span> <span class="ActionScriptOperator">!=</span> <span class="ActionScriptString">"baseline"</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptReserved">return</span>; + + <span class="ActionScriptDefault_Text">measureBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptReserved">false</span> <span class="ActionScriptComment">/*usePreferredSize*/</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">_globalBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">_globalBaseline</span>; + + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingTop</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingTop</span>; + + <span class="ActionScriptComment">// Adjust the position of the elements +</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">contentHeight</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">count</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">numElements</span>; + <span class="ActionScriptReserved">for</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">i</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptDefault_Text">i</span> <span class="ActionScriptOperator"><</span> <span class="ActionScriptDefault_Text">count</span>; <span class="ActionScriptDefault_Text">i</span><span class="ActionScriptOperator">++</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">element</span>:<span class="ActionScriptDefault_Text">ILayoutElement</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getElementAt</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">i</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">includeInLayout</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptReserved">continue</span>; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaseline</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baseline</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">Number</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">=</span> 0; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">baselinePosition</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baselinePosition</span>; + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">y</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">-</span> <span class="ActionScriptDefault_Text">baselinePosition</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">setLayoutBoundsPosition</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getLayoutBoundsX</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">y</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptDefault_Text">contentHeight</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">max</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">contentHeight</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getLayoutBoundsHeight</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">y</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptComment">// Adjust the content height +</span> <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">paddingBottom</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">contentHeight</span> <span class="ActionScriptOperator">+=</span> <span class="ActionScriptDefault_Text">paddingBottom</span>; + <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">setContentSize</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">contentWidth</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">contentHeight</span><span class="ActionScriptBracket/Brace">)</span>; + + <span class="ActionScriptComment">// Update the baseline +</span> <span class="ActionScriptDefault_Text">setActualBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">measuredBaselineTop</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + + <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">measuredBaselineTop</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// How much space is needed above the baseline to fit all the elements +</span> <span class="ActionScriptReserved">private</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">measuredBaselineBottom</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// How much space is needed below the baseline to fit all the elements +</span> + <span class="ActionScriptASDoc">/** + * @private + */</span> + <span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">measureBaseline</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">usePreferredSize</span>:<span class="ActionScriptDefault_Text">Boolean</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaseline</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// The current element's explicit baseline constraint +</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaselineTop</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// The portiono of the current element that's above the baseline +</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementBaselineBottom</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptComment">// The portion of the current element that's below the baseline +</span> + <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> 0; + <span class="ActionScriptDefault_Text">measuredBaselineBottom</span> <span class="ActionScriptOperator">=</span> 0; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">count</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">numElements</span>; + <span class="ActionScriptReserved">for</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">i</span>:<span class="ActionScriptDefault_Text">int</span> <span class="ActionScriptOperator">=</span> 0; <span class="ActionScriptDefault_Text">i</span> <span class="ActionScriptOperator"><</span> <span class="ActionScriptDefault_Text">count</span>; <span class="ActionScriptDefault_Text">i</span><span class="ActionScriptOperator">++</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptBracket/Brace">{</span> + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">element</span>:<span class="ActionScriptDefault_Text">ILayoutElement</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">target</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getElementAt</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">i</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span> <span class="ActionScriptOperator">||</span> <span class="ActionScriptOperator">!</span><span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">includeInLayout</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptReserved">continue</span>; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">elementHeight</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">usePreferredSize</span> <span class="ActionScriptOperator">?</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getPreferredBoundsHeight</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span> : + <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">getLayoutBoundsHeight</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baseline</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">Number</span>; + <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">isNaN</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaseline</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">)</span> + <span class="ActionScriptDefault_Text">elementBaseline</span> <span class="ActionScriptOperator">=</span> 0; + + <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">baselinePosition</span>:<span class="ActionScriptDefault_Text">Number</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">element</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">baselinePosition</span>; + + <span class="ActionScriptDefault_Text">elementBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">baselinePosition</span> <span class="ActionScriptOperator">-</span> <span class="ActionScriptDefault_Text">elementBaseline</span>; + <span class="ActionScriptDefault_Text">elementBaselineBottom</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">elementHeight</span> <span class="ActionScriptOperator">-</span> <span class="ActionScriptDefault_Text">elementBaselineTop</span>; + + <span class="ActionScriptDefault_Text">measuredBaselineTop</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">max</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaselineTop</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">measuredBaselineTop</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptDefault_Text">measuredBaselineBottom</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">Math</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">max</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">elementBaselineBottom</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">measuredBaselineBottom</span><span class="ActionScriptBracket/Brace">)</span>; + <span class="ActionScriptBracket/Brace">}</span> + <span class="ActionScriptBracket/Brace">}</span> +<span class="ActionScriptBracket/Brace">}</span> <span class="ActionScriptBracket/Brace">}</span></pre></body> </html>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/5ed4d983/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/src/HBaselineLayout.as ---------------------------------------------------------------------- diff --git a/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/src/HBaselineLayout.as b/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/src/HBaselineLayout.as index 5d87ce7..ae4c3db 100644 --- a/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/src/HBaselineLayout.as +++ b/TourDeFlex/TourDeFlex_content/flex4.0/CustomLayout-HLayoutBaseline/srcview/src/HBaselineLayout.as @@ -16,184 +16,184 @@ // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// -package { - -import mx.core.ILayoutElement; -import mx.events.PropertyChangeEvent; -import mx.formatters.NumberBase; - -import spark.components.supportClasses.GroupBase; -import spark.layouts.HorizontalLayout; - -public class HBaselineLayout extends HorizontalLayout -{ - public function HBaselineLayout() - { - super(); - } - - //---------------------------------- - // globalBaseline - //---------------------------------- - - [Inspectable(category="General")] - - private var _globalBaseline:Number = NaN; - public function get globalBaseline():Number - { - return _globalBaseline; - } - - public function set globalBaseline(value:Number):void - { - _globalBaseline = value; - var target:GroupBase = this.target; - if (target) - { - target.invalidateSize(); - target.invalidateDisplayList(); - } - } - - //---------------------------------- - // actualBaseline - //---------------------------------- - - private var _actualBaseline:Number; - - [Bindable("propertyChange")] - [Inspectable(category="General")] - - public function get actualBaseline():Number - { - return _actualBaseline; - } - - private function setActualBaseline(value:Number):void - { - if (value == _actualBaseline) - return; - - var oldValue:Number = _actualBaseline; - _actualBaseline = value; - dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "actualBaseline", oldValue, value)); - } - - //---------------------------------- - // verticalAlign - //---------------------------------- - - [Inspectable(category="General", enumeration="top,bottom,middle,justify,contentJustify,baseline", defaultValue="top")] - override public function get verticalAlign():String - { - return super.verticalAlign; - } - - /** - * @private - */ - override public function measure():void - { - super.measure(); - - var target:GroupBase = this.target; - if (!target || verticalAlign != "baseline") - return; - - measureBaseline(true /*usePreferredSize*/); - if (!isNaN(_globalBaseline)) - measuredBaselineTop = _globalBaseline; - - // The measured height is the sum of the space above and below the baseline - if (isNaN(paddingTop)) - measuredBaselineTop += paddingTop; - if (isNaN(paddingBottom)) - measuredBaselineBottom += paddingBottom; - target.measuredHeight = Math.round(measuredBaselineTop + measuredBaselineBottom); - } - - /** - * @private - */ - override public function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void - { - super.updateDisplayList(unscaledWidth, unscaledHeight); - - var target:GroupBase = this.target; - if (!target || verticalAlign != "baseline") - return; - - measureBaseline(false /*usePreferredSize*/); - if (!isNaN(_globalBaseline)) - measuredBaselineTop = _globalBaseline; - - if (isNaN(paddingTop)) - measuredBaselineTop += paddingTop; - - // Adjust the position of the elements - var contentHeight:Number = 0; - var count:int = target.numElements; - for (var i:int = 0; i < count; i++) - { - var element:ILayoutElement = target.getElementAt(i); - if (!element || !element.includeInLayout) - continue; - - var elementBaseline:Number = element.baseline as Number; - if (isNaN(elementBaseline)) - elementBaseline = 0; - - var baselinePosition:Number = element.baselinePosition; - var y:Number = measuredBaselineTop + (elementBaseline - baselinePosition); - element.setLayoutBoundsPosition(element.getLayoutBoundsX(), y); - contentHeight = Math.max(contentHeight, element.getLayoutBoundsHeight() + y); - } - - // Adjust the content height - if (isNaN(paddingBottom)) - contentHeight += paddingBottom; - target.setContentSize(target.contentWidth, contentHeight); - - // Update the baseline - setActualBaseline(measuredBaselineTop); - } - - private var measuredBaselineTop:Number = 0; // How much space is needed above the baseline to fit all the elements - private var measuredBaselineBottom:Number = 0; // How much space is needed below the baseline to fit all the elements - - /** - * @private - */ - private function measureBaseline(usePreferredSize:Boolean):void - { - var elementBaseline:Number = 0; // The current element's explicit baseline constraint - var elementBaselineTop:Number = 0; // The portiono of the current element that's above the baseline - var elementBaselineBottom:Number = 0; // The portion of the current element that's below the baseline - - measuredBaselineTop = 0; - measuredBaselineBottom = 0; - - var count:int = target.numElements; - for (var i:int = 0; i < count; i++) - { - var element:ILayoutElement = target.getElementAt(i); - if (!element || !element.includeInLayout) - continue; - - var elementHeight:Number = usePreferredSize ? element.getPreferredBoundsHeight() : - element.getLayoutBoundsHeight(); - elementBaseline = element.baseline as Number; - if (isNaN(elementBaseline)) - elementBaseline = 0; - - var baselinePosition:Number = element.baselinePosition; - - elementBaselineTop = baselinePosition - elementBaseline; - elementBaselineBottom = elementHeight - elementBaselineTop; - - measuredBaselineTop = Math.max(elementBaselineTop, measuredBaselineTop); - measuredBaselineBottom = Math.max(elementBaselineBottom, measuredBaselineBottom); - } - } -} +package { + +import mx.core.ILayoutElement; +import mx.events.PropertyChangeEvent; +import mx.formatters.NumberBase; + +import spark.components.supportClasses.GroupBase; +import spark.layouts.HorizontalLayout; + +public class HBaselineLayout extends HorizontalLayout +{ + public function HBaselineLayout() + { + super(); + } + + //---------------------------------- + // globalBaseline + //---------------------------------- + + [Inspectable(category="General")] + + private var _globalBaseline:Number = NaN; + public function get globalBaseline():Number + { + return _globalBaseline; + } + + public function set globalBaseline(value:Number):void + { + _globalBaseline = value; + var target:GroupBase = this.target; + if (target) + { + target.invalidateSize(); + target.invalidateDisplayList(); + } + } + + //---------------------------------- + // actualBaseline + //---------------------------------- + + private var _actualBaseline:Number; + + [Bindable("propertyChange")] + [Inspectable(category="General")] + + public function get actualBaseline():Number + { + return _actualBaseline; + } + + private function setActualBaseline(value:Number):void + { + if (value == _actualBaseline) + return; + + var oldValue:Number = _actualBaseline; + _actualBaseline = value; + dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "actualBaseline", oldValue, value)); + } + + //---------------------------------- + // verticalAlign + //---------------------------------- + + [Inspectable(category="General", enumeration="top,bottom,middle,justify,contentJustify,baseline", defaultValue="top")] + override public function get verticalAlign():String + { + return super.verticalAlign; + } + + /** + * @private + */ + override public function measure():void + { + super.measure(); + + var target:GroupBase = this.target; + if (!target || verticalAlign != "baseline") + return; + + measureBaseline(true /*usePreferredSize*/); + if (!isNaN(_globalBaseline)) + measuredBaselineTop = _globalBaseline; + + // The measured height is the sum of the space above and below the baseline + if (isNaN(paddingTop)) + measuredBaselineTop += paddingTop; + if (isNaN(paddingBottom)) + measuredBaselineBottom += paddingBottom; + target.measuredHeight = Math.round(measuredBaselineTop + measuredBaselineBottom); + } + + /** + * @private + */ + override public function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void + { + super.updateDisplayList(unscaledWidth, unscaledHeight); + + var target:GroupBase = this.target; + if (!target || verticalAlign != "baseline") + return; + + measureBaseline(false /*usePreferredSize*/); + if (!isNaN(_globalBaseline)) + measuredBaselineTop = _globalBaseline; + + if (isNaN(paddingTop)) + measuredBaselineTop += paddingTop; + + // Adjust the position of the elements + var contentHeight:Number = 0; + var count:int = target.numElements; + for (var i:int = 0; i < count; i++) + { + var element:ILayoutElement = target.getElementAt(i); + if (!element || !element.includeInLayout) + continue; + + var elementBaseline:Number = element.baseline as Number; + if (isNaN(elementBaseline)) + elementBaseline = 0; + + var baselinePosition:Number = element.baselinePosition; + var y:Number = measuredBaselineTop + (elementBaseline - baselinePosition); + element.setLayoutBoundsPosition(element.getLayoutBoundsX(), y); + contentHeight = Math.max(contentHeight, element.getLayoutBoundsHeight() + y); + } + + // Adjust the content height + if (isNaN(paddingBottom)) + contentHeight += paddingBottom; + target.setContentSize(target.contentWidth, contentHeight); + + // Update the baseline + setActualBaseline(measuredBaselineTop); + } + + private var measuredBaselineTop:Number = 0; // How much space is needed above the baseline to fit all the elements + private var measuredBaselineBottom:Number = 0; // How much space is needed below the baseline to fit all the elements + + /** + * @private + */ + private function measureBaseline(usePreferredSize:Boolean):void + { + var elementBaseline:Number = 0; // The current element's explicit baseline constraint + var elementBaselineTop:Number = 0; // The portiono of the current element that's above the baseline + var elementBaselineBottom:Number = 0; // The portion of the current element that's below the baseline + + measuredBaselineTop = 0; + measuredBaselineBottom = 0; + + var count:int = target.numElements; + for (var i:int = 0; i < count; i++) + { + var element:ILayoutElement = target.getElementAt(i); + if (!element || !element.includeInLayout) + continue; + + var elementHeight:Number = usePreferredSize ? element.getPreferredBoundsHeight() : + element.getLayoutBoundsHeight(); + elementBaseline = element.baseline as Number; + if (isNaN(elementBaseline)) + elementBaseline = 0; + + var baselinePosition:Number = element.baselinePosition; + + elementBaselineTop = baselinePosition - elementBaseline; + elementBaselineBottom = elementHeight - elementBaselineTop; + + measuredBaselineTop = Math.max(elementBaselineTop, measuredBaselineTop); + measuredBaselineBottom = Math.max(elementBaselineBottom, measuredBaselineBottom); + } + } +} } \ No newline at end of file
