Skip to content

Commit

Permalink
Revised Deferred implementation.
Browse files Browse the repository at this point in the history
  • Loading branch information
xtyler committed Oct 18, 2011
1 parent 67ea5d2 commit cab94c3
Show file tree
Hide file tree
Showing 15 changed files with 131 additions and 462 deletions.
5 changes: 0 additions & 5 deletions build.xml
Expand Up @@ -57,9 +57,6 @@
<include name="libs/*.swc" />
<include name="locale/${flex-sdk.locale}/*.swc" />
</library-path>
<library-path dir="libs" append="true">
<include name="*.swc" />
</library-path>
</compc>
</target>

Expand All @@ -72,8 +69,6 @@
<namespace uri="http://xd.flightxd.com/2011" manifest="${src.dir}/manifest.xml" />
<source-path path-element="${src.dir}" />
<library-path dir="${flex-sdk.dir}/frameworks/libs" includes="*.swc" append="true" />
<library-path dir="${basedir}/libs" includes="*.swc" append="true" />
<examples-path dir="${basedir}/examples" />
</asdoc>
</target>

Expand Down
25 changes: 11 additions & 14 deletions example.properties
Expand Up @@ -10,13 +10,13 @@
# Modify these path values to reflect paths on your system
###################################################################

library.name = Stealth SDK
library.name = stealth-sdk

# -----------------------------------------------------------------
# Flex SDK Properties
# -----------------------------------------------------------------
flex-sdk.dir = C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.5/sdks/4.5.7
#flex-sdk.dir = /Applications/Adobe Flash Builder 4.5/sdks/4.5.7
flex-sdk.dir = C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.5/sdks/4.5.0
#flex-sdk.dir = /Applications/Adobe Flash Builder 4.5/sdks/4.5.0
flex-sdk.locale = en_US
flex-sdk.player = 10.2

Expand All @@ -27,20 +27,17 @@ flex-sdk.player = 10.2
###################################################################

# -----------------------------------------------------------------
# Report/Output Directories
# Project Paths - DO NOT MODIFY
# -----------------------------------------------------------------
src.dir = ${basedir}/src
bin.dir = ${basedir}/bin
libs.dir = ${basedir}/libs

# -----------------------------------------------------------------
# Report/Output Directories
# -----------------------------------------------------------------
docs.dir = ${basedir}/docs
docs.templates = ${flex-sdk.dir}/asdoc/templates

link-report.name = link-report
link-report.dir = ${docs.dir}
reports.dir = ${basedir}/reports
tests.dir = ${basedir}/tests

# -----------------------------------------------------------------
# Project Paths - DO NOT MODIFY
# -----------------------------------------------------------------
build.dir = ${basedir}/build
src.dir = ${basedir}/src
bin.dir = ${basedir}/bin
link-report.dir = ${bin.dir}
18 changes: 4 additions & 14 deletions src/flight/display/Bitmap.as
Expand Up @@ -12,9 +12,7 @@ package flight.display
import flash.display.DisplayObject;
import flash.display.PixelSnapping;
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.filters.BitmapFilter;
import flash.utils.Dictionary;

import flight.collections.ArrayList;
import flight.events.InvalidationEvent;
Expand Down Expand Up @@ -303,20 +301,12 @@ package flight.display
Invalidation.validateNow(this, phase);
}

public function defer(target:IEventDispatcher, event:String, listener:Function, priority:int = 0):DeferredListener
public function defer(method:Function, withPropertyChange:String = null):void
{
if (!deferredListeners) {
deferredListeners = new Dictionary();
}
if (!deferredListeners[listener]) {
deferredListeners[listener] = new DeferredListener(this, listener);
}
var deferred:DeferredListener = deferredListeners[listener];
deferred.priority = priority;
deferred.defer(target, event);
return deferred;
deferred ||= new Deferred(this);
deferred.defer(method, withPropertyChange);
}
private var deferredListeners:Dictionary;
private var deferred:Deferred;

protected function get created():Boolean { return _created; }
private var _created:Boolean;
Expand Down
68 changes: 68 additions & 0 deletions src/flight/display/Deferred.as
@@ -0,0 +1,68 @@
/*
* From the Stealth SDK, a UI framework for the Flash Developer.
* Copyright (c) 2011 Tyler Wright - Flight XD.
* Permission is hereby granted to use, modify, and distribute this file
* in accordance with the terms of the license agreement accompanying it.
*/

package flight.display
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.utils.Dictionary;

import flight.events.InvalidationEvent;
import flight.events.PropertyEvent;

public class Deferred extends Dictionary
{
private var target:Object;
private var watched:Object;

public function Deferred(target:Object)
{
this.target = target;
target.addEventListener(PropertyEvent.PROPERTY_CHANGE, onPropertyChange, false, 10, true);
target.addEventListener(InvalidationEvent.COMMIT, onCommit, false, 10, true);
}

public function defer(method:Function, withPropertyChange:String = null):void
{
if (withPropertyChange) {
watched ||= {};
watched[withPropertyChange] = method;
}

if (!this[method]) {
this[method] = true;
invalidate();
}
}

private function onPropertyChange(event:PropertyEvent):void
{
var method:Function = watched[event.property];
if (method != null && !this[method]) {
this[method] = true;
invalidate();
}
}

private function onCommit(event:Event):void
{
for (var method:* in this) {
delete this[method];
method();
}
}

private function invalidate():void
{
if (target is IInvalidating) {
IInvalidating(target).invalidate(InvalidationEvent.COMMIT);
} else if (target is DisplayObject) {
Invalidation.invalidate(DisplayObject(target), InvalidationEvent.COMMIT);
}
}
}
}
51 changes: 0 additions & 51 deletions src/flight/display/DeferredListener.as

This file was deleted.

0 comments on commit cab94c3

Please sign in to comment.