<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>noponies</title>
	<atom:link href="http://www.blog.noponies.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blog.noponies.com</link>
	<description>I want a pony for xmas!</description>
	<pubDate>Thu, 02 Oct 2008 19:06:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>ActionScript 3 Scrolling Panel Class</title>
		<link>http://www.blog.noponies.com/archives/110</link>
		<comments>http://www.blog.noponies.com/archives/110#comments</comments>
		<pubDate>Fri, 05 Sep 2008 05:27:13 +0000</pubDate>
		<dc:creator>Dale</dc:creator>
		
		<category><![CDATA[ActionScript 3]]></category>

		<category><![CDATA[class]]></category>

		<category><![CDATA[mouse scrolling]]></category>

		<category><![CDATA[Scrolling Content]]></category>

		<category><![CDATA[scrollRect]]></category>

		<guid isPermaLink="false">http://www.blog.noponies.com/?p=110</guid>
		<description><![CDATA[The NpScrollingPanel is a ActionScript 3 Implementation of a scrolling panel. Pretty common place stuff.
The NpScrollingPanel Class is designed to create a scrolling pane of content. The Class itself does not handle any loading in of content. You must provide the class with DisplayObjects for it to scroll. I wanted it to be completely content [...]]]></description>
			<content:encoded><![CDATA[<p align="left">The NpScrollingPanel is a ActionScript 3 Implementation of a scrolling panel. Pretty common place stuff.</p>
<p align="left">The NpScrollingPanel Class is designed to create a scrolling pane of content. The Class itself does not handle any loading in of content. You must provide the class with DisplayObjects for it to scroll. I wanted it to be completely content independent.</p>
<p align="left">There&#8217;s actually two versions of the class in the download. One, which uses a mask for the scrolling area and another which uses a scrollRect. The mask performs better when you are scrolling with the blur filter enabled. Where as the scrollRect performs marginally better when just scrolling content. The scrollRect implementation also tends to keep memory useage slightly lower. One thing that using a scrollRect will cause is a slight jump in the scrolling as Flash clears the temp bitmapData it creates when creating the bitmap representation of the scrolled content. The advantage of the scrollRect approach is that you can use the blur filter when your scrolled content is larger than Flash&#8217;s 2880 px bitmapData limit, which you will come up against in the mask version. The reason for the scrollRect being slightly slower when using the blur is that it must iterate across each content item being scrolled and blur each one, rather than blurring the entire NpScrollingPanel instance. The reason for the iteration is that if you blur the entire instance, it blurs out past the boundaries of the clipped area, which can look cool or bad, depending on your point of view. I took the the bad view.<br />
Anyway, you can use whatever version you like. They are functionally equivalent.
</p>
<p align="left">Let me know if there are bugs etc..</p>
<p align="left"><strong>Class Features</strong></p>
<ul>
<li> Scroll x and y</li>
<li> Fixed or stage width / height scrolling area</li>
<li> Create columns / rows of scrolling content</li>
<li> Scroll via mouse movement, or via external sources</li>
<li> Scrolls any DisplayObject</li>
<li> Adjust content item padding on the fly</li>
<li> Remove content items on the fly</li>
<li> Use lots of cpu with a blur scroll mode <img src='http://www.blog.noponies.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li> Simple internal easing engine</li>
<li> Control scroll speed and easing</li>
<li> Enable / Disable scrolling</li>
<li> Target individual content items</li>
</ul>
<p align="left"><strong>View Example</strong><br />
Here is an example. It&#8217;s using external XML content and the vertical scroller is pulling in two bitmaps from the library; <a href="http://www.noponies.com/dev/as3_scrollingpanel/" target="_blank">http://www.noponies.com/dev/as3_scrollingpanel/</a></p>
<p align="left"><strong>Source Files</strong><br />
Here are the relevant source file; <a href="http://www.blog.noponies.com/wp-content/uploads/npscrollingpanel.zip" title="ActionScript 3 Scrolling Panel">http://www.blog.noponies.com/wp-content/uploads/npscrollingpanel.zip</a></p>
<p align="left"><strong>Dependencies</strong><br />
The .fla&#8217;s use the Memory and Framerate monitoring component from Grant Skinner, which you can get here: <a href="http://www.gskinner.com/blog/archives/2008/04/simple_componen.html">http://www.gskinner.com/blog/archives/2008/04/simple_componen.html</a>, otherwise, there are no dependencies.</p>
<p align="left"><strong>Class ActionScript (just the main Scroller Class)</strong></p>
<div class="codecolorer-container actionscript" style="height:600px;"><div class="codecolorer" style="font-family: monospace;"><span class="coMULTI">/* AS3<br />
*Copyright 2008 noponies.<br />
*/</span><br />
<br />
package noponies.<span class="me1">ui</span><span class="br0">&#123;</span><br />
<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Shape</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">MouseEvent</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">Event</span>;<br />
&nbsp; <br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">geom</span>.<span class="me1">Point</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">geom</span>.<span class="me1">Rectangle</span>;<br />
<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">DisplayObject</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Loader</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Bitmap</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">filters</span>.<span class="me1">*</span>;<br />
<br />
&nbsp; <span class="kw3">import</span> noponies.<span class="me1">events</span>.<span class="me1">NpScrollingPanelEvent</span>;<br />
&nbsp; <span class="kw3">import</span> noponies.<span class="me1">display</span>.<span class="me1">NpScrollingPanelItem</span>;<br />
<br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp;&lt;strong&gt;NpScrollingPanel&lt;/strong&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;The NpScrollingPanel Class is designed to create a scrolling pane of content. The Class itself does not handle any loading in of content. You must<br />
&nbsp; *&nbsp;provide the class with DisplayObjects for it to scroll.&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;The Class supports scrolling in response to mouse movement over the panel, or via a public method.&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;It also suppors creating rows or columns of content and scrolling that. The Class also supports scaling its mask to browsers dimensions<br />
&nbsp; *&nbsp;or you can simply set it to a fixed size. You are also able to remove individual content items and the class will update the position<br />
&nbsp; *&nbsp;of the content items to accomodate items being removed.&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;Each content item is wrapped in a NpScrollingPanelItem Instance, which dispatches various custom mouse events. You can use these events to<br />
&nbsp; *&nbsp;track what content item has been clicked etc. Useful for using this class as part of a gallery etc.&lt;/p&gt;<br />
&nbsp; * &nbsp; &lt;br /&gt;&lt;br /&gt;<br />
&nbsp; *&nbsp;&lt;b&gt;Author:&lt;/b&gt; noponies - &lt;a href=&quot;http://www.blog.noponies.com/&quot; target=&quot;_blank&quot;&gt;www.blog.noponies.com&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Class version:&lt;/b&gt; 1&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Actionscript version:&lt;/b&gt; 3.0 Player Version 9.0.28&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Copyright:&lt;/b&gt;<br />
&nbsp; * &nbsp; Creative Commons AttCreative Commons Attribution 3.0 New Zealand License&lt;br /&gt; <br />
&nbsp; * &nbsp; &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/nz/&quot; target=&quot;_blank&quot;&gt;http://creativecommons.org/licenses/by/3.0/nz/&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;em&gt;You can use this class how you like, except as a base for Flash Components or for Flash Template sites.&lt;/em&gt;&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Date:&lt;/b&gt; 03 September 2008&lt;br /&gt;<br />
&nbsp; */</span><br />
&nbsp; <br />
&nbsp; <span class="kw3">public</span> <span class="kw2">class</span> NpScrollingPanel <span class="kw3">extends</span> Sprite <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// PRIVATE INSTANCE PROPERTIES</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> maskWidth:<span class="kw3">int</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> maskHeight:<span class="kw3">int</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> counter:<span class="kw3">int</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> padding:<span class="kw3">int</span> = <span class="nu0">10</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> thumbYpos:<span class="kw3">int</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> thumbXpos:<span class="kw3">int</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> thumbMask:Sprite;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> thumbsHolder:Sprite;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> thumbsHolderBg:Sprite;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> itemArray:<span class="kw3">Array</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> hitRect:Rectangle<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> drawBg:<span class="kw3">Boolean</span> = <span class="kw2">true</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> bgColour:uint = 0xFFFFFF<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> blurScroll:<span class="kw3">Boolean</span> = <span class="kw2">false</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> blurQual:<span class="kw3">int</span> = <span class="nu0">3</span><br />
&nbsp; &nbsp; <span class="co1">//scroller variables</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> useMouseScroll:<span class="kw3">Boolean</span> = <span class="kw2">true</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> clipHalf:<span class="kw3">int</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> scrollSpeed:<span class="kw3">Number</span> = .<span class="nu0">2</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> pos:<span class="kw3">Number</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> panelDirection:<span class="kw3">String</span> = <span class="st0">&quot;horizontal&quot;</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> useStageDim:<span class="kw3">Boolean</span> = <span class="kw2">true</span>;<br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> mPos:<span class="kw3">int</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> targPos:<span class="kw3">Number</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> scrollingEnabled:<span class="kw3">Boolean</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> mX:<span class="kw3">int</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> mY:<span class="kw3">int</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> cachePanelAsBit:<span class="kw3">Boolean</span> = <span class="kw2">true</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> blurAmount:<span class="kw3">Number</span> = .<span class="nu0">4</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> panelSnap:<span class="kw3">int</span> = <span class="nu0">3</span><br />
<br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// GETTERS / SETTERS</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the spacing between each content item within the NpScrollingPanel.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;This is a Class Instantiation Property. But you can use the &lt;code&gt;adjustPadding()&lt;/code&gt; method to change padding at runtime!&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 10<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> contentPadding<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> padding;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> contentPadding<span class="br0">&#40;</span>newThumbPadding:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; padding = newThumbPadding;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the &lt;code&gt;y&lt;/code&gt; position of each thumbnail in within the NpScrollingPanel. The purpose of this property is to enable you to<br />
&nbsp; &nbsp;&nbsp; *&nbsp; create mulit rows of content within the NpScrollingPanel. <br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;To create a extra row of thumbnails within the NpScrollingPanel you would set both the &lt;code&gt;thumbYposition&lt;/code&gt; and the &lt;code&gt;thumbXposition&lt;/code&gt; <br />
&nbsp; &nbsp;&nbsp; *&nbsp; properties. For instance, if you are wanting to scroll content horizontally, with two rows after say the 10th element, you would reset the &lt;code&gt;thumbXposition&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; as this property increments with each new thumbnail addition as well as changin the &lt;code&gt;thumbYposition&lt;/code&gt; to reflect the new &lt;code&gt;y&lt;/code&gt; value of the next row of content.&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;This is a Class Instantiation Property&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 0<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> contentYposition<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> thumbYpos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> contentYposition<span class="br0">&#40;</span>newThumbYpos:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbYpos = newThumbYpos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the &lt;code&gt;x&lt;/code&gt; position of each thumbnail in within the NpScrollingPanel. The purpose of this property is to enable you to<br />
&nbsp; &nbsp;&nbsp; *&nbsp; create mulit columns of content within the NpScrollingPanel. <br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;To create a extra row of thumbnails within the NpScrollingPanel you would set both the &lt;code&gt;thumbXposition&lt;/code&gt; and the &lt;code&gt;thumbYposition&lt;/code&gt; <br />
&nbsp; &nbsp;&nbsp; *&nbsp; properties. For instance, if you are wanting to scroll content vertically, with two rows after say the 10th element, you would reset the &lt;code&gt;thumbYposition&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; as this property increments with each new thumbnail addition as well as changin the &lt;code&gt;thumbXposition&lt;/code&gt; to reflect the new &lt;code&gt;X&lt;/code&gt; value of the next column of content.&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;This is a Class Instantiation Property&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 0<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> contentXposition<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> thumbXpos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> contentXposition<span class="br0">&#40;</span>newThumbXpos:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbXpos = newThumbXpos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the buffer that occurs at the start and end of the scrolling panel where the mouses positional value is rounded up or down depending on if its at the far left (down) or far right(up)<br />
&nbsp; &nbsp;&nbsp; *&nbsp; of the scrolling panel. This setting makes it less fiddly to scroll to the very edges of the scrolled content. In effect it offsets the mouses position as it approaches the top-left, bottom-right of<br />
&nbsp; &nbsp;&nbsp; *&nbsp; the scrolling panel. Setting a large value for this property will cause the panel to &quot;snap&quot; into position as the mouse reaches either of these positions.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;This property has no effect on scrolling operations other than the via mouse movement.&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;This is a Class Instantiation &amp; run time Property&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 3<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelSnapPoint<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> panelSnap;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelSnapPoint<span class="br0">&#40;</span>newPanelSnap:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; panelSnap = newPanelSnap;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the visible width of the thumbs track. This value is sets the width of the mask that that thumbs scroll behind. Has no effect if<br />
&nbsp; &nbsp;&nbsp; *&nbsp; the &lt;code&gt;resizeThumbMaskToStage&lt;/code&gt; property is enabled and you are scrolling content in the &lt;code&gt;horizontal&lt;/code&gt; direction.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 0<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @see #resizePanelMaskToStage<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelMaskWidth<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> maskWidth;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelMaskWidth<span class="br0">&#40;</span>newMaskWidth:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; maskWidth = newMaskWidth;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the visible height of the thumbs track. This value is sets the height of the mask that that thumbs scroll behind. Has no effect if<br />
&nbsp; &nbsp;&nbsp; *&nbsp; the &lt;code&gt;resizePanelMaskToStage&lt;/code&gt; property is enabled and you are scrolling content in the &lt;code&gt;vertical&lt;/code&gt; direction.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 0<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @see #resizePanelMaskToStage<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelMaskHeight<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> maskHeight;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelMaskHeight<span class="br0">&#40;</span>newMaskHeight:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; maskHeight = newMaskHeight;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the whether or not the thumb track stretches to match either the stages width, or stages height, depending on what orientation the NpScrollingPanel happens to be in.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;Make sure you set the opposite track dimension value to the NpScrollingPanels orientation. So, if you are creating a horizontal thumb track, make sure you set the &lt;code&gt;maskHeight&lt;/code&gt; property.&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 0 or stage.stageWidth<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Boolean<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> resizePanelMaskToStage<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Boolean</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> useStageDim;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> resizePanelMaskToStage<span class="br0">&#40;</span>newUseStageDim:<span class="kw3">Boolean</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; useStageDim = newUseStageDim;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set whether or not the thumb scrolling is controlled by a user moving their mouse over the NpScrollingPanel.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default true<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Boolean<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> mouseScrolling<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Boolean</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> useMouseScroll;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> mouseScrolling<span class="br0">&#40;</span>newUseMouseScroll:<span class="kw3">Boolean</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; useMouseScroll = newUseMouseScroll;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the easing for scrolling of the NpScrollingPanels scrolling.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default .2<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Number<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> scrollEase<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> scrollSpeed;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> scrollEase<span class="br0">&#40;</span>newScrollMaxSpeed:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; scrollSpeed = newScrollMaxSpeed;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the position of the thumbsTrack as a &lt;code&gt;percentage!&lt;/code&gt; of the NpScrollingPanels mask (visible area) width. Valid value range is within the &lt;code&gt;0-1&lt;/code&gt; range.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;Use this property to scroll the thumbsTrack via external means, such as a slider bar or a mouse Click on a button&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 0<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Number<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelScrollPos<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;horizontal&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> - thumbsHolder.<span class="me1">x</span> / <span class="br0">&#40;</span>thumbsHolder.<span class="kw3">width</span> - thumbMask.<span class="kw3">width</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> - thumbsHolder.<span class="me1">y</span> / <span class="br0">&#40;</span>thumbsHolder.<span class="kw3">height</span> - thumbMask.<span class="kw3">width</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelScrollPos<span class="br0">&#40;</span>newTrackPos:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!scrollingEnabled<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//test thumbsHolder bounds against thumbMask, thumbsHolder must be larger than mask</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;horizontal&quot;</span> &amp;&amp; thumbsHolder.<span class="me1">width</span>&lt;=thumbMask.<span class="kw3">width</span><span class="br0">&#41;</span>||<span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;vertical&quot;</span> &amp;&amp; thumbsHolder.<span class="me1">height</span>&lt;=thumbMask.<span class="kw3">height</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//check to see if we have an enterframe event running, if not add it</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>! <span class="kw3">this</span>.<span class="me1">willTrigger</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>,entFrameScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; panelDirection==<span class="st0">&quot;horizontal&quot;</span> ? scrollThumbsX<span class="br0">&#40;</span>newTrackPos<span class="br0">&#41;</span> : scrollThumbsY<span class="br0">&#40;</span>newTrackPos<span class="br0">&#41;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set if you want to blur the scrolled content as it scrolls. The amount of blur depends on how far the content has to scroll. Bigger distances<br />
&nbsp; &nbsp;&nbsp; * &nbsp;equate to bigger blurs. Content is blurred in the direction it is scrolling in.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;strong&gt;Blurring will not work if your content is larger in any dimension that 2880 pixels. This is a Flash limit for bitmapData.&lt;/strong&gt;&lt;/p&gt;&nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;Be aware that this can affect peformance&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default false<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Boolean<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @see #panelBlurQuality<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelScrollBlur<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Boolean</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> blurScroll<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelScrollBlur<span class="br0">&#40;</span>newBlur:<span class="kw3">Boolean</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; blurScroll = newBlur<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the quality of the blur if you have enabled the &lt;code&gt;panelScrollBlur&lt;/code&gt; property. Higher numbers set higher quality blurs but degrade performance!<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;Be aware that this high will affect peformance&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default 3<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return int<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @see panelScrollBlur<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelBlurQuality<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">int</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> blurQual<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelBlurQuality<span class="br0">&#40;</span>newBlurQual:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; blurQual = newBlurQual<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set the amount of the blurring if you have enabled the &lt;code&gt;panelScrollBlur&lt;/code&gt; property. Higher numbers create greater amounts of blur!<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;Blurring is a proportion of the distance the panel has to travel. The effect of this property is to divide that amount to arrive at the level of blur.<br />
&nbsp; &nbsp;&nbsp; *&nbsp; So, if you set a amount of &lt;code&gt;.5&lt;/code&gt; then the blur will be calculated as .5 of that distance.&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;You can set this property at runtime&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default .4<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Number<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @see panelScrollBlur<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> panelBlurAmount<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Number</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> blurAmount<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> panelBlurAmount<span class="br0">&#40;</span>newBlurAmount:<span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; blurAmount = newBlurAmount<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp;&nbsp; *&nbsp; Get / Set whether or not to cache the scrolling content as a whole as a bitmap. This increases performance, but you will suffer a performance hit if your content<br />
&nbsp; &nbsp;&nbsp; *&nbsp; visually changes etc. <br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;If you have enabled the &lt;code&gt;panelScrollBlur&lt;/code&gt; property, the scrolling content will be bitmap cached when it is blurred, and returned to is previous cache state<br />
&nbsp; &nbsp;&nbsp; *&nbsp; when the blur has finished.&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; &lt;p&gt;&lt;em&gt;This property is tested each time the &lt;code&gt;enableScrolling&lt;/code&gt; method is called.&lt;/em&gt;&lt;/p&gt;<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @default true<br />
&nbsp; &nbsp;&nbsp; *&nbsp; @return Boolean<br />
&nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> renderPanelAsBitmap<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Boolean</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> cachePanelAsBit<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * @private<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> renderPanelAsBitmap<span class="br0">&#40;</span>newCachePanelAtBit:<span class="kw3">Boolean</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; cachePanelAsBit = newCachePanelAtBit<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// CONSTRUCTOR</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; *&nbsp;&lt;strong&gt;NpScrollingPanel&lt;/strong&gt;<br />
&nbsp; &nbsp; *&nbsp;The NpScrollingPanel Class Constructor takes one argument. A string representing the direction you want to scroll your content within.<br />
&nbsp; &nbsp; *&nbsp;&lt;p&gt;To add content to this scrollingPanel use the &lt;code&gt;addContentItem()&lt;/code&gt; method. When you have finished adding in your content that you wish<br />
&nbsp; &nbsp; *&nbsp;to scroll, call the &lt;code&gt;enableScrolling()&lt;/code&gt; method.&lt;/p&gt;<br />
&nbsp; &nbsp; *&nbsp;&lt;p&gt;Set the &lt;code&gt;mouseScrolling, scrollEase, resizeThumbMaskToStage, panelMaskWidth, panelMaskHeight, contentPadding&lt;/code&gt; properties before you call the &lt;code&gt;addContentItem()&lt;/code&gt; method!&lt;/p&gt;<br />
&nbsp; &nbsp; *&nbsp;&lt;p&gt;Use the &lt;code&gt;contentYposition&lt;/code&gt; and &lt;code&gt;contentYposition&lt;/code&gt; properties as you add content to the NpScrollingPanel class &lt;/em&gt;if&lt;/em&gt; you want to create multiple rows and columns&lt;/p&gt;<br />
&nbsp; &nbsp; *&nbsp;&lt;p&gt;If you need to access individual contentItems, you can access their various dispatched events, and from those events, hook into the event.target property. You can also simply&nbsp; query the <br />
&nbsp; &nbsp; *&nbsp;&lt;code&gt;accessThumb()&lt;/code&gt; method.<br />
&nbsp; &nbsp; *&nbsp;@param String (Optional) Representing the direction you want to scroll in. The default scrolling direction is &lt;code&gt;horizontal&lt;/code&gt;!.<br />
&nbsp; &nbsp; *&nbsp;@see #mouseScrolling<br />
&nbsp; &nbsp; *&nbsp;@see #scrollEase<br />
&nbsp; &nbsp; *&nbsp;@see #resizeThumbMaskToStage<br />
&nbsp; &nbsp; *&nbsp;@see #panelMaskHeight<br />
&nbsp; &nbsp; *&nbsp;@see #panelMaskWidth<br />
&nbsp; &nbsp; *&nbsp;@see #contentPadding&nbsp;<br />
&nbsp; &nbsp; *&nbsp;@see #renderPanelAsBitmap<br />
&nbsp; &nbsp; *&nbsp;@see #panelScrollBlur<br />
&nbsp; &nbsp; *&nbsp;@see enableScrolling()<br />
&nbsp; &nbsp; *&nbsp;@see #noponies.events.NpScrollingPanelEvent<br />
&nbsp; &nbsp; *&nbsp;@return<br />
&nbsp; &nbsp; *&nbsp;&lt;br&gt;<br />
&nbsp; &nbsp; *&nbsp;@example Example Useage<br />
&nbsp; &nbsp; *&nbsp; &nbsp;&lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *&nbsp;//Create a new instance of NpScrollingPanel Class and populate it with bitmaps from the library.<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; *&nbsp;var thumbsContainer:NpScrollingPanel = new NpScrollingPanel();<br />
&nbsp; &nbsp; *&nbsp;thumbsContainer.resizePanelMaskToStage = true<br />
&nbsp; &nbsp; *&nbsp;thumbsContainer.panelMaskHeight = 200<br />
&nbsp; &nbsp; *&nbsp;addChild(thumbsContainer);<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; *&nbsp;var libraryItem:Bitmap;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; *&nbsp;function createNewPanel():void {<br />
&nbsp; &nbsp; *&nbsp;&nbsp;for (var i:int = 0; i&lt; 15; i++) {<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;var n:int=i%2;<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;if (n==0) {<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;var FireybreathData:Fireybreath = new Fireybreath(0, 0);<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;libraryItem = new Bitmap(FireybreathData);<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;var StrawberryData:Strawberry = new Strawberry(0, 0);<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;libraryItem = new Bitmap(StrawberryData);<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;thumbsContainer.addContentItem(libraryItem)<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;//when we have finished adding content, turn on scrolling<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;if(i==15){<br />
&nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;thumbsContainer.enableScrolling()<br />
&nbsp; &nbsp; *&nbsp;&nbsp;}<br />
&nbsp; &nbsp; *&nbsp;&nbsp;}&nbsp; <br />
&nbsp; &nbsp; *&nbsp;}<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; *&nbsp;createNewPanel()<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; *&nbsp;&lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> NpScrollingPanel<span class="br0">&#40;</span>panelDirection:<span class="kw3">String</span> = <span class="st0">&quot;horizontal&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>panelDirection.<span class="kw3">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;horizontal&quot;</span> :<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">panelDirection</span> = panelDirection.<span class="kw3">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;vertical&quot;</span> :<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">panelDirection</span> = panelDirection.<span class="kw3">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span> :<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">throw</span> <span class="kw2">new</span> <span class="kw3">Error</span><span class="br0">&#40;</span><span class="st0">&quot;Problem :The direction parameter passed &quot;</span>+<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+ panelDirection+<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span> + <span class="st0">&quot; does not match the allowed orientation modes, which are: <span class="es0">\&quot;</span>horizontal<span class="es0">\&quot;</span>, <span class="es0">\&quot;</span>vertical<span class="es0">\&quot;</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; init<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">//</span><br />
&nbsp; <span class="co1">// PUBLIC METHODS</span><br />
&nbsp; <span class="co1">//</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
<br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// ADD CONTENT ITEM</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; </span><br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;addContentItem()&lt;/code&gt; public method adds DisplayObjects to the NpScrollingPanel. <br />
&nbsp; *&nbsp;@param DisplayObject Representing the DisplayObject you want to add to the NpScrollingPanel<br />
&nbsp; *&nbsp;@see #contentPadding<br />
&nbsp; *&nbsp;@see #contentXposition<br />
&nbsp; *&nbsp;@see #contentYposition<br />
&nbsp; *&nbsp;@return<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> addContentItem<span class="br0">&#40;</span>thumbContent:DisplayObject<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> newThumb:NpScrollingPanelItem= <span class="kw2">new</span> NpScrollingPanelItem<span class="br0">&#40;</span>thumbContent, counter, panelDirection<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; thumbsHolder.<span class="me1">addChild</span><span class="br0">&#40;</span>newThumb<span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;horizontal&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; newThumb.<span class="me1">x</span> = thumbXpos;<br />
&nbsp; &nbsp; &nbsp; newThumb.<span class="me1">y</span> = thumbYpos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; newThumb.<span class="me1">x</span> = thumbXpos;<br />
&nbsp; &nbsp; &nbsp; newThumb.<span class="me1">y</span> = thumbYpos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//create the mask</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>counter==<span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>useStageDim&amp;&amp;panelDirection==<span class="st0">&quot;horizontal&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; maskWidth = <span class="kw3">stage</span>.<span class="me1">stageWidth</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>useStageDim&amp;&amp;panelDirection==<span class="st0">&quot;vertical&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; maskHeight = <span class="kw3">stage</span>.<span class="me1">stageHeight</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="co1">//create the mask sprite for the thumbs track</span><br />
&nbsp; &nbsp; &nbsp; thumbMask = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbMask.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span>0xFFFFFF<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbMask.<span class="me1">graphics</span>.<span class="me1">drawRect</span><span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, maskWidth, maskHeight<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbMask.<span class="me1">graphics</span>.<span class="kw3">endFill</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbMask.<span class="me1">x</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; thumbMask.<span class="me1">y</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; addChild<span class="br0">&#40;</span>thumbMask<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">mask</span> = thumbMask;<br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="co1">//set the bg of the thumbs track which is needed to create a smooth scrolling experience to match</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//the heights and widths of the first instance of the loaded in content</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//this sprite is resized again, as the content loads</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">height</span> = thumbContent.<span class="kw3">height</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">width</span> = thumbContent.<span class="kw3">width</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//increment the positional counter for the thumbs positions</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;horizontal&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">width</span> = thumbsHolder.<span class="kw3">width</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">height</span> = maskHeight;<br />
&nbsp; &nbsp; &nbsp; thumbXpos+=thumbContent.<span class="kw3">width</span>+padding;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">height</span> = thumbsHolder.<span class="kw3">height</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">width</span> = maskWidth;<br />
&nbsp; &nbsp; &nbsp; thumbYpos+=thumbContent.<span class="kw3">height</span>+padding;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//create the counter</span><br />
&nbsp; &nbsp; counter++;<br />
&nbsp; &nbsp; itemArray.<span class="kw3">push</span><span class="br0">&#40;</span>newThumb<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// ENABLE SCROLLING</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; </span><br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;enableScrolling()&lt;/code&gt; public method will enable both mouse movement (Depending on if you have enabled the &lt;code&gt;mouseScrolling&lt;/code&gt; property.&lt;/code&gt;) based and setter based scrolling.<br />
&nbsp; *&nbsp;@see #mouseScrolling<br />
&nbsp; *&nbsp;@see disableScrolling()<br />
&nbsp; *&nbsp;@return<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> enableScrolling<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span>&nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="co1">//enable mouse based scrolling, if it desired. Note the slight inflation of the rectangle. We need to offset it slightly as Flash tests</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//for less than when running a rectangle.contains() method. </span><br />
&nbsp; &nbsp; &nbsp; panelDirection==<span class="st0">&quot;horizontal&quot;</span> ? hitRect = <span class="kw2">new</span> Rectangle<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, maskWidth<span class="nu0">+1</span>, maskHeight<span class="br0">&#41;</span> : hitRect = <span class="kw2">new</span> Rectangle<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, maskWidth, maskHeight<span class="nu0">+1</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>useMouseScroll<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; addScrollListeners<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; scrollingEnabled = <span class="kw2">true</span><br />
&nbsp; &nbsp; <span class="co1">//check to see if we are cacheing the content</span><br />
&nbsp; &nbsp; cachePanelAsBit ? thumbsHolder.<span class="me1">cacheAsBitmap</span> = <span class="kw2">true</span> : thumbsHolder.<span class="me1">cacheAsBitmap</span> = <span class="kw2">false</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// DISABLE SCROLLING</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;disableScrolling()&lt;/code&gt; public method will disable both mouse movement based and setter based scrolling.<br />
&nbsp; *&nbsp;@see enableScrolling()&nbsp;<br />
&nbsp; *&nbsp;@return<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> disableScrolling<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">willTrigger</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, entFrameScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; scrollingEnabled = <span class="kw2">false</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// REMOVE A PARTICULAR THUMB</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;removeContentItem()&lt;/code&gt; public method will remove a contentItem from the NpScrollingPanel. ContentItems with either a <br />
&nbsp; *&nbsp;greater x or y (depending on scrolling direction) than the removed item will move their positions to fill the 'gap' left my deleting<br />
&nbsp; *&nbsp;the contentItem.&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;!! Removing content items when you have multi row or column scrollable content will possibly cause errors&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;Pass in the ID of the thumbnail you want to delete. When thumbs are added to the thumbsTrack they are allocated an ID, which corresponds<br />
&nbsp; *&nbsp;to the order they are added in.&lt;/p&gt;<br />
&nbsp; *&nbsp;@param int Representing the ID of the thumbnail you want to delete from the thumbsTrack.<br />
&nbsp; *&nbsp;@return<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> removeContentItem<span class="br0">&#40;</span>id:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> thumbToDeleteDim:<span class="kw3">Number</span><br />
&nbsp; &nbsp; panelDirection==<span class="st0">&quot;horizontal&quot;</span> ? thumbToDeleteDim = itemArray<span class="br0">&#91;</span>id<span class="br0">&#93;</span>.<span class="me1">thumbWidth</span> : thumbToDeleteDim = itemArray<span class="br0">&#91;</span>id<span class="br0">&#93;</span>.<span class="me1">thumbHeight</span><br />
&nbsp; &nbsp; thumbsHolder.<span class="me1">removeChild</span><span class="br0">&#40;</span>itemArray<span class="br0">&#91;</span>id<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; itemArray.<span class="kw3">splice</span><span class="br0">&#40;</span>id,<span class="nu0">1</span><span class="br0">&#41;</span>&nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//iterate through elements contained in our itemArray</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> len:<span class="kw3">int</span> = itemArray.<span class="kw3">length</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">int</span> = <span class="nu0">0</span>; i&lt; len; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; itemArray<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">removeClip</span><span class="br0">&#40;</span>i, -thumbToDeleteDim-padding<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>drawBg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">width</span> -= thumbToDeleteDim+padding;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// ADJUST THUMB PADDING</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;adjustPadding()&lt;/code&gt; public method will adjust the padding between each content item at runtime. Calling this method will<br />
&nbsp; *&nbsp;result in the content items tweening in unison to their new positions.&lt;/p&gt;<br />
&nbsp; *&nbsp;@param int Representing the amount of padding you would like between each thumbnail.<br />
&nbsp; *&nbsp;@see enableScrolling()&nbsp;<br />
&nbsp; *&nbsp;@return<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> adjustPadding<span class="br0">&#40;</span>newPadding:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">var</span> len:<span class="kw3">int</span> = itemArray.<span class="kw3">length</span><br />
&nbsp; &nbsp; <span class="co1">//iterate through elements contained in our itemArray</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">int</span> = <span class="nu0">0</span>; i&lt; len; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; itemArray<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">adjustPadding</span><span class="br0">&#40;</span>newPadding<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>drawBg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; panelDirection==<span class="st0">&quot;horizontal&quot;</span> ? thumbsHolderBg.<span class="kw3">width</span>+= <span class="br0">&#40;</span>newPadding*itemArray.<span class="kw3">length</span><span class="br0">&#41;</span>-newPadding : thumbsHolderBg.<span class="kw3">height</span>+= <span class="br0">&#40;</span>newPadding*itemArray.<span class="kw3">length</span><span class="br0">&#41;</span>-newPadding; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// UNLOAD ALL THUMBS</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; </span><br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;removeAllContent()&lt;/code&gt; public method will unload any thumbnails currently loaded. It will also reset the heights and widths<br />
&nbsp; *&nbsp;of the NpScrollingPanel. Any mouse event listeners registered with the NpScrollingPanel will also be removed.&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;You would use this method if you wanted to repopulate the class with a new set of content.&lt;/p&gt;<br />
&nbsp; *&nbsp;@return<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> removeAllContent<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//deal with listeners first&nbsp;&nbsp;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">willTrigger</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, entFrameScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>useMouseScroll<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>MouseEvent.<span class="me1">ROLL_OVER</span>, mouseScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//clear thumbs</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>thumbsHolder.<span class="me1">numChildren</span> &gt;<span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>thumbsHolder.<span class="me1">numChildren</span> &gt;<span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">removeChildAt</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//reset internal props</span><br />
&nbsp; &nbsp; counter=<span class="nu0">0</span>;<br />
&nbsp; &nbsp; thumbsHolder.<span class="kw3">width</span> = thumbsHolder.<span class="kw3">height</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>drawBg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="kw3">width</span> = thumbsHolderBg.<span class="kw3">height</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; thumbYpos = thumbXpos = <span class="nu0">0</span><br />
&nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">mask</span> = <span class="kw2">null</span>;<br />
&nbsp; &nbsp; removeChild<span class="br0">&#40;</span>thumbMask<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; itemArray = <span class="br0">&#91;</span><span class="br0">&#93;</span>&nbsp; <br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// REFERENCE A PARTICULAR THUMB</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; <br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; *&nbsp; &nbsp;&lt;p&gt;The &lt;code&gt;accessThumb()&lt;/code&gt; public method is a means of gaining access to a particular thumbNail within the thumbsTrack.&lt;/p&gt;<br />
&nbsp; *&nbsp;&lt;p&gt;You would use this method if you wanted to manipulate individual thumbNails.&lt;/p&gt;<br />
&nbsp; *&nbsp;@return Object representing the thumbNail ID requested.<br />
&nbsp; */</span><br />
&nbsp; <span class="kw3">public</span> <span class="kw2">function</span> accessThumb<span class="br0">&#40;</span>id:<span class="kw3">int</span><span class="br0">&#41;</span>:<span class="kw3">Object</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span>itemArray<span class="br0">&#91;</span>id<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">//</span><br />
&nbsp; <span class="co1">// PRIVATE METHODS</span><br />
&nbsp; <span class="co1">//</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// INIT HANDLER - CALLED FROM CONSTRUCTOR</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">//create thumbs holder sprite here, just do this once</span><br />
&nbsp; <br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; itemArray = <span class="br0">&#91;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; thumbsHolder = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; addChild<span class="br0">&#40;</span>thumbsHolder<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; addEventListener<span class="br0">&#40;</span>Event.<span class="me1">ADDED_TO_STAGE</span>, addedToStageHandler<span class="br0">&#41;</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// ADDED TO STAGE HANDLER</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> addedToStageHandler<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>drawBg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span>bgColour,<span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="me1">graphics</span>.<span class="me1">drawRect</span><span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">1</span>, <span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="me1">graphics</span>.<span class="kw3">endFill</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">addChildAt</span><span class="br0">&#40;</span>thumbsHolderBg,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; thumbsHolderBg.<span class="me1">cacheAsBitmap</span> = <span class="kw2">true</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//add the stage resize listener if its required</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>useStageDim<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">RESIZE</span>, resizeHandler<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp;&nbsp;<br />
&nbsp; &nbsp; addEventListener<span class="br0">&#40;</span>Event.<span class="me1">REMOVED_FROM_STAGE</span>, handleRemovedFromStage<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// RESIZE HANDLER</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> resizeHandler<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>useStageDim<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;horizontal&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>thumbsHolder.<span class="me1">x</span>+thumbsHolder.<span class="me1">width</span>&lt;stage.<span class="me1">stageWidth</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">x</span> = <span class="kw3">stage</span>.<span class="me1">stageWidth</span>-thumbsHolder.<span class="kw3">width</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//test for when the stage is resized when the thumbs are loading</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>thumbsHolder.<span class="me1">width</span>&lt;=<span class="kw3">stage</span>.<span class="me1">stageWidth</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">x</span> = <span class="nu0">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; thumbMask.<span class="kw3">width</span> = <span class="kw3">stage</span>.<span class="me1">stageWidth</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; thumbMask.<span class="kw3">height</span> = maskHeight<br />
&nbsp; &nbsp; &nbsp; &nbsp; hitRect = <span class="kw2">new</span> Rectangle<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">0</span>, thumbMask.<span class="me1">width</span><span class="nu0">-1</span>, maskHeight<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>thumbsHolder.<span class="me1">y</span>+thumbsHolder.<span class="me1">height</span>&lt;stage.<span class="me1">stageHeight</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">y</span> = <span class="kw3">stage</span>.<span class="me1">stageHeight</span>-thumbsHolder.<span class="kw3">height</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//test for when the stage is resized when the thumbs are loading</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>thumbsHolder.<span class="me1">height</span>&lt;=<span class="kw3">stage</span>.<span class="me1">stageHeight</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">x</span> = <span class="nu0">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; thumbMask.<span class="kw3">height</span> = <span class="kw3">stage</span>.<span class="me1">stageHeight</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; thumbMask.<span class="kw3">width</span> = maskWidth<br />
&nbsp; &nbsp; &nbsp; &nbsp; hitRect = <span class="kw2">new</span> Rectangle<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">0</span>, maskWidth, thumbMask.<span class="me1">height</span><span class="nu0">-1</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">//</span><br />
&nbsp; <span class="co1">// MOUSESCROLLING FUNCTIONS</span><br />
&nbsp; <span class="co1">//</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">//function that simply adds the event listeners to our scroll track</span><br />
&nbsp; <span class="co1">//we call this when we have loaded in all the thumbs, as this stops a user from being</span><br />
&nbsp; <span class="co1">//able to scroll a half empty thumbnails track, which would look crap.</span><br />
&nbsp; <br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> addScrollListeners<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; addEventListener<span class="br0">&#40;</span>MouseEvent.<span class="me1">ROLL_OVER</span>, mouseScroll<span class="br0">&#41;</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//handlers that either add or delete the scroll enterframe event</span><br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> mouseScroll<span class="br0">&#40;</span>event:MouseEvent = <span class="kw2">null</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!scrollingEnabled<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//test thumbsHolder bounds against thumbMask, thumbsHolder must be larger than mask</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;horizontal&quot;</span> &amp;&amp; thumbsHolder.<span class="me1">width</span>&lt;=thumbMask.<span class="kw3">width</span><span class="br0">&#41;</span>||<span class="br0">&#40;</span>panelDirection==<span class="st0">&quot;vertical&quot;</span> &amp;&amp; thumbsHolder.<span class="me1">height</span>&lt;=thumbMask.<span class="kw3">height</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//check to see if we have an enterframe event running, if not add it</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>! <span class="kw3">this</span>.<span class="me1">willTrigger</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>,entFrameScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// ENTERFRAME HANDLER</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; </span><br />
&nbsp; <br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> entFrameScroll<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//we have content to scroll, so lets scroll it!</span><br />
&nbsp; &nbsp; panelDirection==<span class="st0">&quot;horizontal&quot;</span> ? scrollThumbsX<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span> : scrollThumbsY<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span> <br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// SCROLLING IN THE X DIRECTION</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; </span><br />
<br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> scrollThumbsX<span class="br0">&#40;</span>nPos:<span class="kw3">Number</span> = <span class="nu0">0</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//store mouse pos as vars</span><br />
&nbsp; &nbsp; mX = mouseX;<br />
&nbsp; &nbsp; mY = mouseY;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//adjust mousePos inline with panelSnappingPoint</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>mX &gt; maskWidth-panelSnap<span class="br0">&#41;</span> mX = maskWidth<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>mX &lt; panelSnap<span class="br0">&#41;</span> mX = <span class="nu0">0</span><br />
<br />
&nbsp; &nbsp; <span class="co1">//set value if scrolling from a source other than mouse</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>nPos != <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; mPos = hitRect.<span class="kw3">width</span>*nPos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>useMouseScroll &amp;&amp; hitRect.<span class="me1">contains</span><span class="br0">&#40;</span>mX,mY<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mX &lt; <span class="nu0">0</span><span class="br0">&#41;</span>&nbsp; mX = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; mPos = mX;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; targPos = -<span class="br0">&#40;</span>mPos/<span class="br0">&#40;</span>hitRect.<span class="kw3">width</span>/<span class="br0">&#40;</span>thumbsHolder.<span class="kw3">width</span> - hitRect.<span class="kw3">width</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; thumbsHolder.<span class="me1">x</span> += <span class="kw3">Number</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>targPos-thumbsHolder.<span class="me1">x</span><span class="br0">&#41;</span><span class="br0">&#41;</span> * scrollSpeed<span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span class="co1">//dampening &amp; kill event handler when we are belowing 1px movement increments</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> n:<span class="kw3">Number</span> = thumbsHolder.<span class="me1">x</span>- targPos;<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n &lt; <span class="nu0">0</span><span class="br0">&#41;</span>&nbsp; n = -n;<br />
&nbsp; <br />
&nbsp; &nbsp; <span class="co1">//turn on blurring, if its being used, if its being used and only if we have a big enough movement in the panel</span><br />
&nbsp; &nbsp;&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>blurScroll &amp;&amp; mPos &gt;= <span class="nu0">0</span> &amp;&amp; n &gt; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">filters</span>=<span class="br0">&#91;</span><span class="kw2">new</span> BlurFilter<span class="br0">&#40;</span><span class="br0">&#40;</span>n * blurAmount<span class="br0">&#41;</span>*.<span class="nu0">5</span>,<span class="nu0">0</span>,blurQual<span class="br0">&#41;</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp;&nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//dispatch the CONTENT_SLIDING event</span><br />
&nbsp; &nbsp; dispatchEvent<span class="br0">&#40;</span><span class="kw2">new</span> NpScrollingPanelEvent<span class="br0">&#40;</span>NpScrollingPanelEvent.<span class="me1">SCROLLING</span>,<span class="kw2">true</span>, <span class="kw2">false</span>, <span class="kw3">undefined</span>, panelScrollPos<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n &lt; <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!useMouseScroll ||!hitRect.<span class="me1">contains</span><span class="br0">&#40;</span>mX,mY<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, entFrameScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>blurScroll<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">filters</span>=<span class="br0">&#91;</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// SCROLLING IN THE Y DIRECTION</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; <br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> scrollThumbsY<span class="br0">&#40;</span>nPos:<span class="kw3">Number</span> = <span class="nu0">0</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//store mouse pos as vars</span><br />
&nbsp; &nbsp; mX = mouseX;<br />
&nbsp; &nbsp; mY = mouseY;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//adjust mousePos inline with panelSnappingPoint</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>mY &gt; maskHeight-panelSnap<span class="br0">&#41;</span> mY = maskHeight<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>mY &lt; panelSnap<span class="br0">&#41;</span> mY = <span class="nu0">0</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//set value if scrolling from a source other than mouse</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>nPos!=<span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; mPos =hitRect.<span class="kw3">height</span>*nPos;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>useMouseScroll &amp;&amp; hitRect.<span class="me1">contains</span><span class="br0">&#40;</span>mX,mY<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mY &lt; <span class="nu0">0</span><span class="br0">&#41;</span>&nbsp; mY = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; mPos = mY;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; targPos = -<span class="br0">&#40;</span>mPos/<span class="br0">&#40;</span>hitRect.<span class="kw3">height</span>/<span class="br0">&#40;</span>thumbsHolder.<span class="me1">height</span>-hitRect.<span class="kw3">height</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; thumbsHolder.<span class="me1">y</span>+=<span class="kw3">Number</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>targPos-thumbsHolder.<span class="me1">y</span><span class="br0">&#41;</span><span class="br0">&#41;</span>*scrollSpeed<span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span class="co1">//dampening &amp; kill event handler when we are belowing 1px movement increments</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> n:<span class="kw3">Number</span> = thumbsHolder.<span class="me1">y</span>- targPos;<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n &lt; <span class="nu0">0</span><span class="br0">&#41;</span>&nbsp; n = -n;<br />
&nbsp; <br />
&nbsp; &nbsp; <span class="co1">//turn on blurring, if its being used and only if we have a big enough movement in the panel</span><br />
&nbsp; &nbsp;&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>blurScroll &amp;&amp; mPos &gt;= <span class="nu0">0</span> &amp;&amp; n &gt; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">filters</span>=<span class="br0">&#91;</span><span class="kw2">new</span> BlurFilter<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="br0">&#40;</span>n * blurAmount<span class="br0">&#41;</span>*.<span class="nu0">5</span>,blurQual<span class="br0">&#41;</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp;&nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp; <span class="co1">//dispatch the CONTENT_SLIDING event</span><br />
&nbsp; &nbsp; dispatchEvent<span class="br0">&#40;</span><span class="kw2">new</span> NpScrollingPanelEvent<span class="br0">&#40;</span>NpScrollingPanelEvent.<span class="me1">SCROLLING</span>,<span class="kw2">true</span>, <span class="kw2">false</span>, <span class="kw3">undefined</span>, panelScrollPos<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n &lt; <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!useMouseScroll ||!hitRect.<span class="me1">contains</span><span class="br0">&#40;</span>mX,mY<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, entFrameScroll<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>blurScroll<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thumbsHolder.<span class="me1">filters</span>=<span class="br0">&#91;</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <br />
&nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; <span class="co1">// HANDLE A REMOVED FROM STAGE EVENT</span><br />
&nbsp; <span class="co1">//--------------------------------------&nbsp; </span><br />
<br />
&nbsp; <span class="co1">//clean up the class when removed from stage</span><br />
&nbsp; <span class="kw3">private</span> <span class="kw2">function</span> handleRemovedFromStage<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; removeEventListener<span class="br0">&#40;</span>Event.<span class="me1">ADDED_TO_STAGE</span>, addedToStageHandler<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; removeEventListener<span class="br0">&#40;</span>Event.<span class="me1">REMOVED_FROM_STAGE</span>, handleRemovedFromStage<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>useStageDim<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">RESIZE</span>, resizeHandler<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp;&nbsp;<br />
&nbsp; &nbsp; &nbsp; <span class="co1">//call public removeAllContent Method</span><br />
&nbsp; &nbsp; &nbsp; removeAllContent<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw3">catch</span> <span class="br0">&#40;</span>event:<span class="kw3">Error</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;There was an error when attempting to delete all NpScrollingPanel content: &quot;</span>+<span class="kw3">Error</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
<span class="br0">&#125;</span><br />
<br />
<span class="br0">&#125;</span></div></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.noponies.com/archives/110/feed</wfw:commentRss>
		</item>
		<item>
		<title>ActionScript 3 Flexible Layout Class</title>
		<link>http://www.blog.noponies.com/archives/109</link>
		<comments>http://www.blog.noponies.com/archives/109#comments</comments>
		<pubDate>Wed, 06 Aug 2008 22:06:59 +0000</pubDate>
		<dc:creator>Dale</dc:creator>
		
		<category><![CDATA[ActionScript 3]]></category>

		<category><![CDATA[class]]></category>

		<category><![CDATA[Class]]></category>

		<category><![CDATA[flex layout manager]]></category>

		<category><![CDATA[layout]]></category>

		<category><![CDATA[stage resize]]></category>

		<category><![CDATA[tween]]></category>

		<guid isPermaLink="false">http://www.blog.noponies.com/?p=109</guid>
		<description><![CDATA[ActionScript 3 NpFlexLayout Class
The NpFlexLayout Class is designed to simplify aligning DisplayObjects to stage dimensions and responding to changes in stage dimensions at run time by a user or between different users.
This supersedes a simpler implementation of this approach, called &#8220;ActionScript 3 Liquid Layout Manager&#8221;, which I&#8217;ll leave on the site.
As opposed to the LayoutManager [...]]]></description>
			<content:encoded><![CDATA[<p align="left">ActionScript 3 NpFlexLayout Class</p>
<p align="left">The NpFlexLayout Class is designed to simplify aligning DisplayObjects to stage dimensions and responding to changes in stage dimensions at run time by a user or between different users.</p>
<p align="left">This supersedes a simpler implementation of this approach, called &#8220;ActionScript 3 Liquid Layout Manager&#8221;, which I&#8217;ll leave on the site.</p>
<p align="left">As opposed to the LayoutManager class, the NpFlexLayout class is an actual layout manager, taking care of instantiating, destroying and passing on requests to instances of an internal class called NpFLexLayoutItem which wraps each displayObject passed to the NpFlexLayout Class.</p>
<p align="left"><strong>Class Features</strong></p>
<ul>
<li> Position objects (x,y) on the stage as a proportion of the stages dimensions</li>
<li> offSet each displayObject (x,y) from where it would be by an absolute pixel value</li>
<li> set objects to stretch to fit either stage width / height or a proportion of stage dimensions</li>
<li> per object minX &#038; minY settings where reflowing, resizing will cease</li>
<li> use either the clips registration point, or its visual center (width/height) </li>
<li> pause, resume displayObjects responding to resize events</li>
<li>update individual  class properties at runtime</li>
<li>tween objects properties at runtime (uses internal simple tween method)</li>
<li>set tween easing</li>
<li>add, remove displayObjects from class</li>
</ul>
<p align="left"><strong>View Example</strong><br />
Here is an example; <a href="http://www.noponies.com/dev/as3_flexlayout/" target="_blank">http://www.noponies.com/dev/as3_flexlayout/</a></p>
<p align="left"><strong>Source Files</strong><br />
Here are the relevant source file; <a href="http://www.blog.noponies.com/wp-content/uploads/npflexlayout.zip" title="ActionScript 3 Full Browser Background Files">http://www.blog.noponies.com/wp-content/uploads/npflexlayout.zip</a></p>
<p align="left"><strong>Dependencies</strong><br />
None.</p>
<p align="left"><strong>Class ActionScript</strong></p>
<div class="codecolorer-container actionscript" style="height:600px;"><div class="codecolorer" style="font-family: monospace;"><span class="coMULTI">/* AS3<br />
*Copyright 2008 noponies.<br />
*/</span><br />
<br />
package noponies.<span class="me1">ui</span><span class="br0">&#123;</span><br />
<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">DisplayObject</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">Event</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">EventDispatcher</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="kw3">getTimer</span>;<br />
&nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">Dictionary</span>;<br />
&nbsp; <span class="kw3">import</span> noponies.<span class="me1">ui</span>.<span class="me1">NpFlexLayoutItem</span>;<br />
<br />
&nbsp; <span class="coMULTI">/**<br />
&nbsp; * &nbsp; &lt;strong&gt;NpFlexLayout&lt;/strong&gt;&nbsp;<br />
&nbsp; * &lt;br /&gt;<br />
&nbsp; * The NpFlexLayout class is a Display class that repositions objects passed to it when a stage resize event occurs.<br />
&nbsp; * &lt;p&gt;The class has many parameters for creating flexible layouts. You are able to add and remove clips at runtime, specify the percentage of the stages height <br />
&nbsp; * and width a clip reflows to. Class supports an offset value in pixels, for offsetting a clips position, relative to where it would have been positioned. <br />
&nbsp; * Specify a minimum x and y position at which point the clip will no longer be reflowed. Clips can use either their registration point<br />
&nbsp; * or you can specifiy them to position themselves based off their visible (width*.5, height*.5) center. Clip also supports scaling objects to a stage dimension along with positioning<br />
&nbsp; * clips. Useful for creating footers etc. With the minimum parameters (displayObject, {x, y}), the class defaults to using a &quot;fast path&quot; to improve performance.<br />
&nbsp; * &lt;br /&gt;&lt;br /&gt;<br />
&nbsp; *&nbsp;&lt;b&gt;Author:&lt;/b&gt; noponies - &lt;a href=&quot;http://www.blog.noponies.com/&quot; target=&quot;_blank&quot;&gt;www.blog.noponies.com&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Class version:&lt;/b&gt; 1&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Actionscript version:&lt;/b&gt; 3.0 Player Version 9.0.28&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Copyright:&lt;/b&gt;<br />
&nbsp; * &nbsp; Creative Commons AttCreative Commons Attribution 3.0 New Zealand License&lt;br /&gt; <br />
&nbsp; * &nbsp; &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/nz/&quot; target=&quot;_blank&quot;&gt;http://creativecommons.org/licenses/by/3.0/nz/&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;em&gt;You can use this class how you like, except as a base for Flash Components or for Flash Template sites.&lt;/em&gt;&lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;br /&gt;<br />
&nbsp; * &nbsp; &lt;b&gt;Date:&lt;/b&gt; 07 August 2008&lt;br /&gt;<br />
&nbsp; */</span><br />
<br />
&nbsp; <span class="kw3">public</span> <span class="kw2">class</span> NpFlexLayout <span class="kw3">extends</span> EventDispatcher <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// PRIVATE PROPERTIES</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="kw3">private</span>&nbsp; <span class="kw2">var</span> stageInstance:<span class="kw3">Stage</span>;<span class="co1">//stage ref</span><br />
&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> layOutObjects:Dictionary = <span class="kw2">new</span> Dictionary<span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * NpFlexLayout. The constructor will throw an error if either the stages &lt;code&gt;scaleMode&lt;/code&gt; is not set to &lt;code&gt;stage.scaleMode = StageScaleMode.NO_SCALE&lt;/code&gt; or if the<br />
&nbsp; &nbsp; * stages &lt;code&gt;align&lt;/code&gt; is not set to &lt;code&gt;stage.align = StageAlign.TOP_LEFT&lt;/code&gt;. Make sure you set these values in your parent swf!<br />
&nbsp; &nbsp; * @param stageRef Reference to the stage.<br />
&nbsp; &nbsp; * @return void<br />
&nbsp; &nbsp; * @example Flash CS3 Timeline Script Example<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * //minimal constructor arguments<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, {x:0, y:.1,width:1, height:0,offSetY:0})<br />
&nbsp; &nbsp; * <br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> NpFlexLayout<span class="br0">&#40;</span>stageRef:<span class="kw3">Stage</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; stageInstance = stageRef<br />
&nbsp; &nbsp; &nbsp; <span class="co1">//check both scale mode and stage align</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>stageInstance.<span class="kw3">scaleMode</span>!=<span class="st0">&quot;noScale&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">throw</span> <span class="kw2">new</span> <span class="kw3">Error</span><span class="br0">&#40;</span><span class="st0">&quot;The Stage scaleMode must be set to <span class="es0">\&quot;</span>noScale<span class="es0">\&quot;</span>. Currently it is set to &quot;</span> +<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+stageInstance.<span class="kw3">scaleMode</span>+<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>stageInstance.<span class="kw3">align</span>!=<span class="st0">&quot;TL&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">throw</span> <span class="kw2">new</span> <span class="kw3">Error</span><span class="br0">&#40;</span><span class="st0">&quot;The Stage scaleMode must be set to <span class="es0">\&quot;</span>TL<span class="es0">\&quot;</span>. Currently it is set to &quot;</span> +<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+stageInstance.<span class="kw3">align</span>+<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// PUBLIC INSTANCE METHODS</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The addTarget method is designed to allow add objects to the NpFlexLayout class at runtime. Each addition of a new display object will call the main &lt;code&gt;reflowObjects&lt;/code&gt; method, so your object will automatically<br />
&nbsp; &nbsp; * position itself.<br />
&nbsp; &nbsp; * &lt;p&gt;&lt;strong&gt;Some points to note&lt;/strong&gt;&lt;br/&gt;<br />
&nbsp; &nbsp; * &lt;ul&gt;&lt;li&gt;Percentage values are in the 0-1 range&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt;Optional Params must be wrapped in an Object {} and can appear in any order, or in any amount&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt;The target parameter is mandatory&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt;The x, y, offSetX, offSetY, width, height, useClipRegPoint, xmin, ymin params are optional&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt;Setting width or height to a value other an 0 will enable resizing of your passed DisplayObject&lt;/li&gt;<br />
&nbsp; &nbsp;&nbsp; * &lt;/ul&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; * &lt;strong&gt;Possible &quot;vars&quot; Object Properties&lt;/strong&gt;<br />
&nbsp; &nbsp;&nbsp; * &lt;ul&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; x Optional (Default = 0) Number horizontal or x postion on the stage (as a PERCENTAGE of the stage) where you want your object to sit: 0 = left, 1 = full right etc.&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; y Optional (Default = 0) Number vertical or y postion on the stage (as a PERCENTAGE of the stage) where you want your object to sit: 0 = top, 1 = bottom.&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; offSetX Optional (Default = 0) Number representing an horizontal or x offset value, of your clips x position. This value is in pixels. This value can be either negative or positive, depending on what direction you wish to offset your clip.&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; offSetY Optional (Default = 0) Number representing an vertical or y offset value, of your clips y position. This value is in pixels. This value can be either negative or positive, depending on what direction you wish to offset your clip.&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; width Optional (Default = 0) Number representing the width of your object as a (as a PERCENTAGE of the stage width). Setting this to anything other than 0 will make your objects width expand and contract with changes in stage dimensions. &lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; height Optional (Default = 0) Number representing the height of your object as a (as a PERCENTAGE of the stage height). Setting this to anything other than 0 will make your objects height expand and contract with changes in stage dimensions.&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; minX Optional (Default = 0) int representing the &lt;strong&gt;minimum x position&lt;/strong&gt;&nbsp; you want your clip to move to, after which point, it will not be adjusted. This is a pixel value!&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; minY Optional (Default = 0) int representing the &lt;strong&gt;minimum y&nbsp; position&lt;/strong&gt; width you want your clip to move to, after which point, it will not be adjusted. This is a pixel value!&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;li&gt; useClipRegPoint Optional (Default = false) Boolean &lt;code&gt;true&lt;/code&gt; means clip is positioned off its reg point, &lt;code&gt;false&lt;/code&gt; means its natural center (height/width) is used.&lt;/li&gt;<br />
&nbsp; &nbsp; * &lt;/ul&gt;<br />
&nbsp; &nbsp; * @param target DisplayObject you would like to add to the NpFlexLayout classes influence.<br />
&nbsp; &nbsp; * @param vars Object containing the various properties used to resposition and align your DisplayObject.<br />
&nbsp; &nbsp; * @example Various options demonstrated.<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * //Create class instance<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, {x:.5, y:.5});<br />
&nbsp; &nbsp; * //scale a clip across stage dimensions<br />
&nbsp; &nbsp; * stageTest.addTarget(green_mc, {x:5, y:.5,offSetX:-100, useClipRegPoint:true, xmin:500});<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * stageTest.addTarget(black,&nbsp; {x:0, y:.1,width:1, height:0,offSetY:0});<br />
&nbsp; &nbsp; * <br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; * @return void<br />
&nbsp; &nbsp;&nbsp; */</span><br />
<br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> addTarget<span class="br0">&#40;</span><span class="kw3">target</span>:DisplayObject, vars:<span class="kw3">Object</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//create default Object template</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw2">var</span> targObj:<span class="kw3">Object</span> = <span class="br0">&#123;</span>x:<span class="nu0">0</span>, y:<span class="nu0">0</span>, useClipRegPoint:<span class="kw2">false</span>, offSetX:<span class="nu0">0</span>, offSetY:<span class="nu0">0</span>, <span class="kw3">width</span>:<span class="nu0">0</span>, <span class="kw3">height</span>:<span class="nu0">0</span>, minX:<span class="nu0">0</span>, minY:<span class="nu0">0</span><span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//populate object template with passed in params</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">Object</span> <span class="kw1">in</span> vars<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; targObj<span class="br0">&#91;</span>i<span class="br0">&#93;</span> = vars<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">//add elements to dictionary object and instantiate internal NpFlexLayoutItem Class</span><br />
&nbsp; &nbsp; &nbsp; layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span> =&nbsp; <span class="kw2">new</span> NpFlexLayoutItem<span class="br0">&#40;</span><span class="kw3">target</span>, targObj<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// PAUSE REFLOW METHOD</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The pauseReflowTarget method is designed to allow you temporarily remove objects from the NpFlexLayout classes influence at runtime.<br />
&nbsp; &nbsp; * &lt;p&gt;The effect of running this method is that the targeted DisplayObject will remove its Event.RESIZE listener. This method is useful if <br />
&nbsp; &nbsp; * you simply need to remove an disable an object from responding to stage resize events for a short time.&lt;/p&gt;<br />
&nbsp; &nbsp; * @param target DisplayObject you would like to remove from the NpFlexLayout classes influence.<br />
&nbsp; &nbsp; * @see #resumeReflowTarget()&nbsp; <br />
&nbsp; &nbsp; * @see #getReflowStatus()&nbsp;&nbsp;<br />
&nbsp; &nbsp; * @return void<br />
&nbsp; &nbsp; * @example Demo of pauseReflowTarget method.<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * import gs.TweenLite;<br />
&nbsp; &nbsp; * //Create class instance<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, .5, 0,{useClipRegPoint:true});<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * stage.addEventListener(MouseEvent.CLICK, disableResize)<br />
&nbsp; &nbsp; * function disableResize(event:MouseEvent):void{<br />
&nbsp; &nbsp; * &nbsp; stageTest.pauseReflowTarget(blue_mc)<br />
&nbsp; &nbsp; * }<br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> pauseReflowTarget<span class="br0">&#40;</span><span class="kw3">target</span>:DisplayObject<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>.<span class="me1">disableStageResize</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">catch</span><span class="br0">&#40;</span><span class="kw3">e</span>:<span class="kw3">Error</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;Problem disabling object &quot;</span> +<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+<span class="kw3">target</span>+<span class="st0">&quot;<span class="es0">\&quot;</span> from responding to Stage Resize Events. Its probably already deleted, or does not exist! &quot;</span>+ e<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// RESUME REFLOW METHOD</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The resumeReflowTarget method is designed to allow you re enable objects that have been temporarily removed from the NpFlexLayout classes influence at runtime.<br />
&nbsp; &nbsp; * &lt;p&gt;The effect of running this method is that the targeted DisplayObject will re add its Event.RESIZE listener if has been removed. This method is useful if <br />
&nbsp; &nbsp; * you have temporarily disabled an object from listening for Event.RESIZE events, and you need to re enable listening for that event. &lt;/p&gt;<br />
&nbsp; &nbsp; * @param target DisplayObject you would like to enable back into the the NpFlexLayout classes influence.<br />
&nbsp; &nbsp; * @see #pauseReflowTarget()<br />
&nbsp; &nbsp; * @see #getReflowStatus()&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; * @return void<br />
&nbsp; &nbsp; * @example Demo of resumeReflowTarget method.<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * import gs.TweenLite;<br />
&nbsp; &nbsp; * //Create class instance<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, .5, 0,{useClipRegPoint:true});<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * stage.addEventListener(MouseEvent.CLICK, enableResize)<br />
&nbsp; &nbsp; * function disableResize(event:MouseEvent):void{<br />
&nbsp; &nbsp; * &nbsp; stageTest.enableReflowTarget(blue_mc)<br />
&nbsp; &nbsp; * }<br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> resumeReflowTarget<span class="br0">&#40;</span><span class="kw3">target</span>:DisplayObject<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>.<span class="me1">renableStageResize</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">catch</span><span class="br0">&#40;</span><span class="kw3">e</span>:<span class="kw3">Error</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;Problem re enabling object &quot;</span> +<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+<span class="kw3">target</span>+<span class="st0">&quot;<span class="es0">\&quot;</span> responding to Stage Resize Events. Its probably already deleted, or does not exist! &quot;</span>+ e<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// GET PAUSED STATUS METHOD</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The getReflowStatus method is designed to allow you to check the reflowStatus of any DisplayObject under the influence of the NpFlexLayout Class.<br />
&nbsp; &nbsp; * &lt;p&gt;A value of &lt;code&gt;true&lt;/code&gt; indicates that a DisplayObject is listening for Event.RESIZE events. A value of &lt;code&gt;false&lt;/code&gt; indicates that<br />
&nbsp; &nbsp; * a DisplayObject is not listening for this event.&lt;/p&gt;<br />
&nbsp; &nbsp; * @param target DisplayObject you would like to test the reflowStatus of<br />
&nbsp; &nbsp; * @see #resumeReflowTarget()<br />
&nbsp; &nbsp; * @see #pauseReflowTarget()&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; * @return Boolean<br />
&nbsp; &nbsp; * @example Demo of getReflowStatus method.<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * import gs.TweenLite;<br />
&nbsp; &nbsp; * //Create class instance<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, .5, 0,{useClipRegPoint:true});<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * stage.addEventListener(MouseEvent.CLICK, checkReflowStatus)<br />
&nbsp; &nbsp; * function checkReflowStatus(event:MouseEvent):void{<br />
&nbsp; &nbsp; * &nbsp; stageTest.getReflowStatus(blue_mc)<br />
&nbsp; &nbsp; * }<br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> getReflowStatus<span class="br0">&#40;</span><span class="kw3">target</span>:DisplayObject<span class="br0">&#41;</span>:<span class="kw3">Boolean</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>.<span class="me1">reflowing</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// REMOVE TARGET METHOD</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The removeTarget method is designed to allow you totally remove objects from the NpFlexLayout classes influence at runtime.<br />
&nbsp; &nbsp; * &lt;p&gt;Calling this method is functionally the same as each object controlled by the NpFlexLayout Class recieving a Event.REMOVED_FROM_STAGE<br />
&nbsp; &nbsp; * event. The reference to the DisplayObject is also deleted from the internal Dictionary that catalogues all DisplayObjects under the<br />
&nbsp; &nbsp; * influence of the NpFlexLayout Class. This method is a final concrete &lt;em&gt;delete object from class&lt;/em&gt; method. To temporarily disable DisplayObjects<br />
&nbsp; &nbsp; * from the class use the &lt;code&gt;pauseReflowTarget&lt;/code&gt; and the &lt;code&gt;resumeReflowTarget&lt;/code&gt; methods.&lt;/p&gt;<br />
&nbsp; &nbsp; * @param target DisplayObject you would like to remove from the NpFlexLayout classes influence.<br />
&nbsp; &nbsp; * @throw TypeError indicating that you passed an invalid DisplayObject to the NpFlexLayoutClass<br />
&nbsp; &nbsp; * @return void<br />
&nbsp; &nbsp; * @example Demo of removeTarget method.<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * import gs.TweenLite;<br />
&nbsp; &nbsp; * //Create class instance<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, .5, 0,{useClipRegPoint:true});<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * stage.addEventListener(MouseEvent.CLICK, removeObject)<br />
&nbsp; &nbsp; * function removeObject(event:MouseEvent):void{<br />
&nbsp; &nbsp; * &nbsp; stageTest.removeTarget(blue_mc)<br />
&nbsp; &nbsp; * }<br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> removeTarget<span class="br0">&#40;</span><span class="kw3">target</span>:DisplayObject<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>.<span class="me1">killClass</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kw3">delete</span> layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>;&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">catch</span><span class="br0">&#40;</span><span class="kw3">e</span>:<span class="kw3">Error</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;Problem deleting object &quot;</span> +<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+<span class="kw3">target</span>+<span class="st0">&quot;<span class="es0">\&quot;</span> from Class. Its probably already deleted, or does not exist! &quot;</span>+ e<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// UPDATE OBJECT DIMENSIONS METHOD</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The updateObjectDimensions method is designed to allow you to update the dimensions of your display objects<br />
&nbsp; &nbsp; * dynamically and have the new clip dimensions taken into account in positioning the display object.<br />
&nbsp; &nbsp; * @param target DisplayObject you are currently updating the dimensions of.<br />
&nbsp; &nbsp; * @return void<br />
&nbsp; &nbsp; * @example Tween an Display Object (blue_mc) using TweenLite and its onUpdate Param<br />
&nbsp; &nbsp; * &lt;listing version=&quot;3.0&quot;&gt;<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * import noponies.display.NpFlexLayout;<br />
&nbsp; &nbsp; * stage.scaleMode = StageScaleMode.NO_SCALE;<br />
&nbsp; &nbsp; * stage.align = StageAlign.TOP_LEFT;<br />
&nbsp; &nbsp; * import gs.TweenLite;<br />
&nbsp; &nbsp; * //Create class instance<br />
&nbsp; &nbsp; * var stageTest:NpFlexLayout = new NpFlexLayout(stage);<br />
&nbsp; &nbsp; * stageTest.addTarget(blue_mc, .5, 0,{useClipRegPoint:true});<br />
&nbsp; &nbsp; *<br />
&nbsp; &nbsp; * stage.addEventListener(MouseEvent.CLICK, tweenObject)<br />
&nbsp; &nbsp; * function tweenObject(event:MouseEvent):void{<br />
&nbsp; &nbsp; * &nbsp; TweenLite.to(blue_mc, 1, {width:300, onUpdate:stageTest.updateObjectDimensions, onUpdateParams:[blue_mc]});<br />
&nbsp; &nbsp; * }<br />
&nbsp; &nbsp; * &lt;/listing&gt;<br />
&nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> updateObjectDimensions<span class="br0">&#40;</span><span class="kw3">target</span>:DisplayObject<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>!=<span class="kw3">undefined</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; layOutObjects<span class="br0">&#91;</span><span class="kw3">target</span><span class="br0">&#93;</span>.<span class="me1">reflowObjects</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;Passed target DisplayObject &quot;</span> +<span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>+<span class="kw3">target</span>+<span class="st0">&quot;<span class="es0">\&quot;</span> is not a member of this class&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------</span><br />
&nbsp; &nbsp; <span class="co1">// UPDATE OBJECT PROPS METHOD</span><br />
&nbsp; &nbsp; <span class="co1">//--------------------------------------&nbsp; &nbsp; </span><br />
&nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; * The updateObjectProps method is designed to allow you to update the individual properties of your DisplayObject<br />
&nbsp; &nbsp; * dynamically and have the new properties taken into account in positioning the DisplayObject.<br />
&nbsp; &nbsp; * @param target DisplayObject you would like to update the NpFlexLayout Properties of.<br />
&nbsp; &nbsp; * @param vars Object containing the properties you wish to update.<br />
&nbsp; &nbsp; * &lt;br /&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; * &lt;strong&gt;Possible &quot;vars&quot; Object Properties&lt;/strong&gt;<br />
&nbsp; &nbsp; * &lt;ul&