<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>haejeanson &#124; BLOG</title>
	<atom:link href="http://haejeanson.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://haejeanson.com/blog</link>
	<description>An eclectic array of things that inspire me~</description>
	<pubDate>Tue, 03 Aug 2010 00:08:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>1st Place Winner in Yahoo banner ad contest!</title>
		<link>http://haejeanson.com/blog/?p=193</link>
		<comments>http://haejeanson.com/blog/?p=193#comments</comments>
		<pubDate>Thu, 29 Apr 2010 19:47:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Freedom Interactive]]></category>

		<category><![CDATA[My Portfolio]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=193</guid>
		<description><![CDATA[
I was in charge of the Mercedes Benz Laguna Niguel campaign. I built a Video Banner, Expanding Video Banner and Sync Banner that clicks through to the landing page I built above.  My boss entered the Video banner into a yahoo contest and we won first place. Yay!!!
Check out the ads here:
Yahoo Banner
Sync Banner - [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-194" title="mercedes" src="http://haejeanson.com/blog/wp-content/uploads/2010/04/mercedes.jpg" alt="mercedes" width="925" height="823" /></p>
<p>I was in charge of the Mercedes Benz Laguna Niguel campaign. I built a Video Banner, Expanding Video Banner and Sync Banner that clicks through to the landing page I built above.  My boss entered the Video banner into a yahoo contest and we won first place. Yay!!!</p>
<p>Check out the ads here:<br />
<a href="http://creative.freedominteractive.com/clients/mercedes-benz/video_banner/" target="_blank">Yahoo Banner</a><br />
<a href="http://creative.freedominteractive.com/clients/mercedes-benz/sync_banner/" target="_blank">Sync Banner </a>- The top and far right banner sync together as one banner<br />
<a href="http://creative.freedominteractive.com/clients/mercedes-benz/expanding/" target="_blank">Expandable banner</a><br />
<a href="http://creative.freedominteractive.com/clients/mercedes-benz/landing/" target="_blank">Landing page</a></p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=193</wfw:commentRss>
		</item>
		<item>
		<title>Bob&#8217;s Trees Landing Page</title>
		<link>http://haejeanson.com/blog/?p=190</link>
		<comments>http://haejeanson.com/blog/?p=190#comments</comments>
		<pubDate>Thu, 29 Apr 2010 19:45:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Freedom Interactive]]></category>

		<category><![CDATA[My Portfolio]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=190</guid>
		<description><![CDATA[At work I have so many different projects I work on everyday. I made things from banner ads to emails to landing pages. Here is a landing page I just made for Bob&#8217;s Trees. Check it out here! 
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-189" title="bobstrees" src="http://haejeanson.com/blog/wp-content/uploads/2010/04/bobstrees.jpg" alt="bobstrees" width="935" height="764" />At work I have so many different projects I work on everyday. I made things from banner ads to emails to landing pages. Here is a landing page I just made for Bob&#8217;s Trees. <a href="http://creative.freedominteractive.com/clients/bobs_trees/landing/" target="_blank">Check it out here! </a></p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=190</wfw:commentRss>
		</item>
		<item>
		<title>Charles Z Fedak &amp; Company</title>
		<link>http://haejeanson.com/blog/?p=182</link>
		<comments>http://haejeanson.com/blog/?p=182#comments</comments>
		<pubDate>Tue, 20 Apr 2010 19:03:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[My Portfolio]]></category>

		<category><![CDATA[Web Design]]></category>

		<category><![CDATA[What I'm doing now!]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=182</guid>
		<description><![CDATA[
I have been working with this graphic designer, Dustin Fedak on website projects that come his way.  Our first project we are working on together is for his fathers CPA firm. So far things are going smoothly. We will be launching the site very soon, so keep checking back to find out when.
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-185" title="charles" src="http://haejeanson.com/blog/wp-content/uploads/2010/04/charles.jpg" alt="charles" width="922" height="705" /></p>
<p style="text-align: left;">I have been working with this graphic designer, Dustin Fedak on website projects that come his way.  Our first project we are working on together is for his fathers CPA firm. So far things are going smoothly. We will be launching the site very soon, so keep checking back to find out when.</p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=182</wfw:commentRss>
		</item>
		<item>
		<title>Learning Joomla!!!</title>
		<link>http://haejeanson.com/blog/?p=176</link>
		<comments>http://haejeanson.com/blog/?p=176#comments</comments>
		<pubDate>Sat, 24 Oct 2009 03:18:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=176</guid>
		<description><![CDATA[I&#8217;ve noticed that having joomla, drupal, wordpress and other web 2.0 technologies on my resume is a growing demand these days.  I am determined to learn these technologies. I&#8217;ve just downloaded and installed the latest Joomla 1.5.14. Wish me luck!
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve noticed that having joomla, drupal, wordpress and other web 2.0 technologies on my resume is a growing demand these days.  I am determined to learn these technologies. I&#8217;ve just downloaded and installed the latest <a title="download joomla" href="http://www.joomla.org/download.html" target="_blank">Joomla 1.5.14</a>. Wish me luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=176</wfw:commentRss>
		</item>
		<item>
		<title>Bestway Cleaners Website</title>
		<link>http://haejeanson.com/blog/?p=165</link>
		<comments>http://haejeanson.com/blog/?p=165#comments</comments>
		<pubDate>Thu, 24 Sep 2009 19:01:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[My Portfolio]]></category>

		<category><![CDATA[Web Design]]></category>

		<category><![CDATA[What I'm doing now!]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=165</guid>
		<description><![CDATA[
My parents are the proud owners of Bestway Cleaners and Laundry. They are finally getting a new face on the web.  Currently I&#8217;m working on building their website.
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-166" title="bestwaycleaner4" src="http://haejeanson.com/blog/wp-content/uploads/2009/09/bestwaycleaner4.jpg" alt="bestwaycleaner4" width="1024" height="768" /></p>
<p>My parents are the proud owners of Bestway Cleaners and Laundry. They are finally getting a new face on the web.  Currently I&#8217;m working on building their website.</p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=165</wfw:commentRss>
		</item>
		<item>
		<title>Have you heard of Krop?</title>
		<link>http://haejeanson.com/blog/?p=159</link>
		<comments>http://haejeanson.com/blog/?p=159#comments</comments>
		<pubDate>Thu, 10 Sep 2009 20:35:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Resources]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=159</guid>
		<description><![CDATA[I came across this great site while searching for new opportunities. It&#8217;s called Krop. It&#8217;s pretty awesome! Not only do they have a great database of job listings, but it&#8217;s great for designers to build a their resume and showcase their work online. 
This is an example of My Krop portfolio

]]></description>
			<content:encoded><![CDATA[<p>I came across this great site while searching for new opportunities. It&#8217;s called Krop. It&#8217;s pretty awesome! Not only do they have a great database of job listings, but it&#8217;s great for designers to build a their resume and showcase their work online. <img class="aligncenter size-full wp-image-160" title="krophome" src="http://haejeanson.com/blog/wp-content/uploads/2009/09/krophome.jpg" alt="krophome" width="1024" height="768" /></p>
<p>This is an example of <a href="http://www.krop.com/haejeanson/" target="_blank">My Krop portfolio</a></p>
<p><img class="aligncenter size-full wp-image-161" title="mykrop" src="http://haejeanson.com/blog/wp-content/uploads/2009/09/mykrop.jpg" alt="mykrop" width="1024" height="768" /></p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=159</wfw:commentRss>
		</item>
		<item>
		<title>Just launched the new MACHINE Jeans Website</title>
		<link>http://haejeanson.com/blog/?p=147</link>
		<comments>http://haejeanson.com/blog/?p=147#comments</comments>
		<pubDate>Sun, 06 Sep 2009 07:25:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[Flash Development]]></category>

		<category><![CDATA[My Portfolio]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=147</guid>
		<description><![CDATA[My friend Gia Byun from Delasade.com was working for MACHINE Jeans doing their PR. They were in need of a new website and she offered the job to me. MACHINE Jeans are a type of distressed designer jeans. Celebrities like Rhianna, Angela Simmons, D. Woods from Danity Kind and LaYoya Jackson have been seen wearing [...]]]></description>
			<content:encoded><![CDATA[<p>My friend Gia Byun from Delasade.com was working for MACHINE Jeans doing their PR. They were in need of a new website and she offered the job to me. MACHINE Jeans are a type of distressed designer jeans. Celebrities like Rhianna, Angela Simmons, D. Woods from Danity Kind and LaYoya Jackson have been seen wearing them. We just launch yesterday,  September 5, 2009. Check out the site at: <a href="http://machinejeans.com">http://machinejeans.com</a></p>
<p><img class="aligncenter size-full wp-image-152" title="machinejeanshome1" src="http://haejeanson.com/blog/wp-content/uploads/2009/09/machinejeanshome1.jpg" alt="machinejeanshome1" width="1024" height="534" /></p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=147</wfw:commentRss>
		</item>
		<item>
		<title>Custom Scrollbar - actionscript 3.0</title>
		<link>http://haejeanson.com/blog/?p=126</link>
		<comments>http://haejeanson.com/blog/?p=126#comments</comments>
		<pubDate>Mon, 11 May 2009 20:16:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[Flash Development]]></category>

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

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=126</guid>
		<description><![CDATA[Awesome! I found a great tutorial to build a custom scrollbar for text and tile list movies.
read more here: Go to tutorial. I&#8217;ve played around with it and it works great. It creates dynamic graphics that you can modify color, size and everything. Hope this is helpful someone else&#8230; I know it was a great [...]]]></description>
			<content:encoded><![CDATA[<p>Awesome! I found a great tutorial to build a custom scrollbar for text and tile list movies.<br />
read more here: <a href="http://www.kirupa.com/forum/showthread.php?t=245468">Go to tutorial</a>. I&#8217;ve played around with it and it works great. It creates dynamic graphics that you can modify color, size and everything. Hope this is helpful someone else&#8230; I know it was a great find for me!</p>
<p>enjoy~<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<strong>TUTORIAL:</strong></p>
<p><strong>Scrollbars and Sliders</strong></p>
<p>At the core of just about every scrollbar is the slider. A slider can be described as a track and a marker. The marker can be dragged along the length of the track where it&#8217;s position along the track is the visual representation of some percentage that we can read and write.</p>
<p>To promote a more flexible design we will be decoupling the way in which anything becomes aware of the scrollbar. Instead of the scrollbar modifying an object based on it&#8217;s percentage we will instead notify objects that the scrollbar has changed, providing them with the new percentage.</p>
<p>At this point we are discussing two agents in the design, a slider (which is itself a component that can be used 100% independently of the scrollbar ), and the event which our slider will broadcast.</p>
<p>These can be defined programatically as Slider and SliderEvent with the following classes:</p>
<p><DIV STYLE="border:1px #ccc solid; padding:15px;"><br />
ACTIONSCRIPT - <strong>Slider.as</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<code>package<br />
{<br />
    import flash.display.Sprite;<br />
    import flash.events.MouseEvent;<br />
    import flash.geom.Rectangle;</p>
<p>    /**<br />
     * Represents the base functionality for Sliders.<br />
     *<br />
     * Broadcasts 1 event:<br />
     * -SliderEvent.CHANGE<br />
     */<br />
    public class Slider extends Sprite<br />
    {<br />
        // elements<br />
        protected var track:Sprite;<br />
        protected var marker:Sprite;</p>
<p>        // percentage<br />
        protected var percentage:Number = 0;<br />
        /**<br />
         * The percent is represented as a value between 0 and 1.<br />
         */<br />
        public function get percent():Number { return percentage; }<br />
        /**<br />
         * The percent is represented as a value between 0 and 1.<br />
         */<br />
        public function set percent( p:Number ):void<br />
        {<br />
            percentage = Math.min( 1, Math.max( 0, p ) );<br />
            marker.y = percentage * (track.height - marker.height);</p>
<p>            dispatchEvent( new SliderEvent( SliderEvent.CHANGE, percentage ) );<br />
        }</p>
<p>        /**<br />
         * Constructor<br />
         */<br />
        public function Slider()<br />
        {<br />
            createElements();<br />
        }</p>
<p>        // ends the sliding session<br />
        protected function stopSliding( e:MouseEvent ):void<br />
        {<br />
            marker.stopDrag();<br />
            stage.removeEventListener( MouseEvent.MOUSE_MOVE, updatePercent );<br />
            stage.removeEventListener( MouseEvent.MOUSE_UP, stopSliding );<br />
        }<br />
        // updates the data to reflect the visuals<br />
        protected function updatePercent( e:MouseEvent ):void<br />
        {<br />
            e.updateAfterEvent();<br />
            percentage = marker.y / (track.height - marker.height);</p>
<p>            dispatchEvent( new SliderEvent( SliderEvent.CHANGE, percentage ) );<br />
        }</p>
<p>        //  Executed when the marker is pressed by the user.<br />
        protected function markerPress( e:MouseEvent ):void<br />
        {<br />
            marker.startDrag( false, new Rectangle( 0, 0, 0, track.height - marker.height ) );<br />
            stage.addEventListener( MouseEvent.MOUSE_MOVE, updatePercent );<br />
            stage.addEventListener( MouseEvent.MOUSE_UP, stopSliding );<br />
        } </p>
<p>        /**<br />
         * Creates and initializes the marker/track elements.<br />
         */<br />
        protected function createElements():void<br />
        {<br />
            track = new Sprite();<br />
            marker = new Sprite();</p>
<p>            track.graphics.beginFill( 0xCCCCCC, 1 );<br />
            track.graphics.drawRect(0, 0, 10, 100);<br />
            track.graphics.endFill();</p>
<p>            marker.graphics.beginFill( 0x333333, 1 );<br />
            marker.graphics.drawRect(0, 0, 10, 15);<br />
            marker.graphics.endFill();</p>
<p>            marker.addEventListener( MouseEvent.MOUSE_DOWN, markerPress );</p>
<p>            addChild( track );<br />
            addChild( marker );<br />
        }<br />
    }<br />
}</code><br />
</DIV></p>
<p><DIV STYLE="border:1px #ccc solid; padding:15px;"><br />
ACTIONSCRIPT -<strong>SliderEvent.as</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<code>package<br />
{<br />
    import flash.events.Event;</p>
<p>    public class SliderEvent extends Event<br />
    {<br />
        // events<br />
        public static const CHANGE:String = "change";</p>
<p>        protected var percentage:Number;<br />
        /**<br />
         * Read-Only<br />
         */<br />
        public function get percent():Number<br />
        {<br />
            return percentage;<br />
        }</p>
<p>        /**<br />
         * Constructor<br />
         */<br />
        public function SliderEvent( type:String, percent:Number )<br />
        {<br />
            super( type );<br />
            percentage = percent;<br />
        }<br />
    }<br />
}</code>
</div>
<p>This code should be failry intuitive and require very little explanation if at all, so if there is something that is not understood, please ask and I will explain it.</p>
<p><strong>Scrollbars</strong></p>
<p>Since scrollbars are a composite of simpler components, the definition of a scrollbar is going to simply manage these components. We will talk about this design before showing the code.</p>
<p>Think about what differentiates a scrollbar and a slider (minus the context within which they operate). In data scrollbars and sliders represent the same thing, some percentage. The difference is the means in which the percentage can be modified.</p>
<p>A slider has a marker and a track, where the marker&#8217;s position is the &#8216;visual&#8217; representation of the slider&#8217;s percentage. This marker can be dragged, allowing the user to modify the percentage.</p>
<p>A scrollbar is everything that a slider is in addition to allowing the user to press &#8216;arrows&#8217; that increment/decrement the percentage by some predefined or calculated amount. You can remember in the design of the slider we allowed ourselves a means of modifying a sliders percentage programatically. This flexibility is what will allow us to implement the scrollbar.</p>
<p>Since what the scrollbar and slider represent in data are the same thing, we can use the same means of notifying a listener about changes in data. So our scrollbar class will be used merely to encapsulate the composition of the arrows and track. Remember that the way in which we notify the objects is the same, as a note instead of re-broadcasting the events we will simply register listeners for the Slider directly.</p>
<p>A simple implementation of the Scrollbar follows.</p>
<p><DIV STYLE="border:1px #ccc solid; padding:15px;"><br />
ACTIONSCRIPT  - <strong>Scrollbar.as</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<code>package<br />
{<br />
    import flash.display.Sprite;<br />
    import flash.events.MouseEvent;</p>
<p>    public class Scrollbar extends Sprite<br />
    {<br />
        // elements<br />
        protected var slider:Slider;<br />
        protected var up_arrow:Sprite;<br />
        protected var down_arrow:Sprite;</p>
<p>        protected var scrollSpeed:Number = .1;</p>
<p>        // read/write percentage value relates directly to the slider<br />
        public function get percent():Number { return slider.percent; }<br />
        public function set percent( p:Number ):void { slider.percent = p; }</p>
<p>        /**<br />
         * Constructor<br />
         */<br />
        public function Scrollbar()<br />
        {<br />
            createElements();<br />
        }</p>
<p>        // executes when the up arrow is pressed<br />
        protected function arrowPressed( e:MouseEvent ):void<br />
        {<br />
            var dir:int = (e.target == up_arrow) ? -1 : 1;<br />
            slider.percent += dir * scrollSpeed;<br />
        }</p>
<p>        /**<br />
         * Create and initialize the slider and arrow elements.<br />
         */<br />
        protected function createElements():void<br />
        {<br />
            slider = new Slider();</p>
<p>            up_arrow = new Sprite();<br />
            up_arrow.graphics.beginFill( 0x666666, 1 );<br />
            up_arrow.graphics.drawRect( 0, 0, 10, 10 );<br />
            up_arrow.graphics.endFill();</p>
<p>            down_arrow = new Sprite();<br />
            down_arrow.graphics.beginFill( 0x666666, 1 );<br />
            down_arrow.graphics.drawRect( 0, 0, 10, 10 );<br />
            down_arrow.graphics.endFill();</p>
<p>            slider.y = up_arrow.height;<br />
            down_arrow.y = slider.y + slider.height;</p>
<p>            up_arrow.addEventListener( MouseEvent.MOUSE_DOWN, arrowPressed );<br />
            down_arrow.addEventListener( MouseEvent.MOUSE_DOWN, arrowPressed );</p>
<p>            addChild( slider );<br />
            addChild( up_arrow );<br />
            addChild( down_arrow );<br />
        }</p>
<p>        /**<br />
         * Override the add and remove event listeners, so that SliderEvent.CHANGE events will be<br />
         * subscribed to the Slider directly.<br />
         *<br />
         * There is issues with this however, Event.CHANGE events will get subscribed directly too Slider as well.<br />
         */<br />
        public override function addEventListener( type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false ):void<br />
        {<br />
            if ( type === SliderEvent.CHANGE )<br />
            {<br />
                slider.addEventListener( SliderEvent.CHANGE, listener, useCapture, priority, useWeakReference );<br />
                return;<br />
            }<br />
            super.addEventListener( type, listener, useCapture, priority, useWeakReference );<br />
        }<br />
        public override function removeEventListener( type:String, listener:Function, useCapture:Boolean=false ):void<br />
        {<br />
            if ( type === SliderEvent.CHANGE )<br />
            {<br />
                slider.removeEventListener( SliderEvent.CHANGE, listener, useCapture );<br />
                return;<br />
            }<br />
            super.removeEventListener( type, listener, useCapture );<br />
        }<br />
    }<br />
}</code>
</div>
<p>Once again this code should be failry intuitive, but I will actually go over this one.</p>
<p>Pretty much all we are doing here is creating the slider and the arrows and assigning their functionality. When either of the arrows are pressed the arrowPressed method gets invoked, we see which arrow was pressed, then we update the slider accordingly. The slider retains all of it&#8217;s previous functionality&#8230; because we haven&#8217;t touched it.</p>
<p>So now we have all of this&#8230; but still, it&#8217;s really not a scrollbar.</p>
<p>Content?</p>
<p>This part is by far the easiest, and can be thought of as yet another abstraction. We can build a ScrollContent class that is a composition of a scrollbar and some content.</p>
<p>We will assume that all content wishing to be scrolled is a Sprite. We will utilize various properties of the sprite to set up the scroll. The method in which we will scroll the content is simple and is explained in this post: http://www.createage.com/blog/?p=105.</p>
<p>Here is a simple implementation of the ScrollContent class.</p>
<p><strong>ScrollContent</strong><br />
<DIV STYLE="border:1px #ccc solid; padding:15px;"><br />
ACTIONSCRIPT  - <strong>ScrollContent.as</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<code>package<br />
{<br />
    import flash.display.Sprite;<br />
    import flash.geom.Rectangle;</p>
<p>    public class ScrollContent extends Sprite<br />
    {<br />
        // elements<br />
        protected var content:Sprite;<br />
        protected var scrollbar:Scrollbar;<br />
        protected var contentHeight:Number;</p>
<p>        /**<br />
         * Constructor<br />
         */<br />
        public function ScrollContent( clip:Sprite, scroller:Scrollbar, scrollRect:Rectangle )<br />
        {<br />
            content = clip;<br />
            contentHeight = clip.height;<br />
            content.scrollRect = scrollRect;</p>
<p>            scrollbar = scroller;</p>
<p>            scrollbar.addEventListener( SliderEvent.CHANGE, updateContent );<br />
        }</p>
<p>        public function updateContent( e:SliderEvent ):void<br />
        {<br />
            var scrollable:Number = contentHeight - content.scrollRect.height;<br />
            var sr:Rectangle = content.scrollRect.clone();</p>
<p>            sr.y = scrollable * e.percent;</p>
<p>            content.scrollRect = sr;<br />
        }<br />
    }<br />
}</code>
</div>
<p>You can see that this is yet again another simple abstraction. It was a little more of a process to get started, but once complete you have a very flexible, very reusable base from which you can implement many different kinds of scrolling components.</p>
<p>The main class that was used to test this follows (it&#8217;s simple, you shouldn&#8217;t have an issue understanding it).</p>
<p><DIV STYLE="border:1px #ccc solid; padding:15px;"><br />
ACTIONSCRIPT  - <strong>ScrollbarExample.as</strong><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<code>package {<br />
    import flash.display.Sprite;<br />
    import flash.events.Event;<br />
    import flash.geom.Rectangle;</p>
<p>    public class ScrollbarExample extends Sprite<br />
    {<br />
        public function ScrollbarExample()<br />
        {<br />
            var content:Sprite = new Sprite();<br />
            var scrollbar:Scrollbar = new Scrollbar();<br />
            var scroll_rect:Rectangle = new Rectangle( 0, 0, 100, 50 );</p>
<p>            content.graphics.beginFill( 0xFF0000, 1 );<br />
            content.graphics.drawRect( 0, 0, 100, 50 );<br />
            content.graphics.beginFill( 0x00FF00, 1 );<br />
            content.graphics.drawRect( 0, 50, 100, 50 );<br />
            content.graphics.beginFill( 0x0000FF, 1 );<br />
            content.graphics.drawRect( 0, 100, 100, 50 );<br />
            content.graphics.endFill();</p>
<p>            var rect:Rectangle = new Rectangle( 0, 0, 100, 50 );<br />
            var sc:ScrollContent = new ScrollContent( content, scrollbar, rect );</p>
<p>            scrollbar.x = content.width;</p>
<p>            addChild( content );<br />
            addChild( scrollbar );<br />
        }<br />
    }<br />
}</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=126</wfw:commentRss>
		</item>
		<item>
		<title>Boarding pass to save the date</title>
		<link>http://haejeanson.com/blog/?p=119</link>
		<comments>http://haejeanson.com/blog/?p=119#comments</comments>
		<pubDate>Sun, 10 May 2009 22:05:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Graphic Design]]></category>

		<category><![CDATA[What I'm doing now!]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=119</guid>
		<description><![CDATA[My Friend Sunny is getting married and asked me to help with her save the date cards. She&#8217;s going to have a destination wedding because half her guest are coming from London. I thought it would be a cute Idea to make a boarding pass save the date. Check out my first attempt~

]]></description>
			<content:encoded><![CDATA[<p>My Friend Sunny is getting married and asked me to help with her save the date cards. She&#8217;s going to have a destination wedding because half her guest are coming from London. I thought it would be a cute Idea to make a boarding pass save the date. Check out my first attempt~<br />
<img src="http://haejeanson.com/blog/wp-content/uploads/2009/05/sunnynik_savethedate-1024x439.gif" alt="sunnynik_savethedate" title="sunnynik_savethedate" width="1024" height="439" class="aligncenter size-large wp-image-120" /></p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=119</wfw:commentRss>
		</item>
		<item>
		<title>Flash Actionscript 3.0 Guestbook</title>
		<link>http://haejeanson.com/blog/?p=109</link>
		<comments>http://haejeanson.com/blog/?p=109#comments</comments>
		<pubDate>Tue, 05 May 2009 19:08:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[Flash Development]]></category>

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

		<category><![CDATA[What I'm doing now!]]></category>

		<guid isPermaLink="false">http://haejeanson.com/blog/?p=109</guid>
		<description><![CDATA[I&#8217;m building a Multimedia player for work and I needed to try and implement a commenting system. I found that it was hard to search for commenting systems in actionscript 3.0 so I searched and searched for a guestbook in actionscript 3.0. I thought I was never going to find anything to guide me in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m building a Multimedia player for work and I needed to try and implement a commenting system. I found that it was hard to search for commenting systems in actionscript 3.0 so I searched and searched for a guestbook in actionscript 3.0. I thought I was never going to find anything to guide me in the right direction and then I found this site. It&#8217;s awesome and pretty easy to understand.</p>
<p>Preview here: <a href="http://haejeanson.com/personal/Guestbook/XmlCs3GuestBook.html" target="_blank">http://haejeanson.com/personal/Guestbook/XmlCs3GuestBook.html</a></p>
<p>Download Source files here: <a title="Guestbook" href="http://www.haejeanson.com/download/tutorials/Guestbook.zip" target="_blank">Guestbook.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://haejeanson.com/blog/?feed=rss2&amp;p=109</wfw:commentRss>
		</item>
	</channel>
</rss>
