[Checkins] SVN: z3c.reference/branches/flash/ replaced old
imagetool with new version from geroldboehler
Johannes Faigle
johannes.faigle at lovelysystems.com
Tue Sep 4 11:37:45 EDT 2007
Log message for revision 79461:
replaced old imagetool with new version from geroldboehler
Changed:
A z3c.reference/branches/flash/flash/
A z3c.reference/branches/flash/flash/debug/
A z3c.reference/branches/flash/flash/debug/debug.swf
A z3c.reference/branches/flash/flash/fla/
A z3c.reference/branches/flash/flash/fla/imagetool.as
A z3c.reference/branches/flash/flash/fla/imagetool.fla
A z3c.reference/branches/flash/flash/fla/img/
A z3c.reference/branches/flash/flash/fla/img/fingercursor.gif
A z3c.reference/branches/flash/flash/fla/img/handcursor.gif
A z3c.reference/branches/flash/flash/src/
A z3c.reference/branches/flash/flash/src/net/
A z3c.reference/branches/flash/flash/src/net/hiddenresource/
A z3c.reference/branches/flash/flash/src/net/hiddenresource/util/
A z3c.reference/branches/flash/flash/src/net/hiddenresource/util/Delegate.as
A z3c.reference/branches/flash/flash/src/net/hiddenresource/util/debug/
A z3c.reference/branches/flash/flash/src/net/hiddenresource/util/debug/Debug.as
A z3c.reference/branches/flash/flash/src/z3c/
A z3c.reference/branches/flash/flash/src/z3c/reference/
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Canvas.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Controller.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Viewport.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/Component.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventBroadcaster.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventInfo.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as
A z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/IFEventBroadcaster.as
D z3c.reference/branches/flash/src/z3c/reference/demo/browser/addref.pt
U z3c.reference/branches/flash/src/z3c/reference/demo/browser/picker.pt
U z3c.reference/branches/flash/src/z3c/reference/demo/browser/swf/imagetool.swf
-=-
Added: z3c.reference/branches/flash/flash/debug/debug.swf
===================================================================
(Binary files differ)
Property changes on: z3c.reference/branches/flash/flash/debug/debug.swf
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: z3c.reference/branches/flash/flash/fla/imagetool.as
===================================================================
--- z3c.reference/branches/flash/flash/fla/imagetool.as (rev 0)
+++ z3c.reference/branches/flash/flash/fla/imagetool.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,46 @@
+stop();
+
+Stage.align = "LT";
+Stage.scaleMode = "noScale";
+
+
+// Debug Block Start
+if (System.capabilities.playerType == "External")
+{
+ if (!_level0.url) _level0.url="testimage.jpg";
+
+ //default values
+ if (!_level0.crop_x) _level0.crop_x = 100;
+ if (!_level0.crop_y) _level0.crop_y = 100;
+ if (!_level0.crop_w) _level0.crop_w = 100;
+ if (!_level0.crop_h) _level0.crop_h = 100;
+ if (!_level0.original_w) _level0.original_w = 600;
+ if (!_level0.original_h) _level0.original_h = 400;
+ //if (!_level0.output_w) _level0.output_w = 200;
+ //if (!_level0.output_h) _level0.output_h = 50;
+ if (!_level0.zoomfactor) _level0.zoomfactor=0.33;
+ if (!_level0.rotation) _level0.rotation=90;
+ _level0.keepAspectRatio = false;
+}
+// Debug Block End
+
+
+// init flashvar manager
+z3c.reference.imagetool.core.FlashvarManager.oneTimeInit();
+
+// create an instance of the z3c Image Tool
+//var tool:z3c.reference.imagetool.baseskin.ImageTool = z3c.reference.imagetool.baseskin.ImageTool(_level0.attachMovie("BaseClip","BaseClip", _level0.getNextHighestDepth()));
+attachMovie("imagetool_mc", "imagetool_mc", getNextHighestDepth())
+
+/*
+tool.setOutputSize(FlashvarManager.get("output_w"), FlashvarManager.get("output_h"));
+tool.setOriginalSize(FlashvarManager.get("original_w"), FlashvarManager.get("original_h"));
+tool.setCrop(FlashvarManager.get("crop_x"), FlashvarManager.get("crop_y"), FlashvarManager.get("crop_w"), FlashvarManager.get("crop_h"));
+tool.setUrl(FlashvarManager.get("url"));
+tool.setRotation(FlashvarManager.get("rotation") * -1); //PIL rotates opposite to flash
+tool.setOutputRatio(FlashvarManager.get("zoomfactor"));
+tool.initialize();
+*/
+
+
+
Added: z3c.reference/branches/flash/flash/fla/imagetool.fla
===================================================================
(Binary files differ)
Property changes on: z3c.reference/branches/flash/flash/fla/imagetool.fla
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: z3c.reference/branches/flash/flash/fla/img/fingercursor.gif
===================================================================
(Binary files differ)
Property changes on: z3c.reference/branches/flash/flash/fla/img/fingercursor.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: z3c.reference/branches/flash/flash/fla/img/handcursor.gif
===================================================================
(Binary files differ)
Property changes on: z3c.reference/branches/flash/flash/fla/img/handcursor.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: z3c.reference/branches/flash/flash/src/net/hiddenresource/util/Delegate.as
===================================================================
--- z3c.reference/branches/flash/flash/src/net/hiddenresource/util/Delegate.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/net/hiddenresource/util/Delegate.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,27 @@
+/*
+ * Delegate.as v1.0.1 (MTASC compatible)
+ */
+class net.hiddenresource.util.Delegate
+{
+ public static function create(target:Object, handler:Function):Function
+ {
+ // Get any extra arguments for handler
+ var extraArgs:Array = arguments.slice(2);
+
+ // Declare delegate variable (MTASC compatibility)
+ var delegate:Function;
+
+ // Create delegate function
+ delegate = function():Object
+ {
+ // Augment arguments passed from broadcaster with additional args
+ var fullArgs:Array = arguments.concat(extraArgs, [delegate]);
+
+ // Call handler with arguments
+ return handler.apply(target, fullArgs);
+ };
+
+ // Return the delegate function.
+ return delegate;
+ }
+}
Property changes on: z3c.reference/branches/flash/flash/src/net/hiddenresource/util/Delegate.as
___________________________________________________________________
Name: svn:executable
+ *
Added: z3c.reference/branches/flash/flash/src/net/hiddenresource/util/debug/Debug.as
===================================================================
--- z3c.reference/branches/flash/flash/src/net/hiddenresource/util/debug/Debug.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/net/hiddenresource/util/debug/Debug.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,269 @@
+/**
+ * Alcon Debug class
+ * Sends trace actions to the Alcon output panel through a local connection.
+ * @version 1.0.7 (09.02.2006)
+ * @author Sascha Balkau <sascha at hiddenresource.corewatch.net>
+ */
+class net.hiddenresource.util.debug.Debug
+{
+
+ // If using MTASC trace facility, set this to true:
+ private static var mtf:Boolean = false;
+ // Determines if data blocks > 40Kb are split into chunks:
+ private static var sp:Boolean = true;
+ // Default depth of recursion for object tracing:
+ private static var rec:Number = 4;
+
+
+ // The sending local connection object:
+ private static var dlc:LocalConnection;
+ // Determines if a connection is already established:
+ private static var con:Boolean = false;
+ // Filter level. By default filter none (0):
+ private static var fl:Number = 0;
+ // The chunk size used for data splitting (def. 40600, leaves some additional headroom):
+ private static var cs:Number = 40600;
+ // Used internally to mark chunk splitting when using MTASC trace:
+ private static var spp:Boolean = false;
+
+
+ /**
+ * Private constructor
+ */
+ private function Debug()
+ {
+ }
+
+
+ /**
+ * Prepares an object for recursive tracing.
+ * @param <code>obj</code> the traced object.
+ * @return A <code>string</code> that contains the object structure.
+ */
+ private static function traceObj(obj:Object):String
+ {
+ // Set the max. recursive depth:
+ var rcdInit:Number = rec;
+ // If object is a movieclip, get the size of it:
+ var otp:String = typeof(obj);
+ var obt:String = (otp == "movieclip") ? ", " + obj.getBytesTotal().toString() + " bytes" : "";
+ // tmp holds the string with the whole object structure:
+ var tmp:String = "" + arguments.toString() + " (" + otp + obt + "):\n";
+
+ // Nested recursive function:
+ var prObj:Function;
+ prObj = function(o:Object, rcd:Number, idt:Number, br:Boolean):Void
+ {
+ if (br)
+ {
+ br = false;
+ tmp += ">>";
+ }
+ for (var p:String in o)
+ {
+ // Preparing indention:
+ var tb:String = "";
+ for (var i:Number = 0; i < idt; i++) tb += " ";
+ tmp += tb + p + ": " + o[p] + "\n";
+ if (rcd > 0) prObj(o[p], (rcd - 1), (idt + 1), true);
+ }
+ };
+ prObj(obj, rcdInit, 1, true);
+ return tmp;
+ }
+
+
+ /**
+ * Splits data blocks that are larger than 40Kb into 40Kb chunks.
+ * Note that level 6 is used internally to mark the data as
+ * a chunk for the console. User-given levels are ignored when
+ * data is processed by this method.
+ * @param <code>dta</code> a string which is split into chunks.
+ */
+ private static function splitDt(dta:String):Void
+ {
+ var sze:Number = cs;
+ var c:Number = Math.ceil(dta.length / sze);
+ var s:Number = 0;
+ var e:Number = sze;
+
+ for (var i:Number = 0; i < c; i++)
+ {
+ if (i < c)
+ {
+ Debug.trace(dta.slice(s, e), false, 6);
+ //trace("\nChunk Nr: " + i + " / len: " + dta.slice(s, e).length, false, 6);
+ s += sze;
+ e += sze;
+ }
+ }
+ Debug.trace("", false, 1);
+ spp = false;
+ }
+
+
+ /**
+ * The trace method accepts three arguments, the first contains the data which
+ * is going to be traced, the second if of type <code>Boolean</code> is used
+ * to indicate recursive object tracing mode, if of type <code>Number</code>
+ * desribes the filtering level for the output.
+ * @param <code>arg0:Object<code> the object to be traced.
+ * @param <code>arg1:Boolean<code> true if recursive object tracing (optional).
+ * @param <code>arg2:Number <code> filter level (optional).
+ */
+ public static function trace():Void
+ {
+ // Only connect if not already connected:
+ if (!con)
+ {
+ dlc = new LocalConnection();
+ con = true;
+ }
+
+ // Use arguments offset if no mtasc trace facility:
+ var ao:Number = (!spp && mtf) ? 0 : 3;
+
+ // Set vars:
+ var al:Number = arguments.length;
+ var ag:Number = -1;
+ var c:String = "";
+ var o:String = "";
+ var s:String = "";
+ var m:Object = (al > (3 - ao)) ? arguments[0] : undefined;
+ var t:Boolean = false;
+ var l:Number = 1;
+
+ // Get MTASC parameters:
+ if (!spp && mtf)
+ {
+ var cn:String = arguments[al - 3].split("::").join(".");
+ var ca:Array = cn.split(".");
+ cn = ca[ca.length - 2];
+ c = "[" + cn + ", line " + arguments[al - 1] + "] ";
+ }
+
+ // Check if more than one argument was given:
+ if (al > (4 - ao))
+ {
+ if (typeof(arguments[1]) == "boolean") t = arguments[1];
+ else if (typeof(arguments[1]) == "number") l = arguments[1];
+
+ if (al > (5 - ao))
+ {
+ if (typeof(arguments[2]) == "boolean") t = arguments[2];
+ else if (typeof(arguments[2]) == "number") l = arguments[2];
+ }
+ }
+
+ // Extract signal tag if any is given:
+ if (typeof(m) == "string")
+ {
+ if (m.substring(0, 2) == "[%")
+ {
+ if (m.substring(5, 7) == "%]")
+ {
+ s = m.substr(0, 7);
+ m = m.substr(7, m.length);
+ if (m == "") l = 5;
+ }
+ }
+ }
+
+ // Only show messages equal or higher than current filter level:
+ if (l >= fl && l < 7)
+ {
+ // Check if recursive object tracing:
+ if (t) o += traceObj(m);
+ else o += String(m);
+
+ // Check if data stream size is too large for LocalConnection:
+ if (sp && o.length > cs)
+ {
+ spp = true;
+ splitDt(o);
+ }
+ else
+ {
+ // Send output, signal tag, mtasc string and level to Alcon console:
+ var snt:Boolean = dlc.send("_alcon_lc", "onMessage", o, s, c, l);
+
+ // Check if data could be sent, otherwise send error signal:
+ if (!snt) Debug.trace("[%ERR%]");
+
+ // If you want to trace to the Flash IDE as well, uncomment this line.
+ // (Leave commented if using MTASC's trace feature!):
+ // trace(out);
+ }
+ }
+ }
+
+
+ /**
+ * Sends a clear buffer signal to the output console.
+ * Level 5 is used internally for signals, so that in any case
+ * no level keywords are placed before the signal string.
+ */
+ public static function clear():Void
+ {
+ Debug.trace("[%CLR%]", 5);
+ }
+
+
+ /**
+ * Sends a delimiter signal to the output console.
+ */
+ public static function delimiter():Void
+ {
+ Debug.trace("[%DLT%]", 5);
+ }
+
+
+ /**
+ * Sends a pause signal to the output console.
+ */
+ public static function pause():Void
+ {
+ Debug.trace("[%PSE%]", 5);
+ }
+
+
+ /**
+ * Toggles data splitting on/off.
+ * @param <code>_sp</code> A boolean if set to true turns on the option to
+ * split data streams larger than 40Kb into 40Kb chunks, if set to false turns it off.
+ */
+ public static function splitData(_sp:Boolean):Void
+ {
+ sp = _sp;
+ }
+
+
+ /**
+ * Sets the logging filter level.
+ * @param <code>_fl</code> a number for the filter level to be set.
+ */
+ public static function setFilterLevel(_fl:Number):Void
+ {
+ if (_fl != undefined && _fl >= 0 && _fl < 5) fl = _fl;
+ }
+
+
+ /**
+ * Returns the logging filter level.
+ * @return the number of the filter level.
+ */
+ public static function getFilterLevel():Number
+ {
+ return fl;
+ }
+
+
+ /**
+ * Sets the recursion depth for recursive object tracing.
+ * @param <code>_rec</code> A number with the depth for object recursive tracing.
+ */
+ public static function setRecursionDepth(_rec:Number):Void
+ {
+ rec = _rec;
+ }
+}
Property changes on: z3c.reference/branches/flash/flash/src/net/hiddenresource/util/debug/Debug.as
___________________________________________________________________
Name: svn:executable
+ *
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Canvas.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Canvas.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Canvas.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,63 @@
+/*
+ * the visual representation of the paintable area
+ *
+ * @author <gerold.boehler at lovelysystems.com>
+ */
+
+import z3c.reference.imagetool.core.*;
+import z3c.reference.imagetool.baseskin.*;
+
+
+class z3c.reference.imagetool.baseskin.Canvas extends Component
+{
+ private var width:Number = 1;
+ private var height:Number = 1;
+
+ private var border_mc:MovieClip;
+ private var mask_mc:MovieClip;
+
+ function Canvas()
+ {
+ super();
+
+ createEmptyMovieClip("border_mc", getNextHighestDepth());
+ createEmptyMovieClip("mask_mc", getNextHighestDepth());
+
+ var shadow = new flash.filters.DropShadowFilter(3);
+ filters = [shadow];
+ }
+
+ public function onParentResize(w:Number, h:Number)
+ {
+ width = w;
+ height = h;
+
+ border_mc.clear();
+ border_mc.lineStyle(0, 0x000000, 100);
+ border_mc.beginFill(0xffffff, 100);
+ border_mc.moveTo(0, 0);
+ border_mc.lineTo(width, 0);
+ border_mc.lineTo(width, height);
+ border_mc.lineTo(0, height);
+ border_mc.endFill();
+
+ mask_mc.clear();
+ mask_mc.lineStyle(0, 0x000000, 100);
+ mask_mc.beginFill(0x000000, 0);
+ mask_mc.moveTo(1, 1);
+ mask_mc.lineTo(width, 1);
+ mask_mc.lineTo(width, height);
+ mask_mc.lineTo(1, height);
+ mask_mc.endFill();
+ }
+
+ public function getMask()
+ {
+ return mask_mc;
+ }
+
+ // event listeners --------------------------------------------------------------
+
+ // helpers ----------------------------------------------------------------------
+
+}
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Controller.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Controller.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Controller.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,126 @@
+/**
+* Class z3c.reference.imagetool.baseskin.Controller
+* Menu - Class of the Flash ImageCrop Tool
+*
+* @author viktor.sohm at lovelysystems.com
+* @author gerold.boehler at lovelysystems.com
+*/
+
+import z3c.reference.imagetool.core.*;
+
+
+[Event("onZoomInPress")]
+[Event("onZoomInRelease")]
+[Event("onZoomOutPress")]
+[Event("onZoomOutRelease")]
+[Event("onRotateLeftRelease")]
+[Event("onRotateRightRelease")]
+[Event("onAcceptRelease")]
+[Event("onAbortRelease")]
+
+
+class z3c.reference.imagetool.baseskin.Controller extends Component
+{
+ private var PADDING:Number = 20;
+
+ private var menuDrag_mc:MovieClip;
+ private var zoomIn_mc:MovieClip;
+ private var zoomOut_mc:MovieClip;
+ private var rotateLeft_mc:MovieClip;
+ private var rotateRight_mc:MovieClip;
+ private var menuAbort_mc:MovieClip;
+ private var menuAccept_mc:MovieClip;
+ private var cropsize_mc:MovieClip; //movieclip holding the textfields for manual size input
+ private var outputsize_mc:MovieClip;
+
+ private var bg_mc:MovieClip;
+
+ function Controller()
+ {
+ trace("Menu Initialized");
+
+ bg_mc._width=Stage.width;
+ bg_mc._height=50;
+ var shadow = new flash.filters.DropShadowFilter(3);
+ bg_mc.filters = [shadow];
+
+ menuDrag_mc.onPress = function() { _parent.startDrag(false); }
+ menuDrag_mc.onRelease = function() { _parent.stopDrag(); }
+
+ zoomIn_mc.onPress = function() { _parent.broadcastEvent(new EventInfo(_parent, "onZoomInPress")); }
+ zoomIn_mc.onRelease = this.zoomIn_mc.onReleaseOutside = function() { _parent.broadcastEvent(new EventInfo(_parent, "onZoomInRelease")); }
+
+ zoomOut_mc.onPress = function() { _parent.broadcastEvent(new EventInfo(_parent, "onZoomOutPress")); }
+ zoomOut_mc.onRelease = this.zoomOut_mc.onReleaseOutside = function() { _parent.broadcastEvent(new EventInfo(_parent, "onZoomOutRelease")); }
+
+ rotateLeft_mc.onRelease = function() { _parent.broadcastEvent(new EventInfo(_parent, "onRotateLeftRelease")); }
+ rotateRight_mc.onRelease = function() { _parent.broadcastEvent(new EventInfo(_parent, "onRotateRightRelease")); }
+
+ menuAccept_mc.onRelease = function() { _parent.broadcastEvent(new EventInfo(_parent, "onAcceptRelease")); }
+ menuAbort_mc.onRelease = function() { _parent.broadcastEvent(new EventInfo(_parent, "onAbortRelease")); }
+
+ /*
+ this.cropsize_mc.width_txt.ptr=this.pointer;
+ this.cropsize_mc.width_txt.onChanged=function() {
+ //trace("width was changed: " + this.text);
+ this.ptr.onManualCropSizeChange(this.text, this._parent.height_txt.text);
+ }
+ this.cropsize_mc.height_txt.ptr=this.pointer;
+ this.cropsize_mc.height_txt.onChanged=function(){
+ this.ptr.onManualCropSizeChange(this._parent.width_txt.text, this.text);
+ }
+
+ this.outputsize_mc.width_txt.ptr=this.pointer;
+ this.outputsize_mc.width_txt.onChanged=function() {
+ //trace("width was changed: " + this.text);
+ this.ptr.onManualOutputSizeChange(this.text, this._parent.height_txt.text);
+ }
+ this.outputsize_mc.height_txt.ptr=this.pointer;
+ this.outputsize_mc.height_txt.onChanged=function(){
+ this.ptr.onManualOutputSizeChange(this._parent.width_txt.text, this.text);
+ }
+ */
+ }
+
+ function setCropSizeValues(width:Number, height:Number) {
+ this.cropsize_mc.width_txt.text=width;
+ this.cropsize_mc.height_txt.text=height;
+ }
+ function updateOutputSizeValues(width:Number, height:Number) {
+ this.outputsize_mc.width_txt.text=width;
+ this.outputsize_mc.height_txt.text=height;
+ }
+
+ public function onParentResize(w:Number, h:Number)
+ {
+ bg_mc._width = w
+ bg_mc._height = h;
+
+ var nextX = PADDING;
+ var centerY = h / 2;
+
+ rotateLeft_mc._x = nextX;
+ rotateLeft_mc._y = centerY - rotateLeft_mc._height / 2;
+ nextX += rotateLeft_mc._width + PADDING;
+
+ rotateRight_mc._x = nextX;
+ rotateRight_mc._y = centerY - rotateRight_mc._height / 2;
+ nextX += rotateRight_mc._width + PADDING;
+
+ zoomIn_mc._x = nextX;
+ zoomIn_mc._y = centerY - zoomIn_mc._height / 2;
+ nextX += zoomIn_mc._width + PADDING;
+
+ zoomOut_mc._x = nextX;
+ zoomOut_mc._y = centerY - zoomOut_mc._height / 2;
+ nextX += zoomOut_mc._width + PADDING;
+
+ menuAccept_mc._x = nextX;
+ menuAccept_mc._y = centerY - menuAccept_mc._height / 2;
+ nextX += menuAccept_mc._width + PADDING;
+
+ menuAbort_mc._x = nextX;
+ menuAbort_mc._y = centerY - menuAbort_mc._height / 2;
+ nextX += menuAbort_mc._width + PADDING;
+ }
+}
\ No newline at end of file
Property changes on: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Controller.as
___________________________________________________________________
Name: svn:executable
+ *
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,451 @@
+/**
+* z3c.reference.imagetool.baseskin.EditableImage
+* represents a image with a view that can be cropped
+*
+* @author <gerold.boehler at lovelysystems.com>
+*/
+
+import z3c.reference.imagetool.core.*;
+import z3c.reference.imagetool.baseskin.*;
+
+[Event("onImageLoaded")]
+[Event("onImagePress")]
+[Event("onImageRelease")]
+
+
+class z3c.reference.imagetool.baseskin.EditableImage extends Component
+{
+ private var MIN_VIEWPORT_SIZE:Number = 20;
+
+ private var image_mc:MovieClip;
+ private var fader_mc:MovieClip;
+ private var viewport_mc:MovieClip;
+
+ private var isDragging:Boolean = false;
+ private var isLineDragging:Boolean = false;
+ private var isCornerDragging:Boolean = false;
+ private var currentDragElement:String = "";
+ private var dragElementOffsetX:Number = 0;
+ private var dragElementOffsetY:Number = 0;
+ private var dragStartPoint:flash.geom.Point;
+ private var viewportStartWidth:Number = 1;
+ private var viewportStartHeight:Number = 1;
+ private var viewportFixedRatio:Number = 1;
+ private var viewportStartPoint:flash.geom.Point;
+
+ private var mcLoader:MovieClipLoader;
+
+ function EditableImage()
+ {
+ super();
+
+ createEmptyMovieClip("image_mc", getNextHighestDepth());
+ createEmptyMovieClip("fader_mc", getNextHighestDepth());
+
+ attachMovie("viewport_mc", "viewport_mc", getNextHighestDepth());
+ viewport_mc.addListener(this);
+
+ mcLoader = new MovieClipLoader();
+ mcLoader.addListener(this);
+
+ Key.addListener(this);
+ }
+
+ public function loadImage(url:String)
+ {
+ mcLoader.loadClip(url, image_mc);
+ }
+
+ public function getCropPosition():flash.geom.Point
+ {
+ return new flash.geom.Point(viewport_mc._x, viewport_mc._y);
+ }
+
+ public function getCropDimension():flash.geom.Point
+ {
+ return new flash.geom.Point(viewport_mc._width, viewport_mc._height);
+ }
+
+ function onEnterFrame()
+ {
+ if (FlashvarManager.get("keepAspectRatio") || Key.isDown(Key.SHIFT))
+ {
+ if (isCornerDragging)
+ scaleViewportByRatio();
+ }
+ else
+ {
+ if (isLineDragging)
+ scaleViewportByLine(_xmouse, _ymouse);
+
+ if (isCornerDragging)
+ scaleViewportByCorner(_xmouse, _ymouse);
+ }
+
+ if (isDragging || isCornerDragging || isLineDragging)
+ updateFader();
+ }
+
+ private function scaleViewportByLine(cursorX:Number, cursorY:Number)
+ {
+ switch(currentDragElement)
+ {
+ case "L":
+ var dx = -(cursorX - dragStartPoint.x);
+
+ if (viewportStartPoint.x - dx >= 0)
+ {
+ viewport_mc._x = viewportStartPoint.x - dx;
+ }
+ else
+ {
+ viewport_mc._x = 0;
+ viewport_mc._width = viewportStartPoint.x + viewportStartWidth;
+ return;
+ }
+
+ if (viewportStartWidth + dx >= MIN_VIEWPORT_SIZE)
+ {
+ viewport_mc._width = viewportStartWidth + dx;
+ }
+ else
+ {
+ viewport_mc._width = MIN_VIEWPORT_SIZE;
+ viewport_mc._x = viewportStartPoint.x + viewportStartWidth - MIN_VIEWPORT_SIZE;
+ return;
+ }
+
+ break;
+
+ case "T":
+ var dy = -(cursorY - dragStartPoint.y);
+
+ if (viewportStartPoint.y - dy >= 0)
+ {
+ viewport_mc._y = viewportStartPoint.y - dy;
+ }
+ else
+ {
+ viewport_mc._y = 0;
+ viewport_mc._height = viewportStartPoint.y + viewportStartHeight;
+ return;
+ }
+
+ if (viewportStartHeight + dy >= MIN_VIEWPORT_SIZE)
+ {
+ viewport_mc._height = viewportStartHeight + dy;
+ }
+ else
+ {
+ viewport_mc._height = MIN_VIEWPORT_SIZE;
+ viewport_mc._y = viewportStartPoint.y + viewportStartHeight - MIN_VIEWPORT_SIZE;
+ return;
+ }
+ break;
+
+
+ case "R":
+ var dx = cursorX - dragStartPoint.x;
+
+ if (viewportStartPoint.x + viewportStartWidth + dx >= image_mc._width)
+ {
+ viewport_mc._width = image_mc._width - viewportStartPoint.x;
+ return;
+ }
+
+ if (viewportStartWidth + dx >= MIN_VIEWPORT_SIZE)
+ {
+ viewport_mc._width = viewportStartWidth + dx;
+ }
+ else
+ {
+ viewport_mc._width = MIN_VIEWPORT_SIZE;
+ }
+ break;
+
+ case "B":
+ var dy = cursorY - dragStartPoint.y;
+
+ if (viewportStartPoint.y + viewportStartHeight + dy >= image_mc._height)
+ {
+ viewport_mc._height = image_mc._height - viewportStartPoint.y;
+ return;
+ }
+
+ if (viewportStartHeight + dy >= MIN_VIEWPORT_SIZE)
+ {
+ viewport_mc._height = viewportStartHeight + dy;
+ }
+ else
+ {
+ viewport_mc._height = MIN_VIEWPORT_SIZE;
+ }
+ break;
+ }
+
+ viewport_mc.updateSensitiveAreas();
+ }
+
+ private function scaleViewportByCorner(cursorX:Number, cursorY:Number)
+ {
+ var lines = currentDragElement.split("");
+ for (var i = 0; i < lines.length; i++)
+ {
+ currentDragElement = lines[i];
+ scaleViewportByLine(cursorX, cursorY);
+ }
+ currentDragElement = lines.join("");
+ }
+
+ private function scaleViewportByRatio()
+ {
+ switch(currentDragElement)
+ {
+ case "LT":
+ var offsetX = _xmouse - viewportStartPoint.x;
+ var offsetY = _ymouse - viewportStartPoint.y;
+ var offset = (offsetX < offsetY) ? (offsetX) : (offsetY);
+ var cursorX = viewportStartPoint.x + (offset + dragElementOffsetX);
+ var cursorY = viewportStartPoint.y + (offset + dragElementOffsetY) / viewportFixedRatio;
+ scaleViewportByCorner(cursorX, cursorY);
+ break;
+
+ case "RT":
+ var offsetX = viewportStartPoint.x + viewportStartWidth - _xmouse;
+ var offsetY = _ymouse - viewportStartPoint.y;
+ var offset = (offsetX < offsetY) ? offsetX : offsetY;
+ var cursorX = viewportStartPoint.x + viewportStartWidth - (offset - dragElementOffsetX) / viewportFixedRatio;
+ var cursorY = viewportStartPoint.y + (offset + dragElementOffsetY);
+ scaleViewportByCorner(cursorX, cursorY);
+ break;
+
+ case "LB":
+ var offsetX = _xmouse - viewportStartPoint.x;
+ var offsetY = viewportStartPoint.y + viewportStartHeight - _ymouse;
+ var offset = (offsetX < offsetY) ? offsetX : offsetY;
+ var cursorX = viewportStartPoint.x + (offset + dragElementOffsetX);
+ var cursorY = viewportStartPoint.y + viewportStartHeight - (offset - dragElementOffsetY) / viewportFixedRatio;
+ scaleViewportByCorner(cursorX, cursorY);
+ break;
+
+ case "RB":
+ var offsetX = _xmouse - viewportStartPoint.x;
+ var offsetY = _ymouse - viewportStartPoint.y;
+ var offset = (offsetX > offsetY) ? (offsetX) : (offsetY);
+ var cursorX = viewportStartPoint.x + (offset + dragElementOffsetX);
+ var cursorY = viewportStartPoint.y + (offset + dragElementOffsetY) / viewportFixedRatio;
+ scaleViewportByCorner(cursorX, cursorY);
+ break;
+ }
+ }
+
+ private function moveViewportBy(x:Number, y:Number)
+ {
+ if (viewport_mc._x + x < 0)
+ viewport_mc._x = 0;
+ else if (viewport_mc._x + x > image_mc._width - viewport_mc._width)
+ viewport_mc._x = image_mc._width - viewport_mc._width;
+ else
+ viewport_mc._x += x;
+
+ if (viewport_mc._y + y < 0)
+ viewport_mc._y = 0;
+ else if (viewport_mc._y + y > image_mc._height - viewport_mc._height)
+ viewport_mc._y = image_mc._height - viewport_mc._height;
+ else
+ viewport_mc._y += y;
+
+ }
+
+ // event listeners --------------------------------------------------------------
+
+ function onLoadInit(mc:MovieClip)
+ {
+ viewport_mc.init();
+ viewportFixedRatio = FlashvarManager.get("keepAspectRatio") ? (viewport_mc._width / viewport_mc._height) : 1;
+ viewport_mc._x = FlashvarManager.get("crop_x");
+ viewport_mc._y = FlashvarManager.get("crop_x");
+ updateFader();
+
+ var ei:EventInfo = new EventInfo(this, "onImageLoaded");
+ broadcastEvent(ei);
+ }
+
+ function onKeyDown()
+ {
+ var offset = Key.isDown(Key.SHIFT) ? 5 : 1;
+
+ switch(Key.getCode())
+ {
+ case Key.UP:
+ moveViewportBy(0, -offset);
+ break;
+
+ case Key.DOWN:
+ moveViewportBy(0, offset);
+ break;
+
+ case Key.LEFT:
+ moveViewportBy(-offset, 0);
+ break;
+
+ case Key.RIGHT:
+ moveViewportBy(offset, 0);
+ break;
+
+ case Key.SHIFT:
+ if (FlashvarManager.get("keepAspectRatio"))
+ {
+
+ }
+ else
+ {
+ //viewport_mc._x = Math.floor(viewport_mc._x);
+ //viewport_mc._y = Math.floor(viewport_mc._y);
+ //viewport_mc._width = Math.floor(viewport_mc._width);
+ //viewport_mc._height = Math.floor(viewport_mc._height);
+ }
+ break;
+ }
+ }
+
+ function onMouseDown()
+ {
+ // first check if the mouse is over the image at all
+ if (_xmouse < 0 || _xmouse > _width || _ymouse < 0 || _ymouse > _height)
+ return;
+
+ // now check if the hit the image
+ if (_xmouse >= viewport_mc._x && _xmouse <= viewport_mc._x + viewport_mc._width &&
+ _ymouse >= viewport_mc._y && _ymouse <= viewport_mc._y + viewport_mc._height)
+ return;
+
+ var ei:EventInfo = new EventInfo(this, "onImagePress");
+ broadcastEvent(ei);
+ }
+
+ function onMouseUp()
+ {
+ //if (_xmouse >= viewport_mc._x && _xmouse <= viewport_mc._x + viewport_mc._width &&
+ // _ymouse >= viewport_mc._y && _ymouse <= viewport_mc._y + viewport_mc._height)
+ // return;
+
+ var ei:EventInfo = new EventInfo(this, "onImageRelease");
+ broadcastEvent(ei);
+ }
+
+ function onViewportPress(ei:EventInfo)
+ {
+ viewport_mc.startDrag(false, 0, 0, image_mc._width - viewport_mc._width, image_mc._height - viewport_mc._height);
+ isDragging = true;
+ }
+
+ function onViewportRelease(ei:EventInfo)
+ {
+ viewport_mc.stopDrag();
+ viewport_mc._x = Math.floor(viewport_mc._x);
+ viewport_mc._y = Math.floor(viewport_mc._y);
+ updateFader();
+ isDragging = false;
+ }
+
+ function onLinePress(ei:EventInfo)
+ {
+ currentDragElement = ei.getInfo("line");
+ viewportStartPoint = new flash.geom.Point(viewport_mc._x, viewport_mc._y);
+ dragStartPoint = new flash.geom.Point(Math.floor(_xmouse), Math.floor(_ymouse));
+ viewportStartWidth = viewport_mc._width;
+ viewportStartHeight = viewport_mc._height;
+ isLineDragging = true;
+ }
+
+ function onLineRelease(ei:EventInfo)
+ {
+ isLineDragging = false;
+ }
+
+ function onCornerPress(ei:EventInfo)
+ {
+ currentDragElement = ei.getInfo("corner");
+ dragElementOffsetX = ei.getInfo("offsetX");
+ dragElementOffsetY = ei.getInfo("offsetY");
+ viewportStartPoint = new flash.geom.Point(viewport_mc._x, viewport_mc._y);
+ dragStartPoint = new flash.geom.Point(Math.floor(_xmouse), Math.floor(_ymouse));
+ viewportStartWidth = viewport_mc._width;
+ viewportStartHeight = viewport_mc._height;
+ isCornerDragging = true;
+ }
+
+ function onCornerRelease(ei:EventInfo)
+ {
+ isCornerDragging = false;
+ }
+
+ public function onParentResize(w:Number, h:Number)
+ {
+
+ }
+
+ // helpers ----------------------------------------------------------------------------
+
+ private function updateFader()
+ {
+ fader_mc.clear();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(0, 0);
+ fader_mc.lineTo(viewport_mc._x, 0);
+ fader_mc.lineTo(viewport_mc._x, viewport_mc._y);
+ fader_mc.lineTo(0, viewport_mc._y)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(viewport_mc._x, 0);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, 0);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, viewport_mc._y);
+ fader_mc.lineTo(viewport_mc._x, viewport_mc._y)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(viewport_mc._x + viewport_mc._width, 0);
+ fader_mc.lineTo(image_mc._width, 0);
+ fader_mc.lineTo(image_mc._width, viewport_mc._y);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, viewport_mc._y)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(0, viewport_mc._y);
+ fader_mc.lineTo(viewport_mc._x, viewport_mc._y);
+ fader_mc.lineTo(viewport_mc._x, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(0, viewport_mc._y + viewport_mc._height)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(viewport_mc._x + viewport_mc._width, viewport_mc._y);
+ fader_mc.lineTo(image_mc._width, viewport_mc._y);
+ fader_mc.lineTo(image_mc._width, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, viewport_mc._y + viewport_mc._height)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(0, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(viewport_mc._x, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(viewport_mc._x, image_mc._height);
+ fader_mc.lineTo(0, image_mc._height)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(viewport_mc._x, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, image_mc._height);
+ fader_mc.lineTo(viewport_mc._x, image_mc._height)
+ fader_mc.endFill();
+
+ fader_mc.beginFill(0x000000, 50);
+ fader_mc.moveTo(viewport_mc._x + viewport_mc._width, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(image_mc._width, viewport_mc._y + viewport_mc._height);
+ fader_mc.lineTo(image_mc._width, image_mc._height);
+ fader_mc.lineTo(viewport_mc._x + viewport_mc._width, image_mc._height)
+ fader_mc.endFill();
+ }
+}
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,484 @@
+/**
+* z3c.reference.imagetool.baseskin.ImageTool
+* is a tool for cropping images TTW
+*
+* @author <viktor.sohm at lovelysystems.com>
+* @author <manfred.schwendinger at lovelysystems.com>
+* @author <armin.wolf at lovelysystems.com>
+* @author <gerold.boehler at lovelysystems.com>
+*/
+
+import z3c.reference.imagetool.core.*;
+import z3c.reference.imagetool.baseskin.*;
+
+
+class z3c.reference.imagetool.baseskin.ImageTool extends Component
+{
+ private var PADDING:Number = 10;
+
+ private var canvas_mc:MovieClip;
+ private var editable_image_mc:MovieClip;
+ private var mousepointer_mc:MovieClip;
+ private var controller_mc:MovieClip;
+
+ private var imageScale:Number = 100;
+ private var imageRatio:Number = 1;
+ private var maxImageWidth:Number = 0;
+ private var maxImageHeight:Number = 0;
+
+ private var editableImageStartX:Number = 0;
+ private var editableImageStartY:Number = 0;
+ private var editableImageStartWidth:Number = 1;
+ private var editableImageStartHeight:Number = 1;
+ private var zoomLevel:Number = 0;
+ private var nextDegree:Number = 0;
+
+ private var dragCursorStartX:Number = 0;
+ private var dragCursorStartY:Number = 0;
+ private var dragImageStartX:Number = 0;
+ private var dragImageStartY:Number = 0;
+
+ private var isDraggingImage:Boolean = false;
+
+ function ImageTool()
+ {
+ super();
+
+ attachMovie("canvas_mc", "canvas_mc", getNextHighestDepth());
+
+ attachMovie("editable_image_mc", "editable_image_mc", getNextHighestDepth());
+ editable_image_mc.addListener(this);
+ editable_image_mc.setMask(canvas_mc.getMask());
+
+ createEmptyMovieClip("mousepointer_mc", getNextHighestDepth());
+ mousepointer_mc.attachMovie("pointer_drag_mc", "pointer_drag_mc", mousepointer_mc.getNextHighestDepth(), {_visible: false});
+ mousepointer_mc.attachMovie("pointer_line_mc", "pointer_line_mc", mousepointer_mc.getNextHighestDepth(), {_visible: false});
+ mousepointer_mc.attachMovie("pointer_corner_mc", "pointer_corner_mc", mousepointer_mc.getNextHighestDepth(), {_visible: false});
+
+ attachMovie("controller_mc", "controller_mc", getNextHighestDepth());
+ controller_mc.addListener(this);
+
+ _visible = false;
+ onEnterFrame = initAfterFirstFrame;
+ Stage.addListener(this);
+ }
+
+ var tmp = 0;
+ function initAfterFirstFrame()
+ {
+ editable_image_mc.loadImage(FlashvarManager.get("url"));
+ onEnterFrame = null;//function() { rotateImage(tmp); tmp += 0.01;};
+ }
+
+ function saveChanges()
+ {
+ trace("\n\nsaveChanges");
+
+ var url_str:String="";
+
+ url_str+="JavaScript:cropImage(";
+
+ //crop_x = Math.round(bounding_mc.left-image_mc.left)//Math.round((bounding_mc.left-image_mc.left) / image_mc.getZoomFactor());
+ //crop_y = Math.round(bounding_mc.top-image_mc.top)//Math.round((bounding_mc.top-image_mc.top) / image_mc.getZoomFactor());
+
+
+ //var rotation:Number = (Math.round(image_mc.getRotation()) % 360)*-1; //seems like pil accepts rotation in the other direction
+ //rotation = rotation > 0 ? rotation : rotation + 360;
+
+ //url_str += crop_x + ", ";
+ //url_str += crop_y + ", ";
+
+ //url_str += output_w + ", ";
+ //url_str += output_h + ", ";
+ /*
+ if (rotation==90 || rotation==270)
+ {
+ url_str += Math.round(original_h * image_mc.getZoomFactor()) + ", ";
+ url_str += Math.round(original_w * image_mc.getZoomFactor()) + ", " ;
+ }
+ else
+ {
+ url_str += Math.round(original_w * image_mc.getZoomFactor()) + ", " ;
+ url_str += Math.round(original_h * image_mc.getZoomFactor()) + ", ";
+ }
+ */
+
+ //url_str += rotation.toString() + ", ";
+ //url_str += image_mc.getZoomFactor()+"";
+
+ var globalTL = new flash.geom.Point();
+ var cropPos = new Object();
+ var cropDim = new Object();
+ var imageDim = new Object();
+
+ switch(nextDegree)
+ {
+ case 0:
+ imageDim.x = editable_image_mc._width;
+ imageDim.y = editable_image_mc._height;
+ globalTL.x = canvas_mc._x + (canvas_mc._width - editable_image_mc._width) / 2;
+ globalTL.y = canvas_mc._y + (canvas_mc._height - editable_image_mc._height) / 2;
+
+ var scaleFactor = editable_image_mc._width / maxImageWidth;
+ cropDim.x = editable_image_mc.getCropDimension().x;
+ cropDim.y = editable_image_mc.getCropDimension().y;
+ cropDim.x *= scaleFactor;
+ cropDim.y *= scaleFactor;
+
+ cropPos.x = editable_image_mc.getCropPosition().x;
+ cropPos.y = editable_image_mc.getCropPosition().y;
+ editable_image_mc.localToGlobal(cropPos);
+ cropPos.x -= globalTL.x;
+ cropPos.y -= globalTL.y;
+
+ break;
+
+ case 180:
+ imageDim.x = editable_image_mc._width;
+ imageDim.y = editable_image_mc._height;
+
+ globalTL.x = canvas_mc._x + (canvas_mc._width - editable_image_mc._width) / 2;
+ globalTL.y = canvas_mc._y + (canvas_mc._height - editable_image_mc._height) / 2;
+
+ var scaleFactor = editable_image_mc._width / maxImageWidth;
+ cropDim.x = editable_image_mc.getCropDimension().x;
+ cropDim.y = editable_image_mc.getCropDimension().y;
+ cropDim.x *= scaleFactor;
+ cropDim.y *= scaleFactor;
+
+ cropPos.x = editable_image_mc.getCropPosition().x + editable_image_mc.getCropDimension().x;
+ cropPos.y = editable_image_mc.getCropPosition().y + editable_image_mc.getCropDimension().y;
+ editable_image_mc.localToGlobal(cropPos);
+ cropPos.x -= globalTL.x;
+ cropPos.y -= globalTL.y;
+
+ break;
+
+ case 90:
+ editable_image_mc._rotation = 0;
+
+ imageDim.x = editable_image_mc._height;
+ imageDim.y = editable_image_mc._width;
+
+ globalTL.x = canvas_mc._y + (canvas_mc._width - editable_image_mc._height) / 2;
+ globalTL.y = canvas_mc._x + (canvas_mc._height - editable_image_mc._width) / 2;
+
+ var scaleFactor = editable_image_mc._height / maxImageHeight;
+ cropDim.x = editable_image_mc.getCropDimension().y;
+ cropDim.y = editable_image_mc.getCropDimension().x;
+ cropDim.x *= scaleFactor;
+ cropDim.y *= scaleFactor;
+
+ cropPos.x = editable_image_mc.getCropPosition().y;
+ cropPos.y = editable_image_mc.getCropPosition().x;
+ editable_image_mc.localToGlobal(cropPos);
+ cropPos.x = 2*editable_image_mc._height - cropPos.x + globalTL.x - cropDim.y;
+ cropPos.y = cropPos.y - globalTL.y;
+
+ editable_image_mc._rotation = nextDegree;
+
+ break;
+
+ case 270:
+ editable_image_mc._rotation = 0;
+
+ imageDim.x = editable_image_mc._height;
+ imageDim.y = editable_image_mc._width;
+
+ globalTL.x = canvas_mc._y + (canvas_mc._width - editable_image_mc._height) / 2;
+ globalTL.y = canvas_mc._x + (canvas_mc._height - editable_image_mc._width) / 2;
+
+ var scaleFactor = editable_image_mc._height / maxImageHeight;
+ cropDim.x = editable_image_mc.getCropDimension().y;
+ cropDim.y = editable_image_mc.getCropDimension().x;
+ cropDim.x *= scaleFactor;
+ cropDim.y *= scaleFactor;
+
+ cropPos.x = editable_image_mc.getCropPosition().y;
+ cropPos.y = editable_image_mc.getCropPosition().x;
+ editable_image_mc.localToGlobal(cropPos);
+ cropPos.x = cropPos.x - globalTL.x;
+ cropPos.y = 2*editable_image_mc._width - cropPos.y + globalTL.y - cropDim.x;
+
+ editable_image_mc._rotation = nextDegree;
+
+ break;
+ }
+
+ var rotation = ((360 - nextDegree) % 360);
+
+ url_str += [Math.round(cropPos.x), Math.round(cropPos.y), Math.round(cropDim.x), Math.round(cropDim.y), Math.round(imageDim.x), Math.round(imageDim.y), rotation].toString();
+ url_str+=");";
+ trace("url_str: "+url_str);
+
+ // we are inside debug mode, so do not use getURL
+ if (System.capabilities.playerType == "External")
+ return;
+
+ getURL(url_str);
+ }
+
+ function onMouseMove()
+ {
+ //trace(_level0._xmouse + " " + _level0._ymouse)
+ }
+
+ private function zoomImage(dir:Number)
+ {
+ if (zoomLevel + dir < 0 || zoomLevel + dir > 100)
+ return;
+
+ zoomLevel += dir;
+
+ var newImageWidth = editableImageStartWidth * (1 + zoomLevel / 100.0);
+ var newImageHeight = editableImageStartHeight * (1 + zoomLevel / 100.0);
+ var dx = editableImageStartWidth - newImageWidth;
+ var dy = editableImageStartHeight - newImageHeight;
+ trace(nextDegree)
+ switch(nextDegree)
+ {
+ case 0:
+ editable_image_mc._width = editableImageStartWidth * (1 + zoomLevel / 100.0);
+ editable_image_mc._height = editableImageStartHeight * (1 + zoomLevel / 100.0);
+ editable_image_mc._x = editableImageStartX + dx/2;
+ editable_image_mc._y = editableImageStartY + dy/2;
+ break;
+
+ case 90:
+ editable_image_mc._rotation = 0;
+ editable_image_mc._width = editableImageStartWidth * (1 + zoomLevel / 100.0);
+ editable_image_mc._height = editableImageStartHeight * (1 + zoomLevel / 100.0);
+ editable_image_mc._rotation = nextDegree;
+ editable_image_mc._x = editableImageStartX - dx/2;
+ editable_image_mc._y = editableImageStartY + dy/2;
+ break;
+
+ case 180:
+ editable_image_mc._width = editableImageStartWidth * (1 + zoomLevel / 100.0);
+ editable_image_mc._height = editableImageStartHeight * (1 + zoomLevel / 100.0);
+ editable_image_mc._x = editableImageStartX - dx/2;
+ editable_image_mc._y = editableImageStartY - dy/2;
+ break;
+
+ case 270:
+ editable_image_mc._rotation = 0;
+ editable_image_mc._width = editableImageStartWidth * (1 + zoomLevel / 100.0);
+ editable_image_mc._height = editableImageStartHeight * (1 + zoomLevel / 100.0);
+ editable_image_mc._rotation = nextDegree;
+ editable_image_mc._x = editableImageStartX + dx/2;
+ editable_image_mc._y = editableImageStartY - dy/2;
+ break;
+ }
+ }
+
+ // event listeners --------------------------------------------------------------
+
+ function onImageLoaded(ei:EventInfo)
+ {
+ // save the original image dimensions
+ maxImageWidth = editable_image_mc._width;
+ maxImageHeight = editable_image_mc._height;
+ imageRatio = maxImageWidth / maxImageHeight;
+
+ // call resize once to setup everything up properly
+ onResize();
+
+ // save the initial position and dimension of the image
+ editableImageStartX = editable_image_mc._x;
+ editableImageStartY = editable_image_mc._y;
+ editableImageStartWidth = editable_image_mc._width;
+ editableImageStartHeight = editable_image_mc._height;
+
+ _visible = true;
+ }
+
+ function onImagePress(ei:EventInfo)
+ {
+ if (zoomLevel == 0)
+ return;
+
+ if (_xmouse < canvas_mc._x || _xmouse > canvas_mc._x + canvas_mc._width ||
+ _ymouse < canvas_mc._y || _ymouse > canvas_mc._y + canvas_mc._height)
+ return;
+
+ dragCursorStartX = _level0._xmouse;
+ dragCursorStartY = _level0._ymouse;
+ dragImageStartX = editable_image_mc._x;
+ dragImageStartY = editable_image_mc._y;
+
+ onEnterFrame = dragImage;
+ Mouse.hide();
+ _level0.imagetool_mc.mousepointer_mc.pointer_drag_mc._visible = true;
+ }
+
+ function onImageRelease(ei:EventInfo)
+ {
+ if (zoomLevel == 0)
+ return;
+
+ onEnterFrame = null;
+ Mouse.show();
+ _level0.imagetool_mc.mousepointer_mc.pointer_drag_mc._visible = false;
+ }
+
+ // controller event listeners --------------------------------------------------------------
+
+ // menu event listeners --------------------------------------------------------------
+
+ function onRotateLeftRelease(ei:EventInfo)
+ {
+ nextDegree = (editable_image_mc._rotation - 90) % 360;
+ nextDegree = (nextDegree < 0) ? ( nextDegree + 360) : nextDegree;
+ centerImage();
+ editable_image_mc._rotation = nextDegree;
+ }
+
+ function onRotateRightRelease(ei:EventInfo)
+ {
+ nextDegree = (editable_image_mc._rotation + 90) % 360;
+ centerImage();
+ editable_image_mc._rotation = nextDegree;
+ }
+
+ function onZoomInPress(ei:EventInfo)
+ {
+ onEnterFrame = function() { zoomImage(1, 2); }
+ }
+
+ function onZoomInRelease(ei:EventInfo)
+ {
+ onEnterFrame = null;
+ }
+
+ function onZoomOutPress(ei:EventInfo)
+ {
+ onEnterFrame = function() { zoomImage(-1, 2); }
+ }
+
+ function onZoomOutRelease(ei:EventInfo)
+ {
+ onEnterFrame = null;
+ }
+
+ function onAbortRelease(ei:EventInfo)
+ {
+
+ }
+
+ function onAcceptRelease(ei:EventInfo)
+ {
+ saveChanges();
+ }
+
+ public function onResize()
+ {
+ var w = Stage.width - 2 * PADDING;
+ var h = Stage.height - 2 * PADDING;
+
+ var controllerHeight = 45;
+ controller_mc.onParentResize(w, controllerHeight);
+ controller_mc._x = PADDING;
+ controller_mc._y = Stage.height - PADDING - controller_mc._height;
+
+ var canvasHeight = controller_mc._y - PADDING - PADDING;
+ canvas_mc.onParentResize(w, canvasHeight);
+ canvas_mc._x = PADDING;
+ canvas_mc._y = PADDING;
+
+ centerImage();
+ }
+
+ // helpers ----------------------------------------------------------------------------
+
+ function dragImage()
+ {
+ _level0.imagetool_mc.mousepointer_mc.pointer_drag_mc._x = _level0._xmouse;
+ _level0.imagetool_mc.mousepointer_mc.pointer_drag_mc._y = _level0._ymouse;
+
+ var nextX = dragImageStartX + _xmouse - dragCursorStartX;
+ var nextY = dragImageStartY + _ymouse - dragCursorStartY;
+ if (nextX <= canvas_mc._x && nextX + editable_image_mc._width >= canvas_mc._x + canvas_mc._width)
+ editable_image_mc._x = nextX;
+
+ if (nextY <= canvas_mc._y && nextY + editable_image_mc._height >= canvas_mc._y + canvas_mc._height)
+ editable_image_mc._y = nextY;
+ }
+
+ private function centerImage()
+ {
+ fitImage();
+
+ var dx = canvas_mc._width - editable_image_mc._width;
+ var dy = canvas_mc._height - editable_image_mc._height;
+
+ switch(nextDegree)
+ {
+ case 0:
+ editable_image_mc._x = canvas_mc._x + dx/2;
+ editable_image_mc._y = canvas_mc._y + dy/2;
+ break;
+
+ case 90:
+ editable_image_mc._x = canvas_mc._x + editable_image_mc._width + dx/2;
+ editable_image_mc._y = canvas_mc._y + dy/2;
+ break;
+
+ case 180:
+ editable_image_mc._x = canvas_mc._x + editable_image_mc._width + dx/2;
+ editable_image_mc._y = canvas_mc._y + editable_image_mc._height + dy/2;
+ break;
+
+ case 270:
+ editable_image_mc._x = canvas_mc._x + dx/2;
+ editable_image_mc._y = canvas_mc._y + editable_image_mc._height + dy/2;
+ break;
+ }
+
+ editableImageStartX = editable_image_mc._x;
+ editableImageStartY = editable_image_mc._y;
+ }
+
+ private function fitImage()
+ {
+ editable_image_mc._rotation = 0;
+
+ var dW = editable_image_mc._width - canvas_mc._width;
+ var dH = editable_image_mc._height - canvas_mc._height;
+
+ switch(nextDegree)
+ {
+ case 0:
+ case 180:
+ if (dW < dH)
+ {
+ editable_image_mc._width = canvas_mc._height * imageRatio;
+ editable_image_mc._height = canvas_mc._height;
+ }
+ else
+ {
+ editable_image_mc._width = canvas_mc._width;
+ editable_image_mc._height = canvas_mc._width / imageRatio;
+ }
+ break;
+
+ case 90:
+ case 270:
+ if (dW < dH)
+ {
+ editable_image_mc._width = canvas_mc._height;
+ editable_image_mc._height = canvas_mc._height / imageRatio;
+ }
+ else
+ {
+ editable_image_mc._width = canvas_mc._width * imageRatio;
+ editable_image_mc._height = canvas_mc._width;
+ }
+ break;
+ }
+
+ editableImageStartWidth = editable_image_mc._width;
+ editableImageStartHeight = editable_image_mc._height;
+ editable_image_mc._rotation = nextDegree;
+ zoomLevel = 0;
+ }
+}
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Viewport.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Viewport.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/baseskin/Viewport.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,370 @@
+/**
+* z3c.reference.imagetool.baseskin.Viewport
+* represents cropped area
+*
+* @author <gerold.boehler at lovelysystems.com>
+*/
+
+import z3c.reference.imagetool.core.*;
+import z3c.reference.imagetool.baseskin.*;
+
+
+class z3c.reference.imagetool.baseskin.Viewport extends Component
+{
+ private var SENSITIVE_AREA:Number = 5;
+
+ private var drag_area_mc:MovieClip;
+
+ private var line_left_mc:MovieClip;
+ private var line_right_mc:MovieClip;
+ private var line_top_mc:MovieClip;
+ private var line_bottom_mc:MovieClip;
+
+ private var corner_LT:MovieClip;
+ private var corner_RT:MovieClip;
+ private var corner_LB:MovieClip;
+ private var corner_RB:MovieClip;
+
+ private var linePointerDegrees:Object;
+ private var cornerPointerDegrees:Object;
+
+ private var current_pointer_mc:MovieClip;
+
+ function Viewport()
+ {
+ super();
+
+ createEmptyMovieClip("drag_area_mc", getNextHighestDepth());
+ initDragArea(drag_area_mc);
+
+ if (!FlashvarManager.get("keepAspectRatio"))
+ {
+ createEmptyMovieClip("line_left_mc", getNextHighestDepth());
+ initLine(line_left_mc, "L");
+
+ createEmptyMovieClip("line_right_mc", getNextHighestDepth());
+ initLine(line_right_mc, "R");
+
+ createEmptyMovieClip("line_top_mc", getNextHighestDepth());
+ initLine(line_top_mc, "T");
+
+ createEmptyMovieClip("line_bottom_mc", getNextHighestDepth());
+ initLine(line_bottom_mc, "B");
+ }
+
+ createEmptyMovieClip("corner_LT", getNextHighestDepth());
+ initCorner(corner_LT, "LT");
+
+ createEmptyMovieClip("corner_RT", getNextHighestDepth());
+ initCorner(corner_RT, "RT");
+
+ createEmptyMovieClip("corner_LB", getNextHighestDepth());
+ initCorner(corner_LB, "LB");
+
+ createEmptyMovieClip("corner_RB", getNextHighestDepth());
+ initCorner(corner_RB, "RB");
+
+ linePointerDegrees = new Object();
+ linePointerDegrees.L = 90;
+ linePointerDegrees.R = 270;
+ linePointerDegrees.T = 180;
+ linePointerDegrees.B = 0;
+
+ cornerPointerDegrees = new Object();
+ cornerPointerDegrees.LT = 135;
+ cornerPointerDegrees.RT = 225;
+ cornerPointerDegrees.LB = 45;
+ cornerPointerDegrees.RB = 315;
+ }
+
+ public function init()
+ {
+ var w = FlashvarManager.get("crop_w");
+ var h = FlashvarManager.get("crop_h");
+
+ drag_area_mc.clear();
+ drag_area_mc.lineStyle(0, 0xc0c0c0, 100);
+ drag_area_mc.beginFill(0xff0000, 0);
+ drag_area_mc.moveTo(0, 0);
+ drag_area_mc.lineTo(w, 0);
+ drag_area_mc.lineTo(w, h);
+ drag_area_mc.lineTo(0, h);
+ drag_area_mc.endFill();
+
+ redrawSensitiveAreas(w, h, SENSITIVE_AREA);
+ repositionSensitiveAreas(w, h);
+ }
+
+ public function updateSensitiveAreas(maxW:Number, maxH:Number)
+ {
+ /*
+ var dx = _width - FlashvarManager.get("crop_w");
+ var dy = _height - FlashvarManager.get("crop_h");
+ var dxMax = maxW - FlashvarManager.get("crop_w");
+ var dyMax = maxH - FlashvarManager.get("crop_h");
+ var scaleX = 1 - dx / dxMax;
+ var scaleY = 1 - dy / dxMax;
+ */
+ //redrawSensitiveAreas(maxW, maxH, SENSITIVE_AREA);
+ //redrawSensitiveAreas(_width, _height, SENSITIVE_AREA);
+ //repositionSensitiveAreas(_width, _height);
+ }
+
+ private function redrawSensitiveAreas(w:Number, h:Number, size:Number)
+ {
+ if (!FlashvarManager.get("keepAspectRatio"))
+ {
+ drawRectangle(line_left_mc, 0, 0, size, h);
+ drawRectangle(line_right_mc, 0, 0, size, h);
+ drawRectangle(line_top_mc, 0, 0, w, size);
+ drawRectangle(line_bottom_mc, 0, 0, w, size);
+ }
+
+ drawRectangle(corner_LT, 0, 0, 2*size, 2*size);
+ drawRectangle(corner_RT, 0, 0, 2*size, 2*size);
+ drawRectangle(corner_LB, 0, 0, 2*size, 2*size);
+ drawRectangle(corner_RB, 0, 0, 2*size, 2*size);
+ }
+
+ private function repositionSensitiveAreas(w:Number, h:Number)
+ {
+ if (!FlashvarManager.get("keepAspectRatio"))
+ {
+ line_left_mc._x = 0;
+ line_left_mc._y = 0;
+
+ line_right_mc._x = w - line_right_mc._width;
+ line_right_mc._y = 0;
+
+ line_top_mc._x = 0;
+ line_top_mc._y = 0;
+
+ line_bottom_mc._x = 0;
+ line_bottom_mc._y = h - line_bottom_mc._height;
+ }
+
+ corner_LT._x = 0;
+ corner_LT._y = 0;
+
+ corner_RT._x = w - corner_RT._width;
+ corner_RT._y = 0;
+
+ corner_LB._x = 0;
+ corner_LB._y = h - corner_LB._height;
+
+ corner_RB._x = w - corner_RB._width;
+ corner_RB._y = h - corner_RB._height;
+ }
+
+ private function drawRectangle(mc:MovieClip, x:Number, y:Number, w:Number, h:Number)
+ {
+ mc._x = x;
+ mc._y = y;
+ mc.clear();
+ mc.beginFill(0x0000ff, 100)
+ mc.moveTo(0, 0);
+ mc.lineTo(w, 0);
+ mc.lineTo(w, h);
+ mc.lineTo(0, h);
+ mc.endFill();
+ }
+
+ // event listeners --------------------------------------------------------------
+
+ function onDragAreaRollOver(area:MovieClip)
+ {
+ current_pointer_mc = _level0.imagetool_mc.mousepointer_mc.pointer_drag_mc;
+ onEnterFrame();
+ Mouse.hide();
+ current_pointer_mc._visible = true;
+ }
+
+ function onDragAreaRollOut(area:MovieClip)
+ {
+ current_pointer_mc._visible = false;
+ current_pointer_mc = null;
+ Mouse.show();
+ }
+
+ function onDragAreaPress(area:MovieClip)
+ {
+ var ei:EventInfo = new EventInfo(this, "onViewportPress");
+ broadcastEvent(ei);
+ }
+
+ function onDragAreaRelease(area:MovieClip)
+ {
+ var ei:EventInfo = new EventInfo(this, "onViewportRelease");
+ broadcastEvent(ei);
+ }
+
+ function onLineRollOver(line_mc:MovieClip)
+ {
+ current_pointer_mc = _level0.imagetool_mc.mousepointer_mc.pointer_line_mc;
+ onEnterFrame();
+ Mouse.hide();
+ current_pointer_mc._rotation = linePointerDegrees[line_mc.line] + _parent._rotation;
+ current_pointer_mc._visible = true;
+ }
+
+ function onLineRollOut(line:MovieClip)
+ {
+ current_pointer_mc._visible = false;
+ current_pointer_mc = null;
+ Mouse.show();
+ }
+
+ function onLinePress(line_mc:MovieClip)
+ {
+ var ei:EventInfo = new EventInfo(this, "onLinePress");
+ ei.setInfo("line", line_mc.line);
+
+ switch(line_mc.line)
+ {
+ case "L":
+ ei.setInfo("offsetX", line_mc._xmouse);
+ ei.setInfo("offsetY", 0);
+ break;
+
+ case "R":
+ ei.setInfo("offsetX", -(line_mc._width - line_mc._xmouse));
+ ei.setInfo("offsetY", 0);
+ break;
+
+ case "T":
+ ei.setInfo("offsetX", 0);
+ ei.setInfo("offsetY", line_mc._ymouse);
+ break;
+
+ case "B":
+ ei.setInfo("offsetX", 0);
+ ei.setInfo("offsetY", -(line_mc._height - line_mc._ymouse));
+ break;
+ }
+
+ broadcastEvent(ei);
+ }
+
+ function onLineRelease(line_mc:MovieClip)
+ {
+ if (!line_mc.hitTest(_level0._xmouse, _level0._ymouse, true))
+ onLineRollOut();
+
+ var ei:EventInfo = new EventInfo(this, "onLineRelease");
+ broadcastEvent(ei);
+ }
+
+ function onCornerRollOver(corner_mc:MovieClip)
+ {
+ current_pointer_mc = _level0.imagetool_mc.mousepointer_mc.pointer_corner_mc;
+ onEnterFrame();
+ Mouse.hide();
+ current_pointer_mc._rotation = cornerPointerDegrees[corner_mc.corner] + _parent._rotation;
+ current_pointer_mc._visible = true;
+ }
+
+ function onCornerRollOut(line:MovieClip)
+ {
+ current_pointer_mc._visible = false;
+ current_pointer_mc = null;
+ Mouse.show();
+ }
+
+ function onCornerPress(corner_mc:MovieClip)
+ {
+ var ei:EventInfo = new EventInfo(this, "onCornerPress");
+ ei.setInfo("corner", corner_mc.corner);
+
+ switch(corner_mc.corner)
+ {
+ case "LT":
+ ei.setInfo("offsetX", corner_mc._xmouse);
+ ei.setInfo("offsetY", corner_mc._ymouse);
+ break;
+
+ case "RT":
+ ei.setInfo("offsetX", -(corner_mc._width - corner_mc._xmouse));
+ ei.setInfo("offsetY", corner_mc._ymouse);
+ break;
+
+ case "LB":
+ ei.setInfo("offsetX", corner_mc._xmouse);
+ ei.setInfo("offsetY", -(corner_mc._height - corner_mc._ymouse));
+ break;
+
+ case "RB":
+ ei.setInfo("offsetX", -(corner_mc._width - corner_mc._xmouse));
+ ei.setInfo("offsetY", -(corner_mc._height - corner_mc._ymouse));
+ break;
+ }
+
+ broadcastEvent(ei);
+ }
+
+ function onCornerRelease(corner_mc:MovieClip)
+ {
+ if (!corner_mc.hitTest(_level0._xmouse, _level0._ymouse, true))
+ onCornerRollOut();
+
+ var ei:EventInfo = new EventInfo(this, "onCornerRelease");
+ broadcastEvent(ei);
+ }
+
+ function onEnterFrame()
+ {
+ if (current_pointer_mc)
+ {
+ //Mouse.hide();
+ current_pointer_mc._x = _level0._xmouse;
+ current_pointer_mc._y = _level0._ymouse;
+ }
+ else
+ {
+ /*
+ if (this.hitTest(_level0._xmouse, _level0._ymouse, true))
+ Mouse.hide();
+ else
+ Mouse.show();
+ */
+ }
+
+ }
+
+ public function onParentResize(w:Number, h:Number)
+ {
+
+ }
+
+ // helpers ----------------------------------------------------------------------------
+
+ private function initDragArea(area_mc:MovieClip)
+ {
+ area_mc.useHandCursor = false;
+ area_mc.onRollOver = function() { _parent.onDragAreaRollOver(this); }
+ area_mc.onRollOut = function() { _parent.onDragAreaRollOut(this); }
+ area_mc.onPress = function() { _parent.onDragAreaPress(this); }
+ area_mc.onRelease = area_mc.onReleaseOutside = function() { _parent.onDragAreaRelease(this); }
+ }
+
+ private function initLine(line_mc:MovieClip, line:String)
+ {
+ line_mc.line = line;
+ line_mc._alpha = 0;
+ line_mc.useHandCursor = false;
+ line_mc.onRollOver = function() { _parent.onLineRollOver(this); }
+ line_mc.onRollOut = function() { _parent.onLineRollOut(this); }
+ line_mc.onPress = function() { _parent.onLinePress(this); }
+ line_mc.onRelease = line_mc.onReleaseOutside = function() { _parent.onLineRelease(this); }
+ }
+
+ private function initCorner(corner_mc:MovieClip, corner:String)
+ {
+ corner_mc.corner = corner;
+ corner_mc._alpha = 0;
+ corner_mc.useHandCursor = false;
+ corner_mc.onRollOver = function() { _parent.onCornerRollOver(this); }
+ corner_mc.onRollOut = function() { _parent.onCornerRollOut(this); }
+ corner_mc.onPress = function() { _parent.onCornerPress(this); }
+ corner_mc.onRelease = corner_mc.onReleaseOutside = function() { _parent.onCornerRelease(this); }
+ }
+}
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/Component.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/Component.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/Component.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,60 @@
+import z3c.reference.imagetool.core.*;
+
+class z3c.reference.imagetool.core.Component extends MovieClip implements z3c.reference.imagetool.core.IFEventBroadcaster {
+
+ private var log_txt:TextField;
+ private var _bc:EventBroadcaster;
+
+ function Component() {
+ super();
+ _bc=new EventBroadcaster();
+ }
+
+ /**
+ very simple log
+ */
+ private function log(msg, param2:Object, param3:Object):Void{
+
+ //write into log_txt
+ _root.log_txt.text+=msg+"\n";
+ _root.log_txt.scroll = _root.log_txt.maxscroll;
+
+ //clear the console on maxlength
+ //if (_root.log_txt.maxscroll > 100) _root.log_txt.text="";
+
+ //trace it
+ trace(msg)
+
+ //pass it to the external alcon debug consol
+ net.hiddenresource.util.debug.Debug.trace(msg, param2, param3);
+ }
+
+ private function alert(msg:Object):Void {
+
+ getURL("JavaScript:alert('"+String(msg)+"');");
+
+ }
+
+ /**
+ event handling
+ */
+ public function addListener(obj:Object,e:String):Void {
+ _bc.addListener(obj, e);
+ }
+ public function removeListener(obj:Object,e:String):Void {
+ _bc.removeListener(obj, e);
+ }
+ public function broadcastEvent(eventInfo:z3c.reference.imagetool.core.EventInfo):Void {
+ _bc.broadcastEvent(eventInfo);
+ }
+
+ /**
+ use this method for debugging only
+ */
+ public function getListeners():Array{
+ return _bc.getListeners();
+ }
+
+
+
+}
\ No newline at end of file
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventBroadcaster.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventBroadcaster.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventBroadcaster.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,76 @@
+import z3c.reference.imagetool.core.EventInfo;
+
+class z3c.reference.imagetool.core.EventBroadcaster
+{
+ public var _listeners:Array;
+
+ public function EventBroadcaster() {
+
+ _listeners = new Array();
+ }
+
+ public function addListener(obj:Object,e:String):Void {
+
+ var l = {target:obj, event:e};
+
+ for (var i in _listeners) {
+ if (_listeners[i].target == l.target &&
+ _listeners[i].event == l.event) {
+ // this listener is allready registered
+ return;
+ }
+ }
+
+ _listeners.push(l);
+ }
+
+ public function removeListener(obj:Object,e:String):Void {
+
+ var l = {target:obj, event:e};
+ for (var i in _listeners) {
+ if (_listeners[i].target == l.target &&
+ _listeners[i].event == l.event) _listeners.splice(Number(i),1);
+ }
+ }
+
+ public function clearListener(Void):Void {
+ _listeners = new Array();
+ }
+
+ public function broadcastEvent(eventInfo:EventInfo) {
+ for (var i in _listeners) {
+
+ if (_listeners[i].event == eventInfo.getEvent() ||
+ _listeners[i].event == null) {
+
+ _listeners[i].target[eventInfo.getEvent()].call(_listeners[i].target,eventInfo)
+ }
+ }
+ }
+
+ /**
+ use this method for debugging only
+ */
+ public function getListeners():Array{
+ return _listeners;
+ }
+
+ /**
+ very simple log
+ */
+ private function log(msg, param2:Object, param3:Object):Void{
+
+ //write into log_txt
+ _root.log_txt.text+=msg+"\n";
+ _root.log_txt.scroll = _root.log_txt.maxscroll;
+
+ //clear the console on maxlength
+ //if (_root.log_txt.maxscroll > 100) _root.log_txt.text="";
+
+ //trace it
+ trace(msg)
+
+ //pass it to the external alcon debug consol
+ net.hiddenresource.util.debug.Debug.trace(msg, param2, param3);
+ }
+}
\ No newline at end of file
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventInfo.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventInfo.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/EventInfo.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,39 @@
+
+
+class z3c.reference.imagetool.core.EventInfo {
+
+ private var broadcaster:Object;
+ private var event:String
+ private var info:Object;
+
+ public function EventInfo(bc:Object,eventName:String) {
+ broadcaster = bc;
+ event = eventName;
+ info = new Object();
+ }
+
+ /**
+ @return a pointer to the object which has fired
+ the event. there is no type-specification of the
+ broadcaster, because it can be of any type.
+ */
+ public function getBroadcaster(Void){
+ return broadcaster;
+ }
+
+ public function getEvent(Void):String {
+ return event;
+ }
+
+ public function setEvent(val:String):Void {
+ event=val;
+ }
+
+ public function setInfo(key:String,info_obj):Void {
+ info[key] = info_obj;
+ }
+
+ public function getInfo(key:String) {
+ return info[key];
+ }
+}
\ No newline at end of file
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,82 @@
+/*
+ * FlashvarManager.as
+ *
+ * Manager for flashvars, use this instead of _level0.xxx to access a flashvar.
+ * Call oneTimeInit at the beginning of your application, the manager collects
+ * all variables on _level0, copies them to a object, decodes strings ('+' and '=')
+ * and parses numbers correctly...
+ *
+ * @author <gerold.boehler at lovelysystems.com>
+ *
+ */
+
+class z3c.reference.imagetool.core.FlashvarManager extends z3c.reference.imagetool.core.EventBroadcaster
+{
+ private static var _instance:z3c.reference.imagetool.core.FlashvarManager;
+ private var flashVars:Object;
+
+
+ function FlashvarManager()
+ {
+ flashVars = new Object();
+ }
+
+ public static function oneTimeInit():Void
+ {
+ for (var flashvar in _level0)
+ {
+ if (flashvar.indexOf("$") == 0)
+ continue;
+
+ getInstance().setVar(flashvar, decodeForFlash(_level0[flashvar]));
+ delete _level0[flashvar];
+ }
+ }
+
+ private static function decodeForFlash(str:String)
+ {
+ if (!isNaN(parseFloat(str)))
+ return parseFloat(str);
+
+ if (typeof(str) == "boolean")
+ return str;
+
+ if (str == "true" || str == "false")
+ return str == "true";
+
+ str = str.split("[p]").join("+");
+ str = str.split("[e]").join("=");
+
+ return str;
+ }
+
+ private function getVar(name:String):String
+ {
+ if (flashVars[name])
+ return flashVars[name];
+
+ return undefined;
+ }
+
+ private function setVar(name:String, value:String):Void
+ {
+ flashVars[name] = value;
+ trace("SETTING: " + name + " " + value)
+ }
+
+ public static function get(name:String)
+ {
+ if (!getInstance().getVar(name)) {
+ //getInstance().log("!ERROR! Flashvar " + name + " not found!");
+ }
+ return getInstance().getVar(name);
+ }
+
+ public static function getInstance():FlashvarManager
+ {
+ if (!_instance)
+ _instance = new FlashvarManager();
+
+ return _instance;
+ }
+}
\ No newline at end of file
Added: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/IFEventBroadcaster.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/IFEventBroadcaster.as (rev 0)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/IFEventBroadcaster.as 2007-09-04 15:37:44 UTC (rev 79461)
@@ -0,0 +1,8 @@
+
+interface z3c.reference.imagetool.core.IFEventBroadcaster{
+
+ public function addListener(obj:Object,e:String):Void;
+ public function removeListener(obj:Object,e:String):Void;
+ public function broadcastEvent(eventInfo:z3c.reference.imagetool.core.EventInfo):Void;
+
+}
\ No newline at end of file
Deleted: z3c.reference/branches/flash/src/z3c/reference/demo/browser/addref.pt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/browser/addref.pt 2007-09-04 13:52:00 UTC (rev 79460)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/browser/addref.pt 2007-09-04 15:37:44 UTC (rev 79461)
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:i18n="http://namespaces.zope.org/i18n"
- xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>demo picker</title>
- <style type="text/css">
- div {
- padding: 10px;
- margin: 5px;
- border: 1px solid #000;
- }
-
- div.actions {
- clear: both;
- border-width: 0px;
- }
- </style>
- <script src="jquery"
- type="text/javascript"
- tal:attributes="src context/++resource++jquery.js">
- </script>
- <script type="text/javascript"
- tal:content="string:
- function loadFlash() {
- var url='${context/++resource++imagetool.swf}';
- var img='${context/++resource++img.jpg}';
- url = url + '?url=' + img;
- var so = new SWFObject(url, 'image-tool', '100%', '300px', '8', 0x000000);
- so.addParam('allowScriptAccess', 'sameDomain');
- so.addParam('movie', url);
- so.addParam('quality', 'high');
- so.addVariable('crop_x', '100');
- so.addVariable('crop_y', '100');
- so.addVariable('crop_w', '100');
- so.addVariable('crop_h', '100');
- so.addVariable('original_w', '600');
- so.addVariable('original_h', '400');
- so.addVariable('zoomfactor', '0.33');
- so.addVariable('rotation', '90');
- var ok = so.write('flash-target');
- }
- ">
- </script>
- <script type="text/javascript">
- $(document).ready(loadFlash);
-
- // user selects an item
- function setIntId(uid) {
- // reset values
- $("textarea").val("");
- $("input[@type=text]").val("");
- // set iniid of selected item
- $("input[@name=intid]").val(uid);
- // highlight selected item
- $("a").attr("style", "");
- $("a[@href*=" + uid + "]").attr("style","background-color: red");
- // show divs
- $("div.properties").show();
- $("div.actions").show();
- $("div.image-tool").show();
- }
-
-
- $(document).ready(function(){
- // pressed submit button
- // return selected item to parent and close popup
- $("input[@type=submit]").click(function() {
- var intid = $("input[@name=intid]").val();
- window.opener.setIntId(intid);
- window.close();
- });
-
- // expand window size
- $("a").click(function() {
-
- });
- });
- </script>
- </head>
- <body>
- <form>
- <div class="picker">
- <b>Target:</b><br />
- <tal:block repeat="item view/items">
- <a href="#"
- tal:attributes="href string:JavaScript:setIntId(${item/uid})">
- <span tal:replace="item/name" />
- </a>
- <br />
- </tal:block>
- <input name="intid" type="text" value="None" />
- </div>
- <div class="properties" style="display:none;">
- <b>Properties:</b><br />
- <label for="title">Title</label>
- <input id="title" name="title" type="text" /><br />
- <label for="description">Decsprition</label>
- <textarea id="description" name="description"
- cols="20" rows="10"
- >abcd</textarea>
- </div>
- <div class="image-tool" style="display:none;">
- <!--div style="display:none;">
- <ul>
- <li><a href="javascript:zoom(1)">zoom in</a></li>
- <li><a href="javascript:zoom(-1)">zoom out</a></li>
- <li><a href="javascript:rotate(1)">rotate right</li>
- <li><a href="javascript:rotate(-1)">rotate left</li>
- <li><a href="javascript:save()">save</a></li>
- </ul>
- </div-->
- <div id="flash-target">
- </div>
- </div>
- <div class="actions" style="display:none;">
- <input type="submit" value="add reference" />
- </div>
- </form>
- </body>
-</html>
\ No newline at end of file
Modified: z3c.reference/branches/flash/src/z3c/reference/demo/browser/picker.pt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/browser/picker.pt 2007-09-04 13:52:00 UTC (rev 79460)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/browser/picker.pt 2007-09-04 15:37:44 UTC (rev 79461)
@@ -82,7 +82,7 @@
var url='${context/++resource++imagetool.swf}';
var img='${context/++resource++img.jpg}';
url = url + '?url=' + img;
- var so = new SWFObject(url, 'image-tool', '100%', '490px', '8', 0x000000);
+ var so = new SWFObject(url, 'image-tool', '100%', '490px', '8', '#FFFFFF');
so.addParam('allowScriptAccess', 'sameDomain');
so.addParam('movie', url);
so.addParam('quality', 'high');
@@ -90,10 +90,10 @@
so.addVariable('crop_y', '100');
so.addVariable('crop_w', '100');
so.addVariable('crop_h', '100');
- so.addVariable('original_w', '600');
- so.addVariable('original_h', '400');
+ //so.addVariable('original_w', '600');
+ //so.addVariable('original_h', '400');
so.addVariable('zoomfactor', '0.33');
- so.addVariable('rotation', '90');
+ so.addVariable('rotation', '0');
var ok = so.write('flash-target');
}
">
Modified: z3c.reference/branches/flash/src/z3c/reference/demo/browser/swf/imagetool.swf
===================================================================
(Binary files differ)
More information about the Checkins
mailing list